From a56fcaaf46ccce9f6f79b8fad977dfe5a721ea61 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sat, 4 Mar 2000 18:40:52 +0000 Subject: [PATCH] Some more drawing things, 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 --- samples/drawing/drawing.cpp | 2 + samples/html/widget/widget.cpp | 2 +- samples/minifram/test.cpp | 16 +++--- src/common/prntbase.cpp | 2 + src/gtk/dcclient.cpp | 97 ++++++++++++++++++++++------------ src/gtk/dialog.cpp | 3 +- src/gtk/frame.cpp | 2 +- src/gtk/minifram.cpp | 3 ++ src/gtk/radiobox.cpp | 6 +++ src/gtk/window.cpp | 7 ++- src/gtk1/dcclient.cpp | 97 ++++++++++++++++++++++------------ src/gtk1/dialog.cpp | 3 +- src/gtk1/frame.cpp | 2 +- src/gtk1/minifram.cpp | 3 ++ src/gtk1/radiobox.cpp | 6 +++ src/gtk1/window.cpp | 7 ++- 16 files changed, 175 insertions(+), 83 deletions(-) diff --git a/samples/drawing/drawing.cpp b/samples/drawing/drawing.cpp index 7e6f40b2cb..c0bd806ac8 100644 --- a/samples/drawing/drawing.cpp +++ b/samples/drawing/drawing.cpp @@ -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; diff --git a/samples/html/widget/widget.cpp b/samples/html/widget/widget.cpp index c2aaf87f3b..c0f8105a8c 100644 --- a/samples/html/widget/widget.cpp +++ b/samples/html/widget/widget.cpp @@ -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'"); diff --git a/samples/minifram/test.cpp b/samples/minifram/test.cpp index 6d1b34c895..1906176c68 100644 --- a/samples/minifram/test.cpp +++ b/samples/minifram/test.cpp @@ -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")); diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 6709e37217..059fa64f8c 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -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) { diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 465a33f868..ee0bc00929 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -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 ); } } diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index fbc1793ea9..70c83e3c77 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -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; } diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index cf54c400db..301a3b309d 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -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; diff --git a/src/gtk/minifram.cpp b/src/gtk/minifram.cpp index fb7412dba9..7b0c2ad433 100644 --- a/src/gtk/minifram.cpp +++ b/src/gtk/minifram.cpp @@ -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))) { diff --git a/src/gtk/radiobox.cpp b/src/gtk/radiobox.cpp index a65b078435..10044f42a1 100644 --- a/src/gtk/radiobox.cpp +++ b/src/gtk/radiobox.cpp @@ -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; diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index befad324ff..7525485937 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -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(); diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 465a33f868..ee0bc00929 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -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 ); } } diff --git a/src/gtk1/dialog.cpp b/src/gtk1/dialog.cpp index fbc1793ea9..70c83e3c77 100644 --- a/src/gtk1/dialog.cpp +++ b/src/gtk1/dialog.cpp @@ -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; } diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index cf54c400db..301a3b309d 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -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; diff --git a/src/gtk1/minifram.cpp b/src/gtk1/minifram.cpp index fb7412dba9..7b0c2ad433 100644 --- a/src/gtk1/minifram.cpp +++ b/src/gtk1/minifram.cpp @@ -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))) { diff --git a/src/gtk1/radiobox.cpp b/src/gtk1/radiobox.cpp index a65b078435..10044f42a1 100644 --- a/src/gtk1/radiobox.cpp +++ b/src/gtk1/radiobox.cpp @@ -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; diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index befad324ff..7525485937 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -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();