зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1179780 - Render opaque scrollbar troughs in the root viewport on GTK3. r=karlt
--HG-- extra : rebase_source : 2fe41b3c52e1b692e1a18b3c8123fc87569f9a57
This commit is contained in:
Родитель
585b4882e2
Коммит
10a8163b58
|
@ -1133,6 +1133,7 @@ static gint
|
||||||
moz_gtk_scrollbar_trough_paint(GtkThemeWidgetType widget,
|
moz_gtk_scrollbar_trough_paint(GtkThemeWidgetType widget,
|
||||||
cairo_t *cr, GdkRectangle* rect,
|
cairo_t *cr, GdkRectangle* rect,
|
||||||
GtkWidgetState* state,
|
GtkWidgetState* state,
|
||||||
|
GtkScrollbarTrackFlags flags,
|
||||||
GtkTextDirection direction)
|
GtkTextDirection direction)
|
||||||
{
|
{
|
||||||
GtkStyleContext* style;
|
GtkStyleContext* style;
|
||||||
|
@ -1147,6 +1148,11 @@ moz_gtk_scrollbar_trough_paint(GtkThemeWidgetType widget,
|
||||||
|
|
||||||
gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
|
gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
|
||||||
|
|
||||||
|
if (flags & MOZ_GTK_TRACK_OPAQUE) {
|
||||||
|
style = gtk_widget_get_style_context(GTK_WIDGET(gProtoWindow));
|
||||||
|
gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
|
||||||
|
}
|
||||||
|
|
||||||
style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar));
|
style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar));
|
||||||
gtk_style_context_save(style);
|
gtk_style_context_save(style);
|
||||||
gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH);
|
gtk_style_context_add_class(style, GTK_STYLE_CLASS_TROUGH);
|
||||||
|
@ -3104,7 +3110,9 @@ moz_gtk_widget_paint(GtkThemeWidgetType widget, cairo_t *cr,
|
||||||
case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL:
|
case MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL:
|
||||||
case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL:
|
case MOZ_GTK_SCROLLBAR_TRACK_VERTICAL:
|
||||||
return moz_gtk_scrollbar_trough_paint(widget, cr, rect,
|
return moz_gtk_scrollbar_trough_paint(widget, cr, rect,
|
||||||
state, direction);
|
state,
|
||||||
|
(GtkScrollbarTrackFlags) flags,
|
||||||
|
direction);
|
||||||
break;
|
break;
|
||||||
case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL:
|
case MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL:
|
||||||
case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL:
|
case MOZ_GTK_SCROLLBAR_THUMB_VERTICAL:
|
||||||
|
|
|
@ -51,6 +51,10 @@ typedef enum {
|
||||||
MOZ_GTK_STEPPER_VERTICAL = 1 << 2
|
MOZ_GTK_STEPPER_VERTICAL = 1 << 2
|
||||||
} GtkScrollbarButtonFlags;
|
} GtkScrollbarButtonFlags;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MOZ_GTK_TRACK_OPAQUE = 1 << 0
|
||||||
|
} GtkScrollbarTrackFlags;
|
||||||
|
|
||||||
/** flags for tab state **/
|
/** flags for tab state **/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* first eight bits are used to pass a margin */
|
/* first eight bits are used to pass a margin */
|
||||||
|
|
|
@ -412,9 +412,17 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
|
||||||
break;
|
break;
|
||||||
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
||||||
aGtkWidgetType = MOZ_GTK_SCROLLBAR_TRACK_VERTICAL;
|
aGtkWidgetType = MOZ_GTK_SCROLLBAR_TRACK_VERTICAL;
|
||||||
|
if (GetWidgetTransparency(aFrame, aWidgetType) == eOpaque)
|
||||||
|
*aWidgetFlags = MOZ_GTK_TRACK_OPAQUE;
|
||||||
|
else
|
||||||
|
*aWidgetFlags = 0;
|
||||||
break;
|
break;
|
||||||
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
||||||
aGtkWidgetType = MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL;
|
aGtkWidgetType = MOZ_GTK_SCROLLBAR_TRACK_HORIZONTAL;
|
||||||
|
if (GetWidgetTransparency(aFrame, aWidgetType) == eOpaque)
|
||||||
|
*aWidgetFlags = MOZ_GTK_TRACK_OPAQUE;
|
||||||
|
else
|
||||||
|
*aWidgetFlags = 0;
|
||||||
break;
|
break;
|
||||||
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
|
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
|
||||||
aGtkWidgetType = MOZ_GTK_SCROLLBAR_THUMB_VERTICAL;
|
aGtkWidgetType = MOZ_GTK_SCROLLBAR_THUMB_VERTICAL;
|
||||||
|
@ -1807,8 +1815,6 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
|
||||||
switch (aWidgetType) {
|
switch (aWidgetType) {
|
||||||
// These widgets always draw a default background.
|
// These widgets always draw a default background.
|
||||||
#if (MOZ_WIDGET_GTK == 2)
|
#if (MOZ_WIDGET_GTK == 2)
|
||||||
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
|
||||||
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
|
||||||
case NS_THEME_TOOLBAR:
|
case NS_THEME_TOOLBAR:
|
||||||
case NS_THEME_MENUBAR:
|
case NS_THEME_MENUBAR:
|
||||||
#endif
|
#endif
|
||||||
|
@ -1816,6 +1822,17 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
|
||||||
case NS_THEME_WINDOW:
|
case NS_THEME_WINDOW:
|
||||||
case NS_THEME_DIALOG:
|
case NS_THEME_DIALOG:
|
||||||
return eOpaque;
|
return eOpaque;
|
||||||
|
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
||||||
|
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
||||||
|
#if (MOZ_WIDGET_GTK == 3)
|
||||||
|
// Make scrollbar tracks opaque on the window's scroll frame to prevent
|
||||||
|
// leaf layers from overlapping. See bug 1179780.
|
||||||
|
if (!(CheckBooleanAttr(aFrame, nsGkAtoms::root_) &&
|
||||||
|
aFrame->PresContext()->IsRootContentDocument() &&
|
||||||
|
IsFrameContentNodeInNamespace(aFrame, kNameSpaceID_XUL)))
|
||||||
|
return eTransparent;
|
||||||
|
#endif
|
||||||
|
return eOpaque;
|
||||||
// Tooltips use gtk_paint_flat_box() on Gtk2
|
// Tooltips use gtk_paint_flat_box() on Gtk2
|
||||||
// but are shaped on Gtk3
|
// but are shaped on Gtk3
|
||||||
case NS_THEME_TOOLTIP:
|
case NS_THEME_TOOLTIP:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче