X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/847dfdb422c4d56bb56d3c92a9cd706ee2b45530..83e8b44cc0bf8a2a8f162c67162f9ed68accd15f:/src/gtk/renderer.cpp diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index 6661e7ff53..2802f9274a 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -46,7 +46,9 @@ public: virtual void DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, - int flags = 0); + int flags = 0, + wxHeaderSortIconType sortArrow = wxHDR_SORT_ICON_NONE, + wxHeaderButtonParams* params = NULL); // draw the expanded/collapsed icon for a tree control item virtual void DrawTreeItemButton(wxWindow *win, @@ -183,24 +185,34 @@ void wxRendererGTK::DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, - int flags) + 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, sortArrow, params); } // draw a ">" or "v" button @@ -210,23 +222,31 @@ 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; else state = GTK_STATE_NORMAL; + 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, + dc.LogicalToDeviceX(rect.x) + 6 - x_diff, dc.LogicalToDeviceY(rect.y) + 3, flags & wxCONTROL_EXPANDED ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED @@ -285,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? @@ -318,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 */, @@ -333,7 +357,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win, } void -wxRendererGTK::DrawDropArrow(wxWindow *win, +wxRendererGTK::DrawDropArrow(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) @@ -345,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 @@ -376,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, @@ -402,7 +424,7 @@ wxRendererGTK::DrawComboBoxDropButton(wxWindow *win, } void -wxRendererGTK::DrawCheckBox(wxWindow *win, +wxRendererGTK::DrawCheckBox(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags ) @@ -410,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; @@ -427,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, @@ -440,7 +463,7 @@ wxRendererGTK::DrawCheckBox(wxWindow *win, } void -wxRendererGTK::DrawPushButton(wxWindow *win, +wxRendererGTK::DrawPushButton(wxWindow *WXUNUSED(win), wxDC& dc, const wxRect& rect, int flags) @@ -448,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; @@ -466,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, @@ -482,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) { @@ -491,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,