X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/72be9a3a27726e25f1b845075a4e895686e8fc69..a236aa2058ccf3d36e9cafc20fa7375080c4be50:/src/gtk/renderer.cpp diff --git a/src/gtk/renderer.cpp b/src/gtk/renderer.cpp index 8c6ce72a51..7323cb5c04 100644 --- a/src/gtk/renderer.cpp +++ b/src/gtk/renderer.cpp @@ -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,6 +180,28 @@ 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 // ---------------------------------------------------------------------------- @@ -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, @@ -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; @@ -540,7 +565,7 @@ wxRendererGTK::DrawItemSelectionRect(wxWindow *win, if (flags & wxCONTROL_CURRENT) { - gtk_paint_focus( win->m_widget->style, + gtk_paint_focus( win->m_widget->style, gdk_window, state, NULL,