Bug 1355143 - Size scrollbars with 'hover' Gtk+ state, r?jhorak draft
authorMartin Stransky <stransky@redhat.com>
Wed, 18 Apr 2018 11:09:19 +0200
changeset 784988 86e94e01b0fa86fbce50e079066fbedccc45b239
parent 784987 478e40f73cee64d4e39971b09240b1881697a07d
child 785030 1f6fafc15210df6e268ff13c1084303393519514
push id107085
push userstransky@redhat.com
push dateThu, 19 Apr 2018 11:45:09 +0000
reviewersjhorak
bugs1355143
milestone61.0a1
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
widget/gtk/nsNativeThemeGTK.cpp
--- 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:
       {