]> git.saurik.com Git - wxWidgets.git/commitdiff
Some more drawing things,
authorRobert Roebling <robert@roebling.de>
Sat, 4 Mar 2000 18:40:52 +0000 (18:40 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 4 Mar 2000 18:40:52 +0000 (18:40 +0000)
  Tried to make miniframe stay on top, doesn't work,
  Make radio box big enough for its title,
  Can't anylong close disabled toplevel windows,
  Minor other changes.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

16 files changed:
samples/drawing/drawing.cpp
samples/html/widget/widget.cpp
samples/minifram/test.cpp
src/common/prntbase.cpp
src/gtk/dcclient.cpp
src/gtk/dialog.cpp
src/gtk/frame.cpp
src/gtk/minifram.cpp
src/gtk/radiobox.cpp
src/gtk/window.cpp
src/gtk1/dcclient.cpp
src/gtk1/dialog.cpp
src/gtk1/frame.cpp
src/gtk1/minifram.cpp
src/gtk1/radiobox.cpp
src/gtk1/window.cpp

index 7e6f40b2cb13c8463b5bfd57eca445a6c4a1289d..c0bd806ac895b496cf9b54c141a41e14fc922076 100644 (file)
@@ -392,6 +392,8 @@ void MyCanvas::DrawTestPoly( int x, int y,wxDC &dc,int transparent )
                 dc.SetTextBackground(m_owner->m_colourBackground);
                 dc.DrawRectangle( x+50, y+50, 200, 200 );
                 
+                dc.DrawCircle( x+400, y+50, 130 );
+                
                 dc.SetBrush(wxNullBrush);
                 dc.SetPen(wxNullPen);
                 break;
index c2aaf87f3b4753f552e3008eb05157cd2f07cea2..c0f8105a8c67b022edbd33937e2c25988da0b38a 100644 (file)
@@ -203,7 +203,7 @@ wxHtmlWindow *html;
     // ... and attach this menu bar to the frame
       SetMenuBar(menuBar);
    
-      CreateStatusBar(1);
+      CreateStatusBar(2);
 
       html = new wxHtmlWindow(this);
       html -> SetRelatedFrame(this, "VFS Demo: '%s'");
index 6d1b34c89506baaa0dfdda1015cd520361e9455c..1906176c68899978177f559f4ae46d62f07dc480 100644 (file)
@@ -51,14 +51,6 @@ wxButton      *button     = (wxButton*) NULL;
 // main frame
 bool MyApp::OnInit()
 {
-  // Create the mini frame window
-  mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
-     wxPoint(100, 100), wxSize(220, 100));
-  mini_frame_exists = TRUE;
-
-  mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
-  InitToolbar(mini_frame->GetToolBar());
-
   // Create the main frame window
   main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
      wxPoint(100, 100), wxSize(300, 200));
@@ -68,6 +60,14 @@ bool MyApp::OnInit()
 
   button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
 
+  // Create the mini frame window
+  mini_frame = new MyMiniFrame( main_frame, -1, "wxMiniFrame sample",
+     wxPoint(100, 100), wxSize(220, 100));
+  mini_frame_exists = TRUE;
+
+  mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+  InitToolbar(mini_frame->GetToolBar());
+
 #ifdef __WXMSW__
   main_frame->SetIcon(wxIcon("mondrian"));
   mini_frame->SetIcon(wxIcon("mondrian"));
index 6709e3721709b819f6fd60d842f167371e98446c..059fa64f8cb1685e33c81d7a5d6ee108c58fbe20 100644 (file)
@@ -195,10 +195,12 @@ void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
     wxPaintDC dc(this);
     PrepareDC( dc );
 
+/*
 #ifdef __WXGTK__
     if (!GetUpdateRegion().IsEmpty())
         dc.SetClippingRegion( GetUpdateRegion() );
 #endif
+*/
 
     if (m_printPreview)
     {
index 465a33f8684effb8f46af42943e33697473c28c3..ee0bc0092948e204b9831495aeddb55558fab94c 100644 (file)
@@ -302,7 +302,6 @@ void wxWindowDC::SetUpDC()
     gdk_gc_set_background( m_penGC, bg_col );
     
     gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
     
     /* m_brushGC */
     m_brush.GetColour().CalcPixel( m_cmap );
@@ -311,7 +310,6 @@ void wxWindowDC::SetUpDC()
     
     gdk_gc_set_fill( m_brushGC, GDK_SOLID );
     
-    
     /* m_bgGC */
     gdk_gc_set_background( m_bgGC, bg_col );
     gdk_gc_set_foreground( m_bgGC, bg_col );
@@ -552,8 +550,6 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoor
             }
         }
 
-        // To do: Fillstyle
-
         if (m_pen.GetStyle() != wxTRANSPARENT)
         {
             for (i = 0 ; i < n ; i++)
@@ -666,12 +662,41 @@ void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wx
 
         if (m_brush.GetStyle() != wxTRANSPARENT)
         {
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            }
         }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
@@ -708,7 +733,28 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
     if (m_window)
     {
         if (m_brush.GetStyle() != wxTRANSPARENT)
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+        {
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+            }
+        }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
             gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
@@ -798,14 +844,6 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
                 gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
                 gdk_gc_set_stipple( gc, mask );
                 gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*                
-                gdk_gc_set_clip_mask( m_brushGC, NULL );
-                gdk_gc_set_clip_mask( m_textGC, NULL );
-                SetBrush( *wxRED_BRUSH );
-                DrawRectangle( 70, 0, 70, 1000 );
-                gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
-                gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/                
                 gdk_gc_unref( gc );
             }
         
@@ -1060,27 +1098,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
 
             wxBitmap bitmap( width, height );
             
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
                 
             /* scale image */
-
             wxImage image( bitmap );
             image = image.Scale( ww, hh );
 
             /* convert to bitmap */
-
             bitmap = image.ConvertToBitmap();
 
             /* draw scaled bitmap */
-
             gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
 
         }
@@ -1088,15 +1120,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
         {
             /* No scaling and not a memory dc with a mask either */
 
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( m_window, m_penGC, xx, yy,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-                                  
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
         }
     }
 
index fbc1793ea980c1300ac7bed65564476717d7ff9c..70c83e3c7732a7b6486978f49a4163f6f7b39f5b 100644 (file)
@@ -59,7 +59,8 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    win->Close();
+    if (win->IsEnabled())
+        win->Close();
 
     return TRUE;
 }
index cf54c400dbe85b16d2ee619672f930d92f919baf..301a3b309da675ca8a07f0a69f6e1c6bc80cc00f 100644 (file)
@@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    if (g_openDialogs == 0)
+    if ((g_openDialogs == 0) && (win->IsEnabled()))
         win->Close();
 
     return TRUE;
index fb7412dba9b4be17b0a453a7e60d6ffbae8094e6..7b0c2ad4334dafaace26fcaead1df9d11b6cdd49 100644 (file)
@@ -318,6 +318,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
     
     wxFrame::Create( parent, id, title, pos, size, style, name );
 
+    if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+        gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
     if ((style & wxSYSTEM_MENU) &&
         ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
     {
index a65b07843534e7db35a3a5609740b13488d75c87..10044f42a13f5ac80c9323373b1ce3941b40ba2f 100644 (file)
@@ -192,6 +192,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
 
     wxSize ls = LayoutItems();
 
+    GtkRequisition req;
+    req.width = 2;
+    req.height = 2;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    if (req.width > ls.x) ls.x = req.width;
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = ls.x;
     if (newSize.y == -1) newSize.y = ls.y;
index befad324ff53a3a54afa33761f098ab9d1d80558..7525485937a69e5d7fd184398383c2502f399b04 100644 (file)
@@ -208,6 +208,8 @@ extern bool g_mainThreadLocked;
 // debug
 //-----------------------------------------------------------------------------
 
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
 #ifdef __WXDEBUG__
 
 #if wxUSE_THREADS
@@ -2157,10 +2159,11 @@ wxWindow::~wxWindow()
 
     if (m_widgetStyle)
     {
+#if DISABLE_STYLE_IF_BROKEN_THEME
         // don't delete if it's a pixmap theme style
         if (!m_widgetStyle->engine_data)
             gtk_style_unref( m_widgetStyle );
-            
+#endif            
         m_widgetStyle = (GtkStyle*) NULL;
     }
 
@@ -3053,6 +3056,7 @@ GtkStyle *wxWindow::GetWidgetStyle()
 
 void wxWindow::SetWidgetStyle()
 {
+#if DISABLE_STYLE_IF_BROKEN_THEM
     if (m_widget->style->engine_data)
     {
         static bool s_warningPrinted = FALSE;
@@ -3064,6 +3068,7 @@ void wxWindow::SetWidgetStyle()
         m_widgetStyle = m_widget->style;
         return;
     }
+#endif
 
     GtkStyle *style = GetWidgetStyle();
 
index 465a33f8684effb8f46af42943e33697473c28c3..ee0bc0092948e204b9831495aeddb55558fab94c 100644 (file)
@@ -302,7 +302,6 @@ void wxWindowDC::SetUpDC()
     gdk_gc_set_background( m_penGC, bg_col );
     
     gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
     
     /* m_brushGC */
     m_brush.GetColour().CalcPixel( m_cmap );
@@ -311,7 +310,6 @@ void wxWindowDC::SetUpDC()
     
     gdk_gc_set_fill( m_brushGC, GDK_SOLID );
     
-    
     /* m_bgGC */
     gdk_gc_set_background( m_bgGC, bg_col );
     gdk_gc_set_foreground( m_bgGC, bg_col );
@@ -552,8 +550,6 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoor
             }
         }
 
-        // To do: Fillstyle
-
         if (m_pen.GetStyle() != wxTRANSPARENT)
         {
             for (i = 0 ; i < n ; i++)
@@ -666,12 +662,41 @@ void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wx
 
         if (m_brush.GetStyle() != wxTRANSPARENT)
         {
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
-            gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+                gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+            }
         }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
@@ -708,7 +733,28 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
     if (m_window)
     {
         if (m_brush.GetStyle() != wxTRANSPARENT)
-            gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+        {
+            if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+            {
+                gdk_gc_set_ts_origin( m_textGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+            }
+            else if (m_brush.GetStyle() == wxSTIPPLE)
+            {
+                gdk_gc_set_ts_origin( m_brushGC, 
+                                      m_deviceOriginX % m_brush.GetStipple()->GetWidth(), 
+                                      m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+                gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+            }
+            else
+            {
+                gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+            }
+        }
 
         if (m_pen.GetStyle() != wxTRANSPARENT)
             gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
@@ -798,14 +844,6 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
                 gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
                 gdk_gc_set_stipple( gc, mask );
                 gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*                
-                gdk_gc_set_clip_mask( m_brushGC, NULL );
-                gdk_gc_set_clip_mask( m_textGC, NULL );
-                SetBrush( *wxRED_BRUSH );
-                DrawRectangle( 70, 0, 70, 1000 );
-                gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
-                gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/                
                 gdk_gc_unref( gc );
             }
         
@@ -1060,27 +1098,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
 
             wxBitmap bitmap( width, height );
             
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
                 
             /* scale image */
-
             wxImage image( bitmap );
             image = image.Scale( ww, hh );
 
             /* convert to bitmap */
-
             bitmap = image.ConvertToBitmap();
 
             /* draw scaled bitmap */
-
             gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
 
         }
@@ -1088,15 +1120,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
         {
             /* No scaling and not a memory dc with a mask either */
 
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+            /* copy including child window contents */
+            gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
             gdk_window_copy_area( m_window, m_penGC, xx, yy,
                                   srcDC->GetWindow(),
                                   xsrc, ysrc, width, height );
-                                  
-            if (srcDC->m_isScreenDC)
-                gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+            gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
         }
     }
 
index fbc1793ea980c1300ac7bed65564476717d7ff9c..70c83e3c7732a7b6486978f49a4163f6f7b39f5b 100644 (file)
@@ -59,7 +59,8 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    win->Close();
+    if (win->IsEnabled())
+        win->Close();
 
     return TRUE;
 }
index cf54c400dbe85b16d2ee619672f930d92f919baf..301a3b309da675ca8a07f0a69f6e1c6bc80cc00f 100644 (file)
@@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
     if (g_isIdle)
         wxapp_install_idle_handler();
 
-    if (g_openDialogs == 0)
+    if ((g_openDialogs == 0) && (win->IsEnabled()))
         win->Close();
 
     return TRUE;
index fb7412dba9b4be17b0a453a7e60d6ffbae8094e6..7b0c2ad4334dafaace26fcaead1df9d11b6cdd49 100644 (file)
@@ -318,6 +318,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
     
     wxFrame::Create( parent, id, title, pos, size, style, name );
 
+    if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+        gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
     if ((style & wxSYSTEM_MENU) &&
         ((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
     {
index a65b07843534e7db35a3a5609740b13488d75c87..10044f42a13f5ac80c9323373b1ce3941b40ba2f 100644 (file)
@@ -192,6 +192,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
 
     wxSize ls = LayoutItems();
 
+    GtkRequisition req;
+    req.width = 2;
+    req.height = 2;
+    (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+    if (req.width > ls.x) ls.x = req.width;
+    
     wxSize newSize = size;
     if (newSize.x == -1) newSize.x = ls.x;
     if (newSize.y == -1) newSize.y = ls.y;
index befad324ff53a3a54afa33761f098ab9d1d80558..7525485937a69e5d7fd184398383c2502f399b04 100644 (file)
@@ -208,6 +208,8 @@ extern bool g_mainThreadLocked;
 // debug
 //-----------------------------------------------------------------------------
 
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
 #ifdef __WXDEBUG__
 
 #if wxUSE_THREADS
@@ -2157,10 +2159,11 @@ wxWindow::~wxWindow()
 
     if (m_widgetStyle)
     {
+#if DISABLE_STYLE_IF_BROKEN_THEME
         // don't delete if it's a pixmap theme style
         if (!m_widgetStyle->engine_data)
             gtk_style_unref( m_widgetStyle );
-            
+#endif            
         m_widgetStyle = (GtkStyle*) NULL;
     }
 
@@ -3053,6 +3056,7 @@ GtkStyle *wxWindow::GetWidgetStyle()
 
 void wxWindow::SetWidgetStyle()
 {
+#if DISABLE_STYLE_IF_BROKEN_THEM
     if (m_widget->style->engine_data)
     {
         static bool s_warningPrinted = FALSE;
@@ -3064,6 +3068,7 @@ void wxWindow::SetWidgetStyle()
         m_widgetStyle = m_widget->style;
         return;
     }
+#endif
 
     GtkStyle *style = GetWidgetStyle();