bug 1320860 introduce MOZ_GTK_TEXT_VIEW_TEXT and move MOZ_GTK_RESIZER to WidgetStyleCache r=stransky+263117+263117

The style context for MOZ_GTK_TEXT_VIEW is now created by copying from the
widget instead of caching a widget and using its context.

No rendering changes are expected, unless themes are animating GtkTextView
backgrounds.

MozReview-Commit-ID: 9aW61kMkKcb

--HG--
extra : rebase_source : 279c8b15e58c3f0fff51f41a4afacfebfbfa5739
This commit is contained in:
Karl Tomlinson 2016-12-30 13:37:51 +13:00
Родитель 1897a70d72
Коммит 5f631b2b35
4 изменённых файлов: 49 добавлений и 32 удалений

Просмотреть файл

@ -433,15 +433,6 @@ CreateScrolledWindowWidget()
return widget;
}
static GtkWidget*
CreateTextViewWidget()
{
GtkWidget* widget = gtk_text_view_new();
gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_SCROLLED_WINDOW)),
widget);
return widget;
}
static GtkWidget*
CreateMenuSeparatorWidget()
{
@ -591,8 +582,6 @@ CreateWidget(WidgetNodeType aWidgetType)
return CreateEntryWidget();
case MOZ_GTK_SCROLLED_WINDOW:
return CreateScrolledWindowWidget();
case MOZ_GTK_TEXT_VIEW:
return CreateTextViewWidget();
case MOZ_GTK_TREEVIEW:
return CreateTreeViewWidget();
case MOZ_GTK_TREE_HEADER_CELL:
@ -751,6 +740,10 @@ GetWidgetRootStyle(WidgetNodeType aNodeType)
style = CreateStyleForWidget(gtk_radio_menu_item_new(nullptr),
MOZ_GTK_MENUPOPUP);
break;
case MOZ_GTK_TEXT_VIEW:
style = CreateStyleForWidget(gtk_text_view_new(),
MOZ_GTK_SCROLLED_WINDOW);
break;
case MOZ_GTK_TOOLTIP:
if (gtk_check_version(3, 20, 0) != nullptr) {
// The tooltip style class is added first in CreateTooltipWidget()
@ -878,10 +871,21 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
// TODO - create from CSS node
return GetWidgetStyleWithClass(MOZ_GTK_SCROLLED_WINDOW,
GTK_STYLE_CLASS_FRAME);
case MOZ_GTK_TEXT_VIEW:
case MOZ_GTK_TEXT_VIEW_TEXT:
case MOZ_GTK_RESIZER:
// TODO - create from CSS node
return GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW,
GTK_STYLE_CLASS_VIEW);
style = GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW, GTK_STYLE_CLASS_VIEW);
if (aNodeType == MOZ_GTK_RESIZER) {
// The "grip" class provides the correct builtin icon from
// gtk_render_handle(). The icon is drawn with shaded variants of
// the background color, and so a transparent background would lead to
// a transparent resizer. gtk_render_handle() also uses the
// background color to draw a background, and so this style otherwise
// matches MOZ_GTK_TEXT_VIEW_TEXT to match the background with
// textarea elements.
gtk_style_context_add_class(style, GTK_STYLE_CLASS_GRIP);
}
return style;
case MOZ_GTK_FRAME_BORDER:
style = CreateChildCSSNode("border", MOZ_GTK_FRAME);
break;
@ -1012,9 +1016,25 @@ GetWidgetStyleInternal(WidgetNodeType aNodeType)
case MOZ_GTK_SCROLLED_WINDOW:
return GetWidgetStyleWithClass(MOZ_GTK_SCROLLED_WINDOW,
GTK_STYLE_CLASS_FRAME);
case MOZ_GTK_TEXT_VIEW:
return GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW,
GTK_STYLE_CLASS_VIEW);
case MOZ_GTK_TEXT_VIEW_TEXT:
case MOZ_GTK_RESIZER: {
// GTK versions prior to 3.20 do not have the view class on the root
// node, but add this to determine the background for the text window.
GtkStyleContext* style =
GetWidgetStyleWithClass(MOZ_GTK_TEXT_VIEW, GTK_STYLE_CLASS_VIEW);
if (aNodeType == MOZ_GTK_RESIZER) {
// The "grip" class provides the correct builtin icon from
// gtk_render_handle(). The icon is drawn with shaded variants of
// the background color, and so a transparent background would lead to
// a transparent resizer. gtk_render_handle() also uses the
// background color to draw a background, and so this style otherwise
// matches MOZ_GTK_TEXT_VIEW_TEXT to match the background with
// textarea elements. GtkTextView creates a separate text window and
// so the background should not be transparent.
gtk_style_context_add_class(style, GTK_STYLE_CLASS_GRIP);
}
return style;
}
case MOZ_GTK_FRAME_BORDER:
return GetWidgetRootStyle(MOZ_GTK_FRAME);
case MOZ_GTK_TREEVIEW_VIEW:

Просмотреть файл

@ -885,8 +885,10 @@ moz_gtk_text_view_paint(cairo_t *cr, GdkRectangle* rect,
gtk_style_context_get_padding(style_frame, state_flags, &padding);
ReleaseStyleContext(style_frame);
// There is a separate "text" window, which provides the background behind
// the text.
GtkStyleContext* style =
ClaimStyleContext(MOZ_GTK_TEXT_VIEW, direction, state_flags);
ClaimStyleContext(MOZ_GTK_TEXT_VIEW_TEXT, direction, state_flags);
gint xthickness = border.left + padding.left;
gint ythickness = border.top + padding.top;
@ -1325,17 +1327,9 @@ moz_gtk_resizer_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
GtkTextDirection direction)
{
GtkStyleContext* style;
// gtk_render_handle() draws a background, so use GtkTextView and its
// GTK_STYLE_CLASS_VIEW to match the background with textarea elements.
// The resizer is drawn with shaded variants of the background color, and
// so a transparent background would lead to a transparent resizer.
style = ClaimStyleContext(MOZ_GTK_TEXT_VIEW, GTK_TEXT_DIR_LTR,
GetStateFlagsFromGtkWidgetState(state));
// TODO - we need to save/restore style when gtk 3.20 CSS node path
// is used
gtk_style_context_add_class(style, GTK_STYLE_CLASS_GRIP);
GtkStyleContext* style =
ClaimStyleContext(MOZ_GTK_RESIZER, GTK_TEXT_DIR_LTR,
GetStateFlagsFromGtkWidgetState(state));
// Workaround unico not respecting the text direction for resizers.
// See bug 1174248.

Просмотреть файл

@ -145,8 +145,11 @@ typedef enum {
MOZ_GTK_ENTRY,
/* Paints a GtkExpander. */
MOZ_GTK_EXPANDER,
/* Paints a GtkTextView. */
/* Paints a GtkTextView or gets the style context corresponding to the
root node of a GtkTextView. */
MOZ_GTK_TEXT_VIEW,
/* The "text" window or node of a GtkTextView */
MOZ_GTK_TEXT_VIEW_TEXT,
/* Paints a GtkOptionMenu. */
MOZ_GTK_DROPDOWN,
/* Paints a dropdown arrow (a GtkButton containing a down GtkArrow). */
@ -168,7 +171,7 @@ typedef enum {
MOZ_GTK_FRAME,
/* Paints the border of a GtkFrame */
MOZ_GTK_FRAME_BORDER,
/* Paints a resize grip for a GtkWindow */
/* Paints a resize grip for a GtkTextView */
MOZ_GTK_RESIZER,
/* Paints a GtkProgressBar. */
MOZ_GTK_PROGRESSBAR,

Просмотреть файл

@ -1284,7 +1284,7 @@ nsLookAndFeel::Init()
}
#else
// Text colors
style = ClaimStyleContext(MOZ_GTK_TEXT_VIEW);
style = ClaimStyleContext(MOZ_GTK_TEXT_VIEW_TEXT);
gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
sMozFieldBackground = GDK_RGBA_TO_NS_RGBA(color);
gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);