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:
parent
5da5fb31db
commit
76cdcc2bca
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue