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:
authorGermano Cavalcante <germano.costa@ig.com.br>2021-04-16 05:15:24 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2021-04-16 05:15:24 +0300
commit0567f2b0bb86d187f77d348cf36a099f79445002 (patch)
treeecc21c409c0359bf9e64685fc70f5b191436b437
parent62bff15377510ce05543afb40526d430a21697f1 (diff)
parent43baf38758d2f1cba5c9d551da2321bb99ac3161 (diff)
Merge branch 'blender-v2.93-release'
-rw-r--r--source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c51
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)