Bug 1289764 - Move gHPanedWidget/gVPanedWidget to WidgetCache, r=acomminos

This commit is contained in:
Martin Stransky 2016-07-29 05:30:00 +02:00
parent ec30e6e963
commit d055a30b27
3 changed files with 55 additions and 50 deletions

View File

@ -287,6 +287,22 @@ CreateTreeHeaderSortArrowWidget()
return widget;
}
static GtkWidget*
CreateHPanedWidget()
{
GtkWidget* widget = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
AddToWindowContainer(widget);
return widget;
}
static GtkWidget*
CreateVPanedWidget()
{
GtkWidget* widget = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
AddToWindowContainer(widget);
return widget;
}
static GtkWidget*
CreateWidget(WidgetNodeType aWidgetType)
{
@ -349,6 +365,10 @@ CreateWidget(WidgetNodeType aWidgetType)
return CreateTreeHeaderCellWidget();
case MOZ_GTK_TREE_HEADER_SORTARROW:
return CreateTreeHeaderSortArrowWidget();
case MOZ_GTK_SPLITTER_HORIZONTAL:
return CreateHPanedWidget();
case MOZ_GTK_SPLITTER_VERTICAL:
return CreateVPanedWidget();
default:
/* Not implemented */
return nullptr;
@ -515,6 +535,14 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
// TODO - create from CSS node
return GetWidgetStyleWithClass(MOZ_GTK_TREEVIEW,
GTK_STYLE_CLASS_EXPANDER);
case MOZ_GTK_SPLITTER_SEPARATOR_HORIZONTAL:
style = CreateChildCSSNode("separator",
MOZ_GTK_SPLITTER_HORIZONTAL);
break;
case MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL:
style = CreateChildCSSNode("separator",
MOZ_GTK_SPLITTER_VERTICAL);
break;
default:
// TODO - create style from style path
GtkWidget* widget = GetWidget(aNodeType);
@ -589,6 +617,12 @@ GetWidgetStyleInternal(WidgetNodeType aNodeType)
case MOZ_GTK_TREEVIEW_EXPANDER:
return GetWidgetStyleWithClass(MOZ_GTK_TREEVIEW,
GTK_STYLE_CLASS_EXPANDER);
case MOZ_GTK_SPLITTER_SEPARATOR_HORIZONTAL:
return GetWidgetStyleWithClass(MOZ_GTK_SPLITTER_HORIZONTAL,
GTK_STYLE_CLASS_PANE_SEPARATOR);
case MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL:
return GetWidgetStyleWithClass(MOZ_GTK_SPLITTER_VERTICAL,
GTK_STYLE_CLASS_PANE_SEPARATOR);
default:
GtkWidget* widget = GetWidget(aNodeType);
MOZ_ASSERT(widget);

View File

@ -32,8 +32,6 @@ static GtkWidget* gComboBoxEntryArrowWidget;
static GtkWidget* gTabWidget;
static GtkWidget* gImageMenuItemWidget;
static GtkWidget* gCheckMenuItemWidget;
static GtkWidget* gHPanedWidget;
static GtkWidget* gVPanedWidget;
static style_prop_t style_prop_func;
static gboolean have_arrow_scaling;
@ -86,26 +84,6 @@ setup_widget_prototype(GtkWidget* widget)
return MOZ_GTK_SUCCESS;
}
static gint
ensure_hpaned_widget()
{
if (!gHPanedWidget) {
gHPanedWidget = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
setup_widget_prototype(gHPanedWidget);
}
return MOZ_GTK_SUCCESS;
}
static gint
ensure_vpaned_widget()
{
if (!gVPanedWidget) {
gVPanedWidget = gtk_paned_new(GTK_ORIENTATION_VERTICAL);
setup_widget_prototype(gVPanedWidget);
}
return MOZ_GTK_SUCCESS;
}
static gint
ensure_scale_widget()
{
@ -485,15 +463,14 @@ moz_gtk_button_get_default_border(gint* border_top, gint* border_left,
gint
moz_gtk_splitter_get_metrics(gint orientation, gint* size)
{
GtkStyleContext *style;
if (orientation == GTK_ORIENTATION_HORIZONTAL) {
ensure_hpaned_widget();
gtk_style_context_get_style(gtk_widget_get_style_context(gHPanedWidget),
"handle_size", size, NULL);
style = ClaimStyleContext(MOZ_GTK_SPLITTER_HORIZONTAL);
} else {
ensure_vpaned_widget();
gtk_style_context_get_style(gtk_widget_get_style_context(gVPanedWidget),
"handle_size", size, NULL);
style = ClaimStyleContext(MOZ_GTK_SPLITTER_VERTICAL);
}
gtk_style_context_get_style(style, "handle_size", size, NULL);
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -1020,17 +997,13 @@ static gint
moz_gtk_hpaned_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state)
{
GtkStyleContext* style;
ensure_hpaned_widget();
style = gtk_widget_get_style_context(gHPanedWidget);
gtk_style_context_save(style);
gtk_style_context_add_class(style, GTK_STYLE_CLASS_PANE_SEPARATOR);
gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
GtkStyleContext* style =
ClaimStyleContext(MOZ_GTK_SPLITTER_SEPARATOR_HORIZONTAL,
GTK_TEXT_DIR_LTR,
GetStateFlagsFromGtkWidgetState(state));
gtk_render_handle(style, cr,
rect->x, rect->y, rect->width, rect->height);
gtk_style_context_restore(style);
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -1038,17 +1011,13 @@ static gint
moz_gtk_vpaned_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state)
{
GtkStyleContext* style;
ensure_vpaned_widget();
style = gtk_widget_get_style_context(gVPanedWidget);
gtk_style_context_save(style);
gtk_style_context_add_class(style, GTK_STYLE_CLASS_PANE_SEPARATOR);
gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
GtkStyleContext* style =
ClaimStyleContext(MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
GTK_TEXT_DIR_LTR,
GetStateFlagsFromGtkWidgetState(state));
gtk_render_handle(style, cr,
rect->x, rect->y, rect->width, rect->height);
gtk_style_context_restore(style);
ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS;
}
@ -2977,8 +2946,6 @@ moz_gtk_shutdown()
gTabWidget = NULL;
gImageMenuItemWidget = NULL;
gCheckMenuItemWidget = NULL;
gHPanedWidget = NULL;
gVPanedWidget = NULL;
is_initialized = FALSE;

View File

@ -204,10 +204,14 @@ typedef enum {
MOZ_GTK_CHECKMENUITEM,
MOZ_GTK_RADIOMENUITEM,
MOZ_GTK_MENUSEPARATOR,
/* Paints a GtkVPaned separator */
/* GtkVPaned base class */
MOZ_GTK_SPLITTER_HORIZONTAL,
/* Paints a GtkHPaned separator */
/* GtkHPaned base class */
MOZ_GTK_SPLITTER_VERTICAL,
/* Paints a GtkVPaned separator */
MOZ_GTK_SPLITTER_SEPARATOR_HORIZONTAL,
/* Paints a GtkHPaned separator */
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
MOZ_GTK_WINDOW,
/* Window container for all widgets */