Bug 1355143 - Size scrollbars with 'hover' Gtk+ state, r?jhorak
Ubuntu/Ambiance has tiny scrollbars when it's not hovered by mouse and large
ones when it's hovered/active. Our current Gtk+ toolkit code does not support such scrollbar
resize on the fly.
We use a workaround as we get size of active (hovered) scrollbar only and that
we pass to gecko. Then we draw scrolbar smaller when it's not hovered and full sized
when it's hovered.
MozReview-Commit-ID: mxt9q5Bcg9
--- a/widget/gtk/nsNativeThemeGTK.cpp
+++ b/widget/gtk/nsNativeThemeGTK.cpp
@@ -1283,32 +1283,32 @@ nsNativeThemeGTK::GetWidgetBorder(nsDevi
aResult->top = aResult->left = aResult->right = aResult->bottom = 0;
switch (aWidgetType) {
case NS_THEME_SCROLLBAR_HORIZONTAL:
case NS_THEME_SCROLLBAR_VERTICAL:
{
GtkOrientation orientation =
aWidgetType == NS_THEME_SCROLLBAR_HORIZONTAL ?
GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
- const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation);
+ const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation, true);
const GtkBorder& border = metrics->border.scrollbar;
aResult->top = border.top;
aResult->right = border.right;
aResult->bottom = border.bottom;
aResult->left = border.left;
}
break;
case NS_THEME_SCROLLBARTRACK_HORIZONTAL:
case NS_THEME_SCROLLBARTRACK_VERTICAL:
{
GtkOrientation orientation =
aWidgetType == NS_THEME_SCROLLBARTRACK_HORIZONTAL ?
GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
- const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation);
+ const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation, true);
const GtkBorder& border = metrics->border.track;
aResult->top = border.top;
aResult->right = border.right;
aResult->bottom = border.bottom;
aResult->left = border.left;
}
break;
@@ -1453,28 +1453,28 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
aResult->width = aResult->height = 0;
*aIsOverridable = true;
switch (aWidgetType) {
case NS_THEME_SCROLLBARBUTTON_UP:
case NS_THEME_SCROLLBARBUTTON_DOWN:
{
const ScrollbarGTKMetrics* metrics =
- GetScrollbarMetrics(GTK_ORIENTATION_VERTICAL);
+ GetScrollbarMetrics(GTK_ORIENTATION_VERTICAL, true);
aResult->width = metrics->size.button.width;
aResult->height = metrics->size.button.height;
*aIsOverridable = false;
}
break;
case NS_THEME_SCROLLBARBUTTON_LEFT:
case NS_THEME_SCROLLBARBUTTON_RIGHT:
{
const ScrollbarGTKMetrics* metrics =
- GetScrollbarMetrics(GTK_ORIENTATION_HORIZONTAL);
+ GetScrollbarMetrics(GTK_ORIENTATION_HORIZONTAL, true);
aResult->width = metrics->size.button.width;
aResult->height = metrics->size.button.height;
*aIsOverridable = false;
}
break;
case NS_THEME_SPLITTER:
{
@@ -1497,29 +1497,29 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
/* While we enforce a minimum size for the thumb, this is ignored
* for the some scrollbars if buttons are hidden (bug 513006) because
* the thumb isn't a direct child of the scrollbar, unlike the buttons
* or track. So add a minimum size to the track as well to prevent a
* 0-width scrollbar. */
GtkOrientation orientation =
aWidgetType == NS_THEME_SCROLLBAR_HORIZONTAL ?
GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
- const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation);
+ const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation, true);
aResult->width = metrics->size.scrollbar.width;
aResult->height = metrics->size.scrollbar.height;
}
break;
case NS_THEME_SCROLLBARTHUMB_VERTICAL:
case NS_THEME_SCROLLBARTHUMB_HORIZONTAL:
{
GtkOrientation orientation =
aWidgetType == NS_THEME_SCROLLBARTHUMB_HORIZONTAL ?
GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL;
- const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation);
+ const ScrollbarGTKMetrics* metrics = GetScrollbarMetrics(orientation, true);
aResult->width = metrics->size.thumb.width;
aResult->height = metrics->size.thumb.height;
*aIsOverridable = false;
}
break;
case NS_THEME_RANGE_THUMB:
{