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
This commit is contained in:
Paul Cornett
2012-11-25 02:23:34 +00:00
parent e758b8f741
commit 7fff16b863
25 changed files with 54 additions and 131 deletions

View File

@@ -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]);
// 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.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;
}
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;
}