X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/08f57d2125e7cf8b602fb7505d7c5dbbdd6b664c..c4e43bea7b24f7b7f58e3f87786490cd81abf0a7:/src/gtk/renderer.cpp diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index e968ace5e1..7323cb5c04 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -43,7 +43,7 @@ class WXDLLEXPORT wxRendererGTK : public wxDelegateRendererNative { public: // draw the header control button (used by wxListCtrl) - virtual void DrawHeaderButton(wxWindow *win, + virtual int DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, int flags = 0, @@ -97,7 +97,7 @@ public: private: // FIXME: shouldn't we destroy these windows somewhere? - // used by DrawHeaderButton and DrawPushButton + // used by DrawPushButton and DrawDropArrow static GtkWidget *GetButtonWidget(); // used by DrawTreeItemButton() @@ -105,6 +105,9 @@ private: // used by DrawCheckBox() static GtkWidget *GetCheckButtonWidget(); + + // Used by DrawHeaderButton + static GtkWidget *GetHeaderButtonWidget(); }; // ============================================================================ @@ -177,11 +180,33 @@ wxRendererGTK::GetTreeWidget() return s_tree; } + +// This one just gets the button used by the column header. Although it's +// still a gtk_button the themes will typically differentiate and draw them +// differently if the button is in a treeview. +GtkWidget * +wxRendererGTK::GetHeaderButtonWidget() +{ + static GtkWidget *s_button = NULL; + + if ( !s_button ) + { + // Get the dummy tree widget, give it a column, and then use the + // widget in the column header for the rendering code. + GtkWidget* treewidget = GetTreeWidget(); + GtkTreeViewColumn* column = gtk_tree_view_column_new(); + gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column); + s_button = column->button; + } + + return s_button; +} + // ---------------------------------------------------------------------------- // list/tree controls drawing // ---------------------------------------------------------------------------- -void +int wxRendererGTK::DrawHeaderButton(wxWindow *win, wxDC& dc, const wxRect& rect, @@ -190,8 +215,8 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, wxHeaderButtonParams* params) { - GtkWidget *button = GetButtonWidget(); - + GtkWidget *button = GetHeaderButtonWidget(); + GdkWindow* gdk_window = dc.GetGDKWindow(); wxASSERT_MSG( gdk_window, wxT("cannot use wxRendererNative on wxDC of this type") ); @@ -199,7 +224,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, int x_diff = 0; if (win->GetLayoutDirection() == wxLayout_RightToLeft) x_diff = rect.width; - + gtk_paint_box ( button->style, @@ -212,7 +237,7 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win, dc.LogicalToDeviceX(rect.x) - x_diff, rect.y, rect.width, rect.height ); - DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); + return DrawHeaderButtonContents(win, dc, rect, flags, sortArrow, params); } // draw a ">" or "v" button @@ -334,7 +359,7 @@ wxRendererGTK::DrawSplitterSash(wxWindow *win, rect.height = full_size; rect.width = w; } - + int x_diff = 0; if (win->GetLayoutDirection() == wxLayout_RightToLeft) x_diff = rect.width; @@ -533,12 +558,16 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, rect.width, rect.height ); } + else // !wxCONTROL_SELECTED + { + state = GTK_STATE_NORMAL; + } if (flags & wxCONTROL_CURRENT) { - gtk_paint_focus( win->m_widget->style, + gtk_paint_focus( win->m_widget->style, gdk_window, - GTK_STATE_SELECTED, + state, NULL, win->m_wxwindow, "treeview",