X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b94ddc44ced056bb862938d069d9148c4c782b1..d10e22fe8ad283f37b1809349028ffc282e393ce:/src/gtk/renderer.cpp diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index b5200d0d35..2802f9274a 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -47,6 +47,7 @@ public: wxDC& dc, const wxRect& rect, int flags = 0, + wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, wxHeaderButtonParams* params = NULL); // draw the expanded/collapsed icon for a tree control item @@ -185,26 +186,33 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, int flags, + wxHeaderSortIconType sortArrow, wxHeaderButtonParams* params) { GtkWidget *button = GetButtonWidget(); + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); + + int x_diff = 0; + if (win->GetLayoutDirection() == wxLayout_RightToLeft) + x_diff = rect.width; + gtk_paint_box ( button->style, - // FIXME: I suppose GTK_PIZZA(win->m_wxwindow)->bin_window doesn't work with wxMemoryDC. - // Maybe use code similar as in DrawPushButton below? - GTK_PIZZA(win->m_wxwindow)->bin_window, + gdk_window, flags & wxCONTROL_DISABLED ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL, GTK_SHADOW_OUT, NULL, button, "button", - dc.LogicalToDeviceX(rect.x), rect.y, rect.width, rect.height + dc.LogicalToDeviceX(rect.x) - x_diff, rect.y, rect.width, rect.height ); - DrawHeaderButtonContents(win, dc, rect, flags, params); + DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); } // draw a ">" or "v" button @@ -214,6 +222,10 @@ wxRendererGTK::DrawTreeItemButton(wxWindow* win, { GtkWidget *tree = GetTreeWidget(); + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); + GtkStateType state; if ( flags & wxCONTROL_CURRENT ) state = GTK_STATE_PRELIGHT; @@ -223,18 +235,18 @@ wxRendererGTK::DrawTreeItemButton(wxWindow* win, int x_diff = 0; if (win->GetLayoutDirection() == wxLayout_RightToLeft) x_diff = rect.width; - + // VZ: I don't know how to get the size of the expander so as to centre it // in the given rectangle, +2/3 below is just what looks good here... gtk_paint_expander ( tree->style, - GTK_PIZZA(win->m_wxwindow)->bin_window, + gdk_window, state, NULL, tree, "treeview", - dc.LogicalToDeviceX(rect.x) + 2 - x_diff, + dc.LogicalToDeviceX(rect.x) + 6 - x_diff, dc.LogicalToDeviceY(rect.y) + 3, flags & wxCONTROL_EXPANDED ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED @@ -293,6 +305,10 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win, return; } + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); + wxCoord full_size = GetGtkSplitterFullSize(); // are we drawing vertical or horizontal splitter? @@ -326,7 +342,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win, gtk_paint_handle ( win->m_wxwindow->style, - GTK_PIZZA(win->m_wxwindow)->bin_window, + gdk_window, flags & wxCONTROL_CURRENT ? GTK_STATE_PRELIGHT : GTK_STATE_NORMAL, GTK_SHADOW_NONE, NULL /* no clipping */, @@ -341,7 +357,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win, } void -wxRendererGTK::DrawDropArrow(wxWindow *win, +wxRendererGTK::DrawDropArrow(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) @@ -353,11 +369,9 @@ wxRendererGTK::DrawDropArrow(wxWindow *win, // work for wxMemoryDC. So that is why we assume wxDC // is wxWindowDC (wxClientDC, wxMemoryDC and wxPaintDC // are derived from it) and use its m_window. - wxWindowDC& wdc = (wxWindowDC&)dc; - - // only doing debug-time checking here (it should - // probably be enough) - wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) ); + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); // draw arrow so that there is even space horizontally // on both sides @@ -384,7 +398,7 @@ wxRendererGTK::DrawDropArrow(wxWindow *win, gtk_paint_arrow ( button->style, - wdc.m_window, + gdk_window, state, flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT, NULL, @@ -410,7 +424,7 @@ wxRendererGTK::DrawComboBoxDropButton(wxWindow *win, } void -wxRendererGTK::DrawCheckBox(wxWindow *win, +wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags ) @@ -418,8 +432,9 @@ wxRendererGTK::DrawCheckBox(wxWindow *win, GtkWidget *button = GetCheckButtonWidget(); // for reason why we do this, see DrawDropArrow - wxWindowDC& wdc = (wxWindowDC&)dc; - wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) ); + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); GtkStateType state; @@ -435,7 +450,7 @@ wxRendererGTK::DrawCheckBox(wxWindow *win, gtk_paint_check ( button->style, - wdc.m_window, + gdk_window, state, flags & wxCONTROL_CHECKED ? GTK_SHADOW_IN : GTK_SHADOW_OUT, NULL, @@ -448,7 +463,7 @@ wxRendererGTK::DrawCheckBox(wxWindow *win, } void -wxRendererGTK::DrawPushButton(wxWindow *win, +wxRendererGTK::DrawPushButton(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) @@ -456,8 +471,9 @@ wxRendererGTK::DrawPushButton(wxWindow *win, GtkWidget *button = GetButtonWidget(); // for reason why we do this, see DrawDropArrow - wxWindowDC& wdc = (wxWindowDC&)dc; - wxASSERT ( wdc.IsKindOf(CLASSINFO(wxWindowDC)) ); + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); // draw button GtkStateType state; @@ -474,7 +490,7 @@ wxRendererGTK::DrawPushButton(wxWindow *win, gtk_paint_box ( button->style, - wdc.m_window, + gdk_window, state, flags & wxCONTROL_PRESSED ? GTK_SHADOW_IN : GTK_SHADOW_OUT, NULL, @@ -490,6 +506,10 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, const wxRect& rect, int flags ) { + GdkWindow* gdk_window = dc.GetGDKWindow(); + wxASSERT_MSG( gdk_window, + wxT("cannot use wxRendererNative on wxDC of this type") ); + GtkStateType state; if (flags & wxCONTROL_SELECTED) { @@ -499,7 +519,7 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, state = GTK_STATE_INSENSITIVE; gtk_paint_flat_box( win->m_wxwindow->style, - GTK_PIZZA(win->m_wxwindow)->bin_window, + gdk_window, state, GTK_SHADOW_NONE, NULL,