diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-04-16 04:51:38 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-04-16 05:13:59 +0300 |
commit | 43baf38758d2f1cba5c9d551da2321bb99ac3161 (patch) | |
tree | af245e9f2e77a2e85e8e440b706d7038c367cd86 /source/blender/editors | |
parent | fa8d566c3b12553b73862b6cb34cfa0b1020513f (diff) |
Snap Gizmo: Minor optimization in detecting toggle inversion
Do not compare the x and y values of the mouse to check inversion.
Also remove "Lazy Initialization".
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c index f13b7d832bd..cd7d0f5fb4c 100644 --- a/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c +++ b/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c @@ -93,24 +93,19 @@ typedef struct SnapGizmo3D { bool is_enabled; } SnapGizmo3D; -static bool eventstate_cmp(SnapGizmo3D *snap_gizmo, const wmEvent *event) -{ - if ((event->x == snap_gizmo->last_eventstate.x) && (event->y == snap_gizmo->last_eventstate.y) && - (event->ctrl == snap_gizmo->last_eventstate.ctrl) && - (event->shift == snap_gizmo->last_eventstate.shift) && - (event->alt == snap_gizmo->last_eventstate.alt) && - (event->oskey == snap_gizmo->last_eventstate.oskey)) { - return true; - } - return false; -} - /* Checks if the current event is different from the one captured in the last update. */ static bool eventstate_has_changed(SnapGizmo3D *snap_gizmo, const wmWindowManager *wm) { if (wm && wm->winactive) { const wmEvent *event = wm->winactive->eventstate; - return eventstate_cmp(snap_gizmo, event) == false; + if ((event->x != snap_gizmo->last_eventstate.x) || + (event->y != snap_gizmo->last_eventstate.y) || + (event->ctrl != snap_gizmo->last_eventstate.ctrl) || + (event->shift != snap_gizmo->last_eventstate.shift) || + (event->alt != snap_gizmo->last_eventstate.alt) || + (event->oskey != snap_gizmo->last_eventstate.oskey)) { + return true; + } } return false; } @@ -137,16 +132,14 @@ static bool invert_snap(SnapGizmo3D *snap_gizmo, const wmWindowManager *wm) } const wmEvent *event = wm->winactive->eventstate; - if (eventstate_cmp(snap_gizmo, event)) { + if ((event->ctrl == snap_gizmo->last_eventstate.ctrl) && + (event->shift == snap_gizmo->last_eventstate.shift) && + (event->alt == snap_gizmo->last_eventstate.alt) && + (event->oskey == snap_gizmo->last_eventstate.oskey)) { /* Nothing has changed. */ return snap_gizmo->invert_snap; } - if (snap_gizmo->keymap == NULL) { - /* Lazy initialization. */ - snap_gizmo->keymap = WM_modalkeymap_find(wm->defaultconf, "Generic Gizmo Tweak Modal Map"); - RNA_enum_value_from_id(snap_gizmo->keymap->modal_items, "SNAP_ON", &snap_gizmo->snap_on); - } const int snap_on = snap_gizmo->snap_on; wmKeyMap *keymap = WM_keymap_active(wm, snap_gizmo->keymap); @@ -336,15 +329,21 @@ short ED_gizmotypes_snap_3d_update(wmGizmo *gz, #ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK if ((snap_gizmo->flag & ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE) == 0) { - snap_gizmo->invert_snap = invert_snap(snap_gizmo, wm); + bool invert_snap_toggle = invert_snap(snap_gizmo, wm); + if (invert_snap_toggle != snap_gizmo->invert_snap) { + snap_gizmo->invert_snap = invert_snap_toggle; + + /* Status has changed, be sure to save before early return. */ + eventstate_save(snap_gizmo, wm); + } + const ToolSettings *ts = scene->toolsettings; - if (snap_gizmo->invert_snap != !(ts->snap_flag & SCE_SNAP)) { + if (invert_snap_toggle != !(ts->snap_flag & SCE_SNAP)) { snap_gizmo->snap_elem = 0; return 0; } } #endif - eventstate_save(snap_gizmo, wm); snap_gizmo->is_enabled = true; @@ -555,8 +554,14 @@ static void gizmo_snap_rna_snap_elem_index_get_fn(struct PointerRNA *ptr, static void snap_gizmo_setup(wmGizmo *gz) { - /* Flags. */ gz->flag |= WM_GIZMO_NO_TOOLTIP; + +#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK + SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz; + snap_gizmo->keymap = WM_modalkeymap_find(gz->parent_gzgroup->type->keyconf, + "Generic Gizmo Tweak Modal Map"); + RNA_enum_value_from_id(snap_gizmo->keymap->modal_items, "SNAP_ON", &snap_gizmo->snap_on); +#endif } static void snap_gizmo_draw(const bContext *C, wmGizmo *gz) |