[Bf-blender-cvs] [9d28b8ae3f6] soc-2019-outliner: Outliner: Prevent scroll page from leaving view bounds

Nathan Craddock noreply at git.blender.org
Wed Jul 17 06:44:55 CEST 2019


Commit: 9d28b8ae3f69284fcd57a449f8a589d779be7b81
Author: Nathan Craddock
Date:   Tue Jul 16 22:35:28 2019 -0600
Branches: soc-2019-outliner
https://developer.blender.org/rB9d28b8ae3f69284fcd57a449f8a589d779be7b81

Outliner: Prevent scroll page from leaving view bounds

The page up/down operator to scroll the tree could go past the
bounds of the tree leading to jumpy redraws. This prevents the
operator to go outside the bounds of the area.

===================================================================

M	source/blender/editors/space_outliner/outliner_edit.c

===================================================================

diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c
index e6e15388e21..6f817a451e3 100644
--- a/source/blender/editors/space_outliner/outliner_edit.c
+++ b/source/blender/editors/space_outliner/outliner_edit.c
@@ -1258,16 +1258,24 @@ void OUTLINER_OT_show_active(wmOperatorType *ot)
 static int outliner_scroll_page_exec(bContext *C, wmOperator *op)
 {
   ARegion *ar = CTX_wm_region(C);
-  int dy = BLI_rcti_size_y(&ar->v2d.mask);
-  int up = 0;
+  int size_y = BLI_rcti_size_y(&ar->v2d.mask) + 1;
 
+  bool up = false;
   if (RNA_boolean_get(op->ptr, "up")) {
-    up = 1;
+    up = true;
   }
 
-  if (up == 0) {
-    dy = -dy;
+  /* Keep view within outliner tree bounds */
+  int y_min = MIN2(ar->v2d.tot.ymin, ar->v2d.cur.ymin);
+  int dy;
+
+  if (up) {
+    dy = MIN2(size_y, -ar->v2d.cur.ymax);
+  }
+  else {
+    dy = -MIN2(size_y, ar->v2d.cur.ymin - y_min);
   }
+
   ar->v2d.cur.ymin += dy;
   ar->v2d.cur.ymax += dy;



More information about the Bf-blender-cvs mailing list