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:
Diffstat (limited to 'source/blender/windowmanager/intern/wm_gesture_ops.c')
-rw-r--r--source/blender/windowmanager/intern/wm_gesture_ops.c43
1 files changed, 41 insertions, 2 deletions
diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c
index 2c79b1f2215..fe21935ec88 100644
--- a/source/blender/windowmanager/intern/wm_gesture_ops.c
+++ b/source/blender/windowmanager/intern/wm_gesture_ops.c
@@ -29,9 +29,11 @@
#include "MEM_guardedalloc.h"
+#include "DNA_scene_types.h"
#include "DNA_windowmanager_types.h"
#include "BLI_math.h"
+#include "BLI_rect.h"
#include "BKE_context.h"
@@ -209,6 +211,11 @@ int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
rect->xmin = rect->xmax = event->x - gesture->winrct.xmin;
rect->ymin = rect->ymax = event->y - gesture->winrct.ymin;
}
+ else if (gesture->move) {
+ BLI_rcti_translate(rect,
+ (event->x - gesture->winrct.xmin) - rect->xmax,
+ (event->y - gesture->winrct.ymin) - rect->ymax);
+ }
else {
rect->xmax = event->x - gesture->winrct.xmin;
rect->ymax = event->y - gesture->winrct.ymin;
@@ -219,6 +226,9 @@ int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
else if (event->type == EVT_MODAL_MAP) {
switch (event->val) {
+ case GESTURE_MODAL_MOVE:
+ gesture->move = !gesture->move;
+ break;
case GESTURE_MODAL_BEGIN:
if (gesture->type == WM_GESTURE_CROSS_RECT && gesture->is_active == false) {
gesture->is_active = true;
@@ -652,9 +662,14 @@ int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
wmGesture *gesture = op->customdata;
switch (event->type) {
+ case EVT_MODAL_MAP:
+ switch (event->val) {
+ case GESTURE_MODAL_MOVE:
+ gesture->move = !gesture->move;
+ break;
+ }
case MOUSEMOVE:
case INBETWEEN_MOUSEMOVE:
-
wm_gesture_tag_redraw(CTX_wm_window(C));
if (gesture->points == gesture->points_alloc) {
@@ -671,9 +686,16 @@ int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
x = (event->x - gesture->winrct.xmin - lasso[0]);
y = (event->y - gesture->winrct.ymin - lasso[1]);
+ /* move the lasso */
+ if (gesture->move) {
+ for (int i = 0; i < gesture->points; i++) {
+ lasso[0 - (i * 2)] += x;
+ lasso[1 - (i * 2)] += y;
+ }
+ }
/* make a simple distance check to get a smoother lasso
* add only when at least 2 pixels between this and previous location */
- if ((x * x + y * y) > 4) {
+ else if ((x * x + y * y) > (2 * UI_DPI_FAC) ^ 2) {
lasso += 2;
lasso[0] = event->x - gesture->winrct.xmin;
lasso[1] = event->y - gesture->winrct.ymin;
@@ -877,6 +899,12 @@ int WM_gesture_straightline_modal(bContext *C, wmOperator *op, const wmEvent *ev
rect->xmin = rect->xmax = event->x - gesture->winrct.xmin;
rect->ymin = rect->ymax = event->y - gesture->winrct.ymin;
}
+ else if (gesture->move) {
+ BLI_rcti_translate(rect,
+ (event->x - gesture->winrct.xmin) - rect->xmax,
+ (event->y - gesture->winrct.ymin) - rect->ymax);
+ gesture_straightline_apply(C, op);
+ }
else {
rect->xmax = event->x - gesture->winrct.xmin;
rect->ymax = event->y - gesture->winrct.ymin;
@@ -887,6 +915,9 @@ int WM_gesture_straightline_modal(bContext *C, wmOperator *op, const wmEvent *ev
}
else if (event->type == EVT_MODAL_MAP) {
switch (event->val) {
+ case GESTURE_MODAL_MOVE:
+ gesture->move = !gesture->move;
+ break;
case GESTURE_MODAL_BEGIN:
if (gesture->is_active == false) {
gesture->is_active = true;
@@ -929,6 +960,11 @@ int WM_gesture_straightline_oneshot_modal(bContext *C, wmOperator *op, const wmE
rect->xmin = rect->xmax = event->x - gesture->winrct.xmin;
rect->ymin = rect->ymax = event->y - gesture->winrct.ymin;
}
+ else if (gesture->move) {
+ BLI_rcti_translate(rect,
+ (event->x - gesture->winrct.xmin) - rect->xmax,
+ (event->y - gesture->winrct.ymin) - rect->ymax);
+ }
else {
rect->xmax = event->x - gesture->winrct.xmin;
rect->ymax = event->y - gesture->winrct.ymin;
@@ -938,6 +974,9 @@ int WM_gesture_straightline_oneshot_modal(bContext *C, wmOperator *op, const wmE
}
else if (event->type == EVT_MODAL_MAP) {
switch (event->val) {
+ case GESTURE_MODAL_MOVE:
+ gesture->move = !gesture->move;
+ break;
case GESTURE_MODAL_BEGIN:
if (gesture->is_active == false) {
gesture->is_active = true;