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:
authorCampbell Barton <ideasman42@gmail.com>2019-07-08 17:06:59 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-07-08 17:18:24 +0300
commita4bc6aca0ef96ce5e4b011cd33477e551269fa1e (patch)
treef4dffb5abc63ec6dcc4788cfd91e6225fab912a3 /source/blender/editors/space_view3d/view3d_gizmo_ruler.c
parent6546442f4f0a275a15969e1daefcc8e0f5fa8f54 (diff)
Fix T66554: Measure doesn't snap with Ctrl
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_gizmo_ruler.c')
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_ruler.c41
1 files changed, 32 insertions, 9 deletions
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
index ebfd66008f7..e781e129540 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
@@ -113,6 +113,13 @@ typedef struct RulerInfo {
wmWindow *win;
ScrArea *sa;
ARegion *ar; /* re-assigned every modal update */
+
+ /* Track changes in state. */
+ struct {
+ bool do_snap;
+ bool do_thickness;
+ } drag_state_prev;
+
} RulerInfo;
/* -------------------------------------------------------------------- */
@@ -280,6 +287,7 @@ static void ruler_state_set(bContext *C, RulerInfo *ruler_info, int state)
/* pass */
}
else if (state == RULER_STATE_DRAG) {
+ memset(&ruler_info->drag_state_prev, 0x0, sizeof(ruler_info->drag_state_prev));
ruler_info->snap_context = ED_transform_snap_object_context_create_view3d(
bmain, CTX_data_scene(C), CTX_data_depsgraph(C), 0, ruler_info->ar, CTX_wm_view3d(C));
}
@@ -857,27 +865,43 @@ static int gizmo_ruler_test_select(bContext *UNUSED(C), wmGizmo *gz, const int m
static int gizmo_ruler_modal(bContext *C,
wmGizmo *gz,
const wmEvent *event,
- eWM_GizmoFlagTweak UNUSED(tweak_flag))
+ eWM_GizmoFlagTweak tweak_flag)
{
bool do_draw = false;
int exit_code = OPERATOR_RUNNING_MODAL;
RulerInfo *ruler_info = gz->parent_gzgroup->customdata;
RulerItem *ruler_item = (RulerItem *)gz;
ARegion *ar = CTX_wm_region(C);
+ bool do_cursor_update = false;
ruler_info->ar = ar;
switch (event->type) {
case MOUSEMOVE: {
- if (ruler_info->state == RULER_STATE_DRAG) {
- if (view3d_ruler_item_mousemove(
- ruler_info, ruler_item, event->mval, event->shift != 0, event->ctrl != 0)) {
- do_draw = true;
- }
- }
+ do_cursor_update = true;
break;
}
}
+
+ const bool do_snap = tweak_flag & WM_GIZMO_TWEAK_SNAP;
+ const bool do_thickness = tweak_flag & WM_GIZMO_TWEAK_PRECISE;
+ if ((ruler_info->drag_state_prev.do_snap != do_snap) ||
+ (ruler_info->drag_state_prev.do_thickness != do_thickness)) {
+ do_cursor_update = true;
+ }
+
+ if (do_cursor_update) {
+ if (ruler_info->state == RULER_STATE_DRAG) {
+ if (view3d_ruler_item_mousemove(
+ ruler_info, ruler_item, event->mval, do_thickness, do_snap)) {
+ do_draw = true;
+ }
+ }
+ }
+
+ ruler_info->drag_state_prev.do_snap = do_snap;
+ ruler_info->drag_state_prev.do_thickness = do_thickness;
+
if (do_draw) {
ED_region_tag_redraw(ar);
}
@@ -920,8 +944,7 @@ static int gizmo_ruler_invoke(bContext *C, wmGizmo *gz, const wmEvent *event)
}
/* update the new location */
- view3d_ruler_item_mousemove(
- ruler_info, ruler_item_pick, event->mval, event->shift != 0, event->ctrl != 0);
+ view3d_ruler_item_mousemove(ruler_info, ruler_item_pick, event->mval, false, false);
}
}
else {