UI: Prevent scrollbars from getting too small to grab
authorEitanSomething <EitanSomething>
Mon, 3 Jun 2019 16:13:52 +0000 (18:13 +0200)
committerJacques Lucke <mail@jlucke.com>
Mon, 3 Jun 2019 16:17:24 +0000 (18:17 +0200)
Differential Revision: https://developer.blender.org/D5001

source/blender/editors/include/UI_view2d.h
source/blender/editors/interface/view2d.c

index 4f880a8d46f386e35fa2ef530c65932a8be5beaa..bfdb52a4a5de06560cc2f312a0bf95ce7d96f891 100644 (file)
@@ -70,6 +70,8 @@ enum eView2D_CommonViewTypes {
 /* scroller 'handles' hotspot radius for mouse */
 #define V2D_SCROLLER_HANDLE_SIZE (0.6f * U.widget_unit)
 
+#define V2D_MIN_SCROLLER_SIZE (50.0 * UI_DPI_FAC)
+
 /* ------ Define for UI_view2d_sync ----- */
 
 /* means copy it from another v2d */
index 36b984e229b39ed2cdea772b8c8b5f280cf225f6..07c971aeb1171f1073387cce35d4afb0b2ed463c 100644 (file)
@@ -1504,12 +1504,12 @@ View2DScrollers *UI_view2d_scrollers_calc(View2D *v2d, const rcti *mask_custom)
     if (scrollers->hor_min > scrollers->hor_max) {
       scrollers->hor_min = scrollers->hor_max;
     }
-    /* prevent sliders from being too small, and disappearing */
-    if ((scrollers->hor_max - scrollers->hor_min) < V2D_SCROLLER_HANDLE_SIZE) {
-      scrollers->hor_max = scrollers->hor_min + V2D_SCROLLER_HANDLE_SIZE;
+    /* prevent sliders from being too small to grab */
+    if ((scrollers->hor_max - scrollers->hor_min) < V2D_MIN_SCROLLER_SIZE) {
+      scrollers->hor_max = scrollers->hor_min + V2D_MIN_SCROLLER_SIZE;
 
-      CLAMP(scrollers->hor_max, hor.xmin + V2D_SCROLLER_HANDLE_SIZE, hor.xmax);
-      CLAMP(scrollers->hor_min, hor.xmin, hor.xmax - V2D_SCROLLER_HANDLE_SIZE);
+      CLAMP(scrollers->hor_max, hor.xmin + V2D_MIN_SCROLLER_SIZE, hor.xmax);
+      CLAMP(scrollers->hor_min, hor.xmin, hor.xmax - V2D_MIN_SCROLLER_SIZE);
     }
   }
 
@@ -1542,13 +1542,12 @@ View2DScrollers *UI_view2d_scrollers_calc(View2D *v2d, const rcti *mask_custom)
     if (scrollers->vert_min > scrollers->vert_max) {
       scrollers->vert_min = scrollers->vert_max;
     }
-    /* prevent sliders from being too small, and disappearing */
-    if ((scrollers->vert_max - scrollers->vert_min) < V2D_SCROLLER_HANDLE_SIZE) {
+    /* prevent sliders from being too small to grab */
+    if ((scrollers->vert_max - scrollers->vert_min) < V2D_MIN_SCROLLER_SIZE) {
+      scrollers->vert_max = scrollers->vert_min + V2D_MIN_SCROLLER_SIZE;
 
-      scrollers->vert_max = scrollers->vert_min + V2D_SCROLLER_HANDLE_SIZE;
-
-      CLAMP(scrollers->vert_max, vert.ymin + V2D_SCROLLER_HANDLE_SIZE, vert.ymax);
-      CLAMP(scrollers->vert_min, vert.ymin, vert.ymax - V2D_SCROLLER_HANDLE_SIZE);
+      CLAMP(scrollers->vert_max, vert.ymin + V2D_MIN_SCROLLER_SIZE, vert.ymax);
+      CLAMP(scrollers->vert_min, vert.ymin, vert.ymax - V2D_MIN_SCROLLER_SIZE);
     }
   }