Cleanup/Refactor: Use flags instead of bool to configure the snap gizmo

This simplifies the addition of future improvements.

Also make it more practical to expose as a parameter of gizmo for Python.
This commit is contained in:
Germano Cavalcante 2021-04-01 12:32:59 -03:00
parent 5da5fb31db
commit 76cdcc2bca
3 changed files with 33 additions and 33 deletions

View File

@ -78,9 +78,9 @@ typedef struct SnapGizmo3D {
#endif
/* Setup. */
eSnapGizmo flag;
float *prevpoint;
float prevpoint_stack[3];
int use_snap_override;
short snap_elem_force;
/* Return values. */
@ -286,6 +286,24 @@ SnapObjectContext *ED_gizmotypes_snap_3d_context_ensure(Scene *scene,
return snap_gizmo->snap_context_v3d;
}
void ED_gizmotypes_snap_3d_flag_set(struct wmGizmo *gz, eSnapGizmo flag)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->flag |= flag;
}
void ED_gizmotypes_snap_3d_flag_clear(struct wmGizmo *gz, eSnapGizmo flag)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->flag &= ~flag;
}
bool ED_gizmotypes_snap_3d_flag_test(struct wmGizmo *gz, eSnapGizmo flag)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
return (snap_gizmo->flag & flag) != 0;
}
bool ED_gizmotypes_snap_3d_invert_snap_get(struct wmGizmo *gz)
{
#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
@ -296,18 +314,6 @@ bool ED_gizmotypes_snap_3d_invert_snap_get(struct wmGizmo *gz)
#endif
}
void ED_gizmotypes_snap_3d_toggle_set(wmGizmo *gz, bool enable)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->use_snap_override = (int)enable;
}
void ED_gizmotypes_snap_3d_toggle_clear(wmGizmo *gz)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->use_snap_override = -1;
}
bool ED_gizmotypes_snap_3d_is_enabled(wmGizmo *gz)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
@ -324,22 +330,11 @@ short ED_gizmotypes_snap_3d_update(wmGizmo *gz,
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->is_enabled = false;
if (snap_gizmo->use_snap_override != -1) {
if (snap_gizmo->use_snap_override == false) {
snap_gizmo->snap_elem = 0;
return 0;
}
}
#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
snap_gizmo->invert_snap = invert_snap(snap_gizmo, wm);
#endif
eventstate_save(snap_gizmo, wm);
Scene *scene = DEG_get_input_scene(depsgraph);
#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
if (snap_gizmo->use_snap_override == -1) {
if ((snap_gizmo->flag & ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE) == 0) {
snap_gizmo->invert_snap = invert_snap(snap_gizmo, wm);
const ToolSettings *ts = scene->toolsettings;
if (snap_gizmo->invert_snap != !(ts->snap_flag & SCE_SNAP)) {
snap_gizmo->snap_elem = 0;
@ -348,6 +343,8 @@ short ED_gizmotypes_snap_3d_update(wmGizmo *gz,
}
#endif
eventstate_save(snap_gizmo, wm);
snap_gizmo->is_enabled = true;
float co[3], no[3];
@ -555,9 +552,6 @@ static void gizmo_snap_rna_snap_elem_index_get_fn(struct PointerRNA *ptr,
static void snap_gizmo_setup(wmGizmo *gz)
{
SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
snap_gizmo->use_snap_override = -1;
/* Flags. */
gz->flag |= WM_GIZMO_NO_TOOLTIP;
}

View File

@ -261,9 +261,15 @@ struct SnapObjectContext *ED_gizmotypes_snap_3d_context_ensure(struct Scene *sce
const struct View3D *v3d,
struct wmGizmo *gz);
typedef enum {
ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE = 1 << 0,
} eSnapGizmo;
void ED_gizmotypes_snap_3d_flag_set(struct wmGizmo *gz, eSnapGizmo flag);
void ED_gizmotypes_snap_3d_flag_clear(struct wmGizmo *gz, eSnapGizmo flag);
bool ED_gizmotypes_snap_3d_flag_test(struct wmGizmo *gz, eSnapGizmo flag);
bool ED_gizmotypes_snap_3d_invert_snap_get(struct wmGizmo *gz);
void ED_gizmotypes_snap_3d_toggle_set(struct wmGizmo *gz, bool enable);
void ED_gizmotypes_snap_3d_toggle_clear(struct wmGizmo *gz);
bool ED_gizmotypes_snap_3d_is_enabled(struct wmGizmo *gz);
short ED_gizmotypes_snap_3d_update(struct wmGizmo *gz,

View File

@ -1499,7 +1499,7 @@ static int view3d_interactive_add_modal(bContext *C, wmOperator *op, const wmEve
ipd->is_snap_found = false;
if (ipd->use_snap) {
if (ipd->snap_gizmo != NULL) {
ED_gizmotypes_snap_3d_toggle_set(ipd->snap_gizmo, ipd->use_snap);
ED_gizmotypes_snap_3d_flag_set(ipd->snap_gizmo, ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE);
if (ED_gizmotypes_snap_3d_update(ipd->snap_gizmo,
CTX_data_ensure_evaluated_depsgraph(C),
ipd->region,
@ -1509,7 +1509,7 @@ static int view3d_interactive_add_modal(bContext *C, wmOperator *op, const wmEve
ED_gizmotypes_snap_3d_data_get(ipd->snap_gizmo, ipd->snap_co, NULL, NULL, NULL);
ipd->is_snap_found = true;
}
ED_gizmotypes_snap_3d_toggle_clear(ipd->snap_gizmo);
ED_gizmotypes_snap_3d_flag_clear(ipd->snap_gizmo, ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE);
}
}