[Bf-blender-cvs] [ca5a429cad0] temp-vse-channels-edge-panning: Add limiting option for edge panning. Perhaps v2d->min and max could be used, but in sequencer content is displayed beyond this boundary, so will have to check if I can do it so it is consistent with current behavior.

Richard Antalik noreply at git.blender.org
Thu Mar 10 15:01:14 CET 2022


Commit: ca5a429cad0cd701e491e544db8405c17b28c97a
Author: Richard Antalik
Date:   Wed Mar 9 19:22:12 2022 +0100
Branches: temp-vse-channels-edge-panning
https://developer.blender.org/rBca5a429cad0cd701e491e544db8405c17b28c97a

Add limiting option for edge panning. Perhaps v2d->min and max could be used, but in sequencer content is displayed beyond this boundary, so will have to check if I can do it so it is consistent with current behavior.

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

M	source/blender/editors/include/UI_view2d.h
M	source/blender/editors/interface/view2d_edge_pan.c
M	source/blender/editors/transform/transform_convert_node.c
M	source/blender/editors/transform/transform_convert_sequencer.c

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

diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h
index b69d3008f1d..3f8ec4b5481 100644
--- a/source/blender/editors/include/UI_view2d.h
+++ b/source/blender/editors/include/UI_view2d.h
@@ -447,6 +447,8 @@ typedef struct View2DEdgePanData {
   struct ARegion *region;
   /** View2d we're operating in. */
   struct View2D *v2d;
+  /* Limit maximum pannable area */
+  struct rctf limit;
 
   /** Panning should only start once being in the inside rect once (e.g. adding nodes can happen
    * outside). */
@@ -491,6 +493,11 @@ void UI_view2d_edge_pan_init(struct bContext *C,
                              float max_speed,
                              float delay,
                              float zoom_influence);
+/**
+ * Set area which can be panned
+ */
+void UI_view2d_edge_pan_set_limits(
+    struct View2DEdgePanData *vpd, float xmin, float xmax, float ymin, float ymax);
 
 void UI_view2d_edge_pan_reset(struct View2DEdgePanData *vpd);
 
diff --git a/source/blender/editors/interface/view2d_edge_pan.c b/source/blender/editors/interface/view2d_edge_pan.c
index 1f54fd6f669..0d9378b600b 100644
--- a/source/blender/editors/interface/view2d_edge_pan.c
+++ b/source/blender/editors/interface/view2d_edge_pan.c
@@ -67,6 +67,7 @@ void UI_view2d_edge_pan_init(bContext *C,
   vpd->area = CTX_wm_area(C);
   vpd->region = CTX_wm_region(C);
   vpd->v2d = &vpd->region->v2d;
+  BLI_rctf_init(&vpd->limit, -FLT_MAX, FLT_MAX, -FLT_MAX, FLT_MAX);
 
   BLI_assert(speed_ramp > 0.0f);
   vpd->inside_pad = inside_pad;
@@ -87,6 +88,12 @@ void UI_view2d_edge_pan_init(bContext *C,
   UI_view2d_edge_pan_reset(vpd);
 }
 
+void UI_view2d_edge_pan_set_limits(
+    View2DEdgePanData *vpd, float xmin, float xmax, float ymin, float ymax)
+{
+  BLI_rctf_init(&vpd->limit, xmin, xmax, ymin, ymax);
+}
+
 void UI_view2d_edge_pan_reset(View2DEdgePanData *vpd)
 {
   vpd->edge_pan_start_time_x = 0.0;
@@ -220,20 +227,23 @@ void UI_view2d_edge_pan_apply(bContext *C, View2DEdgePanData *vpd, const int xy[
     vpd->enabled = true;
   }
 
+  rctf *cur = &vpd->v2d->cur;
+  rctf *limit = &vpd->limit;
+
   int pan_dir_x = 0;
   int pan_dir_y = 0;
   if (vpd->enabled && ((vpd->outside_pad == 0) || BLI_rcti_isect_pt_v(&outside_rect, xy))) {
     /* Find whether the mouse is beyond X and Y edges. */
-    if (xy[0] > inside_rect.xmax) {
+    if (xy[0] > inside_rect.xmax && cur->xmax < limit->xmax) {
       pan_dir_x = 1;
     }
-    else if (xy[0] < inside_rect.xmin) {
+    else if (xy[0] < inside_rect.xmin && cur->xmin > limit->xmin) {
       pan_dir_x = -1;
     }
-    if (xy[1] > inside_rect.ymax) {
+    if (xy[1] > inside_rect.ymax && cur->ymax < limit->ymax) {
       pan_dir_y = 1;
     }
-    else if (xy[1] < inside_rect.ymin) {
+    else if (xy[1] < inside_rect.ymin && cur->ymin > limit->ymin) {
       pan_dir_y = -1;
     }
   }
diff --git a/source/blender/editors/transform/transform_convert_node.c b/source/blender/editors/transform/transform_convert_node.c
index 7a4b03b640c..df49f893927 100644
--- a/source/blender/editors/transform/transform_convert_node.c
+++ b/source/blender/editors/transform/transform_convert_node.c
@@ -98,12 +98,12 @@ void createTransNodeData(TransInfo *t)
   View2DEdgePanData *customdata = MEM_callocN(sizeof(*customdata), __func__);
   UI_view2d_edge_pan_init(t->context,
                           customdata,
-                          NODE_EDGE_PAN_INSIDE_PAD,
-                          NODE_EDGE_PAN_OUTSIDE_PAD,
-                          NODE_EDGE_PAN_SPEED_RAMP,
-                          NODE_EDGE_PAN_MAX_SPEED,
-                          NODE_EDGE_PAN_DELAY,
-                          NODE_EDGE_PAN_ZOOM_INFLUENCE);
+                          SEQ_EDGE_PAN_INSIDE_PAD,
+                          SEQ_EDGE_PAN_OUTSIDE_PAD,
+                          SEQ_EDGE_PAN_SPEED_RAMP,
+                          SEQ_EDGE_PAN_MAX_SPEED,
+                          SEQ_EDGE_PAN_DELAY,
+                          SEQ_EDGE_PAN_ZOOM_INFLUENCE);
   t->custom.type.data = customdata;
   t->custom.type.use_free = true;
 
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c
index 04ed1bb08d3..273ebac79c0 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -34,6 +34,13 @@
 #include "transform.h"
 #include "transform_convert.h"
 
+#define SEQ_EDGE_PAN_INSIDE_PAD 2
+#define SEQ_EDGE_PAN_OUTSIDE_PAD 0 /* Disable clamping for panning, use whole screen. */
+#define SEQ_EDGE_PAN_SPEED_RAMP 1
+#define SEQ_EDGE_PAN_MAX_SPEED 40 /* In UI units per second, slower than default. */
+#define SEQ_EDGE_PAN_DELAY 1.0f
+#define SEQ_EDGE_PAN_ZOOM_INFLUENCE 0.5f
+
 /** Used for sequencer transform. */
 typedef struct TransDataSeq {
   struct Sequence *seq;
@@ -615,13 +622,6 @@ static void freeSeqData(TransInfo *t, TransDataContainer *tc, TransCustomData *c
   free_transform_custom_data(custom_data);
 }
 
-#define NODE_EDGE_PAN_INSIDE_PAD 2
-#define NODE_EDGE_PAN_OUTSIDE_PAD 0 /* Disable clamping for node panning, use whole screen. */
-#define NODE_EDGE_PAN_SPEED_RAMP 1
-#define NODE_EDGE_PAN_MAX_SPEED 40 /* In UI units per second, slower than default. */
-#define NODE_EDGE_PAN_DELAY 1.0f
-#define NODE_EDGE_PAN_ZOOM_INFLUENCE 0.5f
-
 void createTransSeqData(TransInfo *t)
 {
 #define XXX_DURIAN_ANIM_TX_HACK
@@ -689,12 +689,13 @@ void createTransSeqData(TransInfo *t)
   /* Custom data to enable edge panning during transformation. */
   UI_view2d_edge_pan_init(t->context,
                           &ts->edge_pan,
-                          NODE_EDGE_PAN_INSIDE_PAD,
-                          NODE_EDGE_PAN_OUTSIDE_PAD,
-                          NODE_EDGE_PAN_SPEED_RAMP,
-                          NODE_EDGE_PAN_MAX_SPEED,
-                          NODE_EDGE_PAN_DELAY,
-                          NODE_EDGE_PAN_ZOOM_INFLUENCE);
+                          SEQ_EDGE_PAN_INSIDE_PAD,
+                          SEQ_EDGE_PAN_OUTSIDE_PAD,
+                          SEQ_EDGE_PAN_SPEED_RAMP,
+                          SEQ_EDGE_PAN_MAX_SPEED,
+                          SEQ_EDGE_PAN_DELAY,
+                          SEQ_EDGE_PAN_ZOOM_INFLUENCE);
+  UI_view2d_edge_pan_set_limits(&ts->edge_pan, -FLT_MAX, FLT_MAX, 1, MAXSEQ + 1);
   ts->initial_v2d_cur = t->region->v2d.cur;
 
   /* loop 2: build transdata array */
@@ -738,6 +739,10 @@ static void view2d_edge_pan_loc_compensate(TransInfo *t, float loc_in[2], float
 {
   TransSeq *ts = (TransSeq *)TRANS_DATA_CONTAINER_FIRST_SINGLE(t)->custom.type.data;
 
+  /* Initial and current view2D rects for additional transform due to view panning and zooming */
+  const rctf *rect_src = &ts->initial_v2d_cur;
+  const rctf *rect_dst = &t->region->v2d.cur;
+
   if (t->options & CTX_VIEW2D_EDGE_PAN) {
     SpaceSeq *sseq = CTX_wm_space_seq(t->context);
     sseq->flag |= SPACE_SEQ_CLAMP_SMOOTH;
@@ -755,10 +760,6 @@ static void view2d_edge_pan_loc_compensate(TransInfo *t, float loc_in[2], float
     }
   }
 
-  /* Initial and current view2D rects for additional transform due to view panning and zooming */
-  const rctf *rect_src = &ts->initial_v2d_cur;
-  const rctf *rect_dst = &t->region->v2d.cur;
-
   copy_v2_v2(r_loc, loc_in);
   /* Additional offset due to change in view2D rect. */
   BLI_rctf_transform_pt_v(rect_dst, rect_src, r_loc, r_loc);



More information about the Bf-blender-cvs mailing list