From 7fff16b863c4fb4c92d44d08e91b31e835c904d0 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Sun, 25 Nov 2012 02:23:34 +0000 Subject: [PATCH] Simplify GetDefaultAttributesFromGTKWidget() by passing the widget to use, rather than a pointer to a function to create the widget git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73010 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/control.h | 20 -------- src/gtk/anybutton.cpp | 2 +- src/gtk/button.cpp | 2 +- src/gtk/checkbox.cpp | 2 +- src/gtk/choice.cpp | 2 +- src/gtk/combobox.cpp | 4 +- src/gtk/control.cpp | 98 ++++++++++++-------------------------- src/gtk/dataview.cpp | 2 +- src/gtk/gauge.cpp | 2 +- src/gtk/listbox.cpp | 2 +- src/gtk/notebook.cpp | 2 +- src/gtk/radiobox.cpp | 9 +--- src/gtk/radiobut.cpp | 9 +--- src/gtk/scrolbar.cpp | 2 +- src/gtk/slider.cpp | 2 +- src/gtk/spinbutt.cpp | 4 +- src/gtk/spinctrl.cpp | 4 +- src/gtk/statbmp.cpp | 3 +- src/gtk/statbox.cpp | 2 +- src/gtk/statline.cpp | 2 +- src/gtk/stattext.cpp | 2 +- src/gtk/textctrl.cpp | 2 +- src/gtk/tglbtn.cpp | 2 +- src/gtk/toolbar.cpp | 2 +- src/gtk/webview_webkit.cpp | 2 +- 25 files changed, 54 insertions(+), 131 deletions(-) diff --git a/include/wx/gtk/control.h b/include/wx/gtk/control.h index 5c288d0aa6..a68832acf4 100644 --- a/include/wx/gtk/control.h +++ b/include/wx/gtk/control.h @@ -18,13 +18,6 @@ typedef struct _GtkEntry GtkEntry; // wxControl //----------------------------------------------------------------------------- -// C-linkage function pointer types for GetDefaultAttributesFromGTKWidget -extern "C" { - typedef GtkWidget* (*wxGtkWidgetNew_t)(void); - typedef GtkWidget* (*wxGtkWidgetNewFromStr_t)(const char*); - typedef GtkWidget* (*wxGtkWidgetNewFromAdj_t)(GtkAdjustment*); -} - class WXDLLIMPEXP_CORE wxControl : public wxControlBase { typedef wxControlBase base_type; @@ -80,19 +73,6 @@ protected: GetDefaultAttributesFromGTKWidget(GtkWidget* widget, bool useBase = false, int state = 0); - static wxVisualAttributes - GetDefaultAttributesFromGTKWidget(wxGtkWidgetNew_t, - bool useBase = false, - int state = 0); - static wxVisualAttributes - GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromStr_t, - bool useBase = false, - int state = 0); - - static wxVisualAttributes - GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromAdj_t, - bool useBase = false, - int state = 0); // Widgets that use the style->base colour for the BG colour should // override this and return true. diff --git a/src/gtk/anybutton.cpp b/src/gtk/anybutton.cpp index 9036b2a7ed..60510a012f 100644 --- a/src/gtk/anybutton.cpp +++ b/src/gtk/anybutton.cpp @@ -95,7 +95,7 @@ GdkWindow *wxAnyButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const wxVisualAttributes wxAnyButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_button_new); + return GetDefaultAttributesFromGTKWidget(gtk_button_new()); } // ---------------------------------------------------------------------------- diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index 6e496d75bb..73ccbca580 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -334,7 +334,7 @@ wxSize wxButton::DoGetBestSize() const wxVisualAttributes wxButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_button_new); + return GetDefaultAttributesFromGTKWidget(gtk_button_new()); } #endif // wxUSE_BUTTON diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index b19cacc6d3..977dd37ac8 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -236,7 +236,7 @@ GdkWindow *wxCheckBox::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const wxVisualAttributes wxCheckBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_check_button_new); + return GetDefaultAttributesFromGTKWidget(gtk_check_button_new()); } #endif diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index 73ed8300b3..9c82f7b737 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -393,7 +393,7 @@ void wxChoice::DoApplyWidgetStyle(GtkRcStyle *style) wxVisualAttributes wxChoice::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_combo_box_new); + return GetDefaultAttributesFromGTKWidget(gtk_combo_box_new()); } diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index ae69a86b37..bf76ed5c50 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -290,9 +290,9 @@ wxVisualAttributes wxComboBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { #ifdef __WXGTK3__ - return GetDefaultAttributesFromGTKWidget(gtk_combo_box_new_with_entry, true); + return GetDefaultAttributesFromGTKWidget(gtk_combo_box_new_with_entry(), true); #else - return GetDefaultAttributesFromGTKWidget(gtk_combo_box_entry_new, true); + return GetDefaultAttributesFromGTKWidget(gtk_combo_box_entry_new(), true); #endif } diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index ff33e9af47..770ce7b116 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -234,6 +234,14 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, int state) { wxVisualAttributes attr; + + GtkWidget* tlw = NULL; + if (gtk_widget_get_parent(widget) == NULL) + { + tlw = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_container_add(GTK_CONTAINER(tlw), widget); + } + #ifdef __WXGTK3__ GtkStateFlags stateFlag = GTK_STATE_FLAG_NORMAL; if (state) @@ -258,29 +266,30 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, if (!style) style = gtk_widget_get_default_style(); - if (!style) + if (style) { - return wxWindow::GetClassDefaultAttributes(wxWINDOW_VARIANT_NORMAL); - } - - // get the style's colours - attr.colFg = wxColour(style->fg[state]); - if (useBase) - attr.colBg = wxColour(style->base[state]); - else - attr.colBg = wxColour(style->bg[state]); + // get the style's colours + attr.colFg = wxColour(style->fg[state]); + if (useBase) + attr.colBg = wxColour(style->base[state]); + else + attr.colBg = wxColour(style->bg[state]); - // get the style's font - if ( !style->font_desc ) - style = gtk_widget_get_default_style(); - if ( style && style->font_desc ) - { - wxNativeFontInfo info; - info.description = style->font_desc; - attr.font = wxFont(info); - info.description = NULL; + // get the style's font + if (!style->font_desc) + style = gtk_widget_get_default_style(); + if (style && style->font_desc) + { + wxNativeFontInfo info; + info.description = style->font_desc; + attr.font = wxFont(info); + info.description = NULL; + } } + else + attr = wxWindow::GetClassDefaultAttributes(wxWINDOW_VARIANT_NORMAL); #endif + if (!attr.font.IsOk()) { GtkSettings *settings = gtk_settings_get_default(); @@ -296,56 +305,9 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, g_free (font_name); } - return attr; -} + if (tlw) + gtk_widget_destroy(tlw); - -//static -wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNew_t widget_new, - bool useBase, - int state) -{ - wxVisualAttributes attr; - // NB: we need toplevel window so that GTK+ can find the right style - GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget* widget = widget_new(); - gtk_container_add(GTK_CONTAINER(wnd), widget); - attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(wnd); - return attr; -} - -//static -wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromStr_t widget_new, - bool useBase, - int state) -{ - wxVisualAttributes attr; - // NB: we need toplevel window so that GTK+ can find the right style - GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget* widget = widget_new(""); - gtk_container_add(GTK_CONTAINER(wnd), widget); - attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(wnd); - return attr; -} - - -//static -wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromAdj_t widget_new, - bool useBase, - int state) -{ - wxVisualAttributes attr; - // NB: we need toplevel window so that GTK+ can find the right style - GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget* widget = widget_new(NULL); - gtk_container_add(GTK_CONTAINER(wnd), widget); - attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(wnd); return attr; } diff --git a/src/gtk/dataview.cpp b/src/gtk/dataview.cpp index 26bc7cc8a7..2286b8c2ba 100644 --- a/src/gtk/dataview.cpp +++ b/src/gtk/dataview.cpp @@ -5104,7 +5104,7 @@ void wxDataViewCtrl::GtkEnableSelectionEvents() wxVisualAttributes wxDataViewCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new); + return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new()); } void wxDataViewCtrl::DoApplyWidgetStyle(GtkRcStyle *style) diff --git a/src/gtk/gauge.cpp b/src/gtk/gauge.cpp index 50b6758c9f..108a96e67b 100644 --- a/src/gtk/gauge.cpp +++ b/src/gtk/gauge.cpp @@ -128,7 +128,7 @@ wxVisualAttributes wxGauge::GetDefaultAttributes() const wxVisualAttributes wxGauge::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_progress_bar_new, + return GetDefaultAttributesFromGTKWidget(gtk_progress_bar_new(), false, GTK_STATE_ACTIVE); } diff --git a/src/gtk/listbox.cpp b/src/gtk/listbox.cpp index b3fcefba41..c5d597b4f4 100644 --- a/src/gtk/listbox.cpp +++ b/src/gtk/listbox.cpp @@ -931,7 +931,7 @@ wxSize wxListBox::DoGetBestSize() const wxVisualAttributes wxListBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new, true); + return GetDefaultAttributesFromGTKWidget(gtk_tree_view_new(), true); } #endif // wxUSE_LISTBOX diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 2423006517..f97678a920 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -607,7 +607,7 @@ GdkWindow *wxNotebook::GTKGetWindow(wxArrayGdkWindows& windows) const wxVisualAttributes wxNotebook::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_notebook_new); + return GetDefaultAttributesFromGTKWidget(gtk_notebook_new()); } #endif diff --git a/src/gtk/radiobox.cpp b/src/gtk/radiobox.cpp index cc0b114c32..37eafdf31d 100644 --- a/src/gtk/radiobox.cpp +++ b/src/gtk/radiobox.cpp @@ -617,14 +617,7 @@ GdkWindow *wxRadioBox::GTKGetWindow(wxArrayGdkWindows& windows) const wxVisualAttributes wxRadioBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - wxVisualAttributes attr; - // NB: we need toplevel window so that GTK+ can find the right style - GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget* widget = gtk_radio_button_new_with_label(NULL, ""); - gtk_container_add(GTK_CONTAINER(wnd), widget); - attr = GetDefaultAttributesFromGTKWidget(widget); - gtk_widget_destroy(wnd); - return attr; + return GetDefaultAttributesFromGTKWidget(gtk_radio_button_new_with_label(NULL, "")); } int wxRadioBox::GetItemFromPoint(const wxPoint& point) const diff --git a/src/gtk/radiobut.cpp b/src/gtk/radiobut.cpp index 421d842575..6128b2ce11 100644 --- a/src/gtk/radiobut.cpp +++ b/src/gtk/radiobut.cpp @@ -181,14 +181,7 @@ wxRadioButton::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const wxVisualAttributes wxRadioButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - wxVisualAttributes attr; - // NB: we need toplevel window so that GTK+ can find the right style - GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget* widget = gtk_radio_button_new_with_label(NULL, ""); - gtk_container_add(GTK_CONTAINER(wnd), widget); - attr = GetDefaultAttributesFromGTKWidget(widget); - gtk_widget_destroy(wnd); - return attr; + return GetDefaultAttributesFromGTKWidget(gtk_radio_button_new_with_label(NULL, "")); } diff --git a/src/gtk/scrolbar.cpp b/src/gtk/scrolbar.cpp index 2ef064b3fa..23da1044de 100644 --- a/src/gtk/scrolbar.cpp +++ b/src/gtk/scrolbar.cpp @@ -235,7 +235,7 @@ void wxScrollBar::SetRange(int range) wxVisualAttributes wxScrollBar::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_vscrollbar_new); + return GetDefaultAttributesFromGTKWidget(gtk_vscrollbar_new(NULL)); } #endif // wxUSE_SCROLLBAR diff --git a/src/gtk/slider.cpp b/src/gtk/slider.cpp index dd3b3889ee..718dda763c 100644 --- a/src/gtk/slider.cpp +++ b/src/gtk/slider.cpp @@ -533,7 +533,7 @@ GdkWindow *wxSlider::GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const wxVisualAttributes wxSlider::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_vscale_new); + return GetDefaultAttributesFromGTKWidget(gtk_vscale_new(NULL)); } #endif // wxUSE_SLIDER diff --git a/src/gtk/spinbutt.cpp b/src/gtk/spinbutt.cpp index 5cb5b6bb89..2a190e9e1c 100644 --- a/src/gtk/spinbutt.cpp +++ b/src/gtk/spinbutt.cpp @@ -217,9 +217,7 @@ wxSize wxSpinButton::DoGetBestSize() const wxVisualAttributes wxSpinButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - // TODO: overload to accept functions like gtk_spin_button_new? - // Until then use a similar type - return GetDefaultAttributesFromGTKWidget(gtk_button_new); + return GetDefaultAttributesFromGTKWidget(gtk_spin_button_new_with_range(0, 100, 1)); } #endif diff --git a/src/gtk/spinctrl.cpp b/src/gtk/spinctrl.cpp index 9bfe5a9b0b..d4f935e07a 100644 --- a/src/gtk/spinctrl.cpp +++ b/src/gtk/spinctrl.cpp @@ -376,9 +376,7 @@ wxSize wxSpinCtrlGTKBase::DoGetSizeFromTextSize(int xlen, int ylen) const wxVisualAttributes wxSpinCtrlGTKBase::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - // TODO: overload to accept functions like gtk_spin_button_new? - // Until then use a similar type - return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true); + return GetDefaultAttributesFromGTKWidget(gtk_spin_button_new_with_range(0, 100, 1), true); } //----------------------------------------------------------------------------- diff --git a/src/gtk/statbmp.cpp b/src/gtk/statbmp.cpp index a1c66085e3..19391bbb7e 100644 --- a/src/gtk/statbmp.cpp +++ b/src/gtk/statbmp.cpp @@ -75,8 +75,7 @@ void wxStaticBitmap::SetBitmap( const wxBitmap &bitmap ) wxVisualAttributes wxStaticBitmap::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - // TODO: overload to allow using gtk_pixmap_new? - return GetDefaultAttributesFromGTKWidget(gtk_label_new); + return GetDefaultAttributesFromGTKWidget(gtk_image_new()); } #endif // wxUSE_STATBMP diff --git a/src/gtk/statbox.cpp b/src/gtk/statbox.cpp index 5cb14390ff..139a678df2 100644 --- a/src/gtk/statbox.cpp +++ b/src/gtk/statbox.cpp @@ -152,7 +152,7 @@ void wxStaticBox::GTKWidgetDoSetMnemonic(GtkWidget* w) wxVisualAttributes wxStaticBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_frame_new); + return GetDefaultAttributesFromGTKWidget(gtk_frame_new("")); } diff --git a/src/gtk/statline.cpp b/src/gtk/statline.cpp index c199ece70e..14bfb736df 100644 --- a/src/gtk/statline.cpp +++ b/src/gtk/statline.cpp @@ -76,7 +76,7 @@ bool wxStaticLine::Create( wxWindow *parent, wxWindowID id, wxVisualAttributes wxStaticLine::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_vseparator_new); + return GetDefaultAttributesFromGTKWidget(gtk_vseparator_new()); } #endif diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp index 4bffc1fa04..6bd76670bb 100644 --- a/src/gtk/stattext.cpp +++ b/src/gtk/stattext.cpp @@ -248,7 +248,7 @@ void wxStaticText::DoSetLabel(const wxString& str) wxVisualAttributes wxStaticText::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_label_new); + return GetDefaultAttributesFromGTKWidget(gtk_label_new("")); } #endif // wxUSE_STATTEXT diff --git a/src/gtk/textctrl.cpp b/src/gtk/textctrl.cpp index ecb98e6bdc..f0597d724b 100644 --- a/src/gtk/textctrl.cpp +++ b/src/gtk/textctrl.cpp @@ -2009,7 +2009,7 @@ bool wxTextCtrl::GTKProcessEvent(wxEvent& event) const wxVisualAttributes wxTextCtrl::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_entry_new, true); + return GetDefaultAttributesFromGTKWidget(gtk_entry_new(), true); } #endif // wxUSE_TEXTCTRL diff --git a/src/gtk/tglbtn.cpp b/src/gtk/tglbtn.cpp index 1ad831108f..c3b92d2980 100644 --- a/src/gtk/tglbtn.cpp +++ b/src/gtk/tglbtn.cpp @@ -235,7 +235,7 @@ wxSize wxToggleButton::DoGetBestSize() const wxVisualAttributes wxToggleButton::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_toggle_button_new); + return GetDefaultAttributesFromGTKWidget(gtk_toggle_button_new()); } #endif // wxUSE_TOGGLEBTN diff --git a/src/gtk/toolbar.cpp b/src/gtk/toolbar.cpp index 6897592dd9..6f4aa4c6e9 100644 --- a/src/gtk/toolbar.cpp +++ b/src/gtk/toolbar.cpp @@ -763,7 +763,7 @@ void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap ) wxVisualAttributes wxToolBar::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(gtk_toolbar_new); + return GetDefaultAttributesFromGTKWidget(gtk_toolbar_new()); } #endif // wxUSE_TOOLBAR_NATIVE diff --git a/src/gtk/webview_webkit.cpp b/src/gtk/webview_webkit.cpp index 28754d298a..3e9008503f 100644 --- a/src/gtk/webview_webkit.cpp +++ b/src/gtk/webview_webkit.cpp @@ -1004,7 +1004,7 @@ void wxWebViewWebKit::FindClear() wxVisualAttributes wxWebViewWebKit::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { - return GetDefaultAttributesFromGTKWidget(webkit_web_view_new); + return GetDefaultAttributesFromGTKWidget(webkit_web_view_new()); } -- 2.45.2