Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2022-04-04 15:25:13 +0300
committerRichard Antalik <richardantalik@gmail.com>2022-04-04 15:28:55 +0300
commite49fef45cef7d53ae856a943e125838cdfcea0a0 (patch)
treeb2b299823e5fa423788784da9741c2d27b06c211 /source/blender/editors/interface/view2d_edge_pan.cc
parent3ce6c5adfc6e9afd8a4db8d91084ae707db9b262 (diff)
VSE: Use edge panning
Add edge panning feature to transform operator. It works in same way as in node editor, but Y axis is limited by usable range up to 128 channels. Reviewed By: Severin Differential Revision: https://developer.blender.org/D14310
Diffstat (limited to 'source/blender/editors/interface/view2d_edge_pan.cc')
-rw-r--r--source/blender/editors/interface/view2d_edge_pan.cc18
1 files changed, 14 insertions, 4 deletions
diff --git a/source/blender/editors/interface/view2d_edge_pan.cc b/source/blender/editors/interface/view2d_edge_pan.cc
index ab1672ae8f6..82959d96043 100644
--- a/source/blender/editors/interface/view2d_edge_pan.cc
+++ b/source/blender/editors/interface/view2d_edge_pan.cc
@@ -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;
}
}