[GTK3] Consider textview root node background in addition to text node for -moz-appearance:textfield-multiline

This is necessary for GTK versions > 3.18 because windows no longer clear their backgrounds since https://git.gnome.org/browse/gtk+/commit/?id=580ea227a6bb19ad6c6d4766b3a36dbad24583f3 and Ambiance for 3.20 has a transparent background for the "text" window.
This commit is contained in:
trav90 2018-04-06 09:16:44 -05:00 • committed by Roy Tam
commit a9302f7a0e

View file

@ -873,7 +873,7 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
} }
static gint static gint
moz_gtk_text_view_paint(cairo_t *cr, GdkRectangle* rect, moz_gtk_text_view_paint(cairo_t *cr, GdkRectangle* aRect,
GtkWidgetState* state, GtkWidgetState* state,
GtkTextDirection direction) GtkTextDirection direction)
{ {
@ -890,26 +890,24 @@ moz_gtk_text_view_paint(cairo_t *cr, GdkRectangle* rect,
GtkStyleContext* style_frame = GtkStyleContext* style_frame =
ClaimStyleContext(MOZ_GTK_SCROLLED_WINDOW, direction, state_flags); ClaimStyleContext(MOZ_GTK_SCROLLED_WINDOW, direction, state_flags);
gtk_render_frame(style_frame, cr, rect->x, rect->y, rect->width, rect->height); gtk_render_frame(style_frame, cr,
aRect->x, aRect->y, aRect->width, aRect->height);
GdkRectangle rect = *aRect;
InsetByBorderPadding(&rect, style_frame);
GtkBorder border, padding;
gtk_style_context_get_border(style_frame, state_flags, &border);
gtk_style_context_get_padding(style_frame, state_flags, &padding);
ReleaseStyleContext(style_frame); ReleaseStyleContext(style_frame);
// There is a separate "text" window, which provides the background behind
// the text.
GtkStyleContext* style = GtkStyleContext* style =
ClaimStyleContext(MOZ_GTK_TEXT_VIEW_TEXT, direction, state_flags); ClaimStyleContext(MOZ_GTK_TEXT_VIEW, direction, state_flags);
gtk_render_background(style, cr, rect.x, rect.y, rect.width, rect.height);
gint xthickness = border.left + padding.left; ReleaseStyleContext(style);
gint ythickness = border.top + padding.top; // There is a separate "text" window, which usually provides the
// background behind the text. However, this is transparent in Ambiance
gtk_render_background(style, cr, // for GTK 3.20, in which case the MOZ_GTK_TEXT_VIEW background is
rect->x + xthickness, rect->y + ythickness, // visible.
rect->width - 2 * xthickness, style = ClaimStyleContext(MOZ_GTK_TEXT_VIEW_TEXT, direction, state_flags);
rect->height - 2 * ythickness); gtk_render_background(style, cr, rect.x, rect.y, rect.width, rect.height);
ReleaseStyleContext(style); ReleaseStyleContext(style);
return MOZ_GTK_SUCCESS; return MOZ_GTK_SUCCESS;