From 8bda35d2f49879ced26e9069bce14ebf368761b3 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 16 Oct 2017 15:32:09 +1100 Subject: WM: remove hard-coded circle radius memory Replace with operator type 'last_properties'. Also use generic function for circle gesture properties. --- source/blender/editors/gpencil/gpencil_select.c | 5 +-- source/blender/editors/mask/mask_select.c | 5 +-- .../blender/editors/space_action/action_select.c | 8 ++-- .../blender/editors/space_clip/tracking_select.c | 5 +-- source/blender/editors/space_graph/graph_select.c | 8 ++-- source/blender/editors/space_node/node_select.c | 7 +--- .../blender/editors/space_view3d/view3d_select.c | 8 ++-- source/blender/editors/uvedit/uvedit_ops.c | 7 +--- source/blender/windowmanager/WM_api.h | 3 +- source/blender/windowmanager/intern/wm_gesture.c | 6 +-- .../windowmanager/intern/wm_operator_props.c | 49 ++++++++++++++++------ source/blender/windowmanager/intern/wm_operators.c | 46 ++++++++++++-------- source/blender/windowmanager/wm.h | 8 ---- 13 files changed, 83 insertions(+), 82 deletions(-) (limited to 'source/blender') diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c index 2912a1ac4eb..700a1dc9439 100644 --- a/source/blender/editors/gpencil/gpencil_select.c +++ b/source/blender/editors/gpencil/gpencil_select.c @@ -830,10 +830,7 @@ void GPENCIL_OT_select_circle(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_circle(ot); } /* ********************************************** */ diff --git a/source/blender/editors/mask/mask_select.c b/source/blender/editors/mask/mask_select.c index a4268bddaf5..990b07066b1 100644 --- a/source/blender/editors/mask/mask_select.c +++ b/source/blender/editors/mask/mask_select.c @@ -681,10 +681,7 @@ void MASK_OT_select_circle(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_circle(ot); } static int mask_select_linked_pick_invoke(bContext *C, wmOperator *op, const wmEvent *event) diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index 17edbc6cc1d..6d785e1f7df 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -629,11 +629,9 @@ void ACTION_OT_select_circle(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_UNDO; - - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + + /* properties */ + WM_operator_properties_gesture_circle(ot); } /* ******************** Column Select Operator **************************** */ diff --git a/source/blender/editors/space_clip/tracking_select.c b/source/blender/editors/space_clip/tracking_select.c index e970b1b9743..3cbf1cf4e0c 100644 --- a/source/blender/editors/space_clip/tracking_select.c +++ b/source/blender/editors/space_clip/tracking_select.c @@ -782,10 +782,7 @@ void CLIP_OT_select_circle(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; /* properties */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_circle(ot); } /********************** select all operator *********************/ diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 67b960bfa53..dd4449b77f7 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -555,11 +555,9 @@ void GRAPH_OT_select_circle(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_UNDO; - - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + + /* properties */ + WM_operator_properties_gesture_circle(ot); } /* ******************** Column Select Operator **************************** */ diff --git a/source/blender/editors/space_node/node_select.c b/source/blender/editors/space_node/node_select.c index 7195d2a9838..f7b8f53a63f 100644 --- a/source/blender/editors/space_node/node_select.c +++ b/source/blender/editors/space_node/node_select.c @@ -647,11 +647,8 @@ void NODE_OT_select_circle(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - /* rna */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + /* properties */ + WM_operator_properties_gesture_circle(ot); } /* ****** Lasso Select ****** */ diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 7d927766bbd..7f99a81ba99 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -2896,9 +2896,7 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_UNDO; - - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); + + /* properties */ + WM_operator_properties_gesture_circle(ot); } diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c index 75294af08f9..8dbe22b7ffe 100644 --- a/source/blender/editors/uvedit/uvedit_ops.c +++ b/source/blender/editors/uvedit/uvedit_ops.c @@ -3088,12 +3088,9 @@ static void UV_OT_circle_select(wmOperatorType *ot) /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - + /* properties */ - RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); - RNA_def_int(ot->srna, "radius", 1, 1, INT_MAX, "Radius", "", 1, INT_MAX); - RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + WM_operator_properties_gesture_circle(ot); } diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7c1c388bcba..d91c4a4efe0 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -309,8 +309,9 @@ void WM_operator_properties_border(struct wmOperatorType *ot); void WM_operator_properties_border_to_rcti(struct wmOperator *op, struct rcti *rect); void WM_operator_properties_border_to_rctf(struct wmOperator *op, rctf *rect); void WM_operator_properties_gesture_border(struct wmOperatorType *ot, bool extend); -void WM_operator_properties_mouse_select(struct wmOperatorType *ot); void WM_operator_properties_gesture_straightline(struct wmOperatorType *ot, int cursor); +void WM_operator_properties_gesture_circle(struct wmOperatorType *ot); +void WM_operator_properties_mouse_select(struct wmOperatorType *ot); void WM_operator_properties_select_all(struct wmOperatorType *ot); void WM_operator_properties_select_action(struct wmOperatorType *ot, int default_action); void WM_operator_properties_select_action_simple(struct wmOperatorType *ot, int default_action); diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c index f66efa72908..11f39dc934c 100644 --- a/source/blender/windowmanager/intern/wm_gesture.c +++ b/source/blender/windowmanager/intern/wm_gesture.c @@ -84,11 +84,7 @@ wmGesture *WM_gesture_new(bContext *C, const wmEvent *event, int type) rect->xmin = event->x - sx; rect->ymin = event->y - sy; if (type == WM_GESTURE_CIRCLE) { -#ifdef GESTURE_MEMORY - rect->xmax = circle_select_size; -#else - rect->xmax = 25; // XXX temp -#endif + /* caller is responsible for initializing 'xmax' to radius. */ } else { rect->xmax = event->x - sx; diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c index 18836f34c99..2a44b4997a2 100644 --- a/source/blender/windowmanager/intern/wm_operator_props.c +++ b/source/blender/windowmanager/intern/wm_operator_props.c @@ -224,6 +224,9 @@ void WM_operator_properties_border_to_rctf(struct wmOperator *op, rctf *rect) BLI_rctf_rcti_copy(rect, &rect_i); } +/** + * Use with #WM_border_select_invoke + */ void WM_operator_properties_gesture_border(wmOperatorType *ot, bool extend) { RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); @@ -235,19 +238,9 @@ void WM_operator_properties_gesture_border(wmOperatorType *ot, bool extend) } } -void WM_operator_properties_mouse_select(wmOperatorType *ot) -{ - PropertyRNA *prop; - - prop = RNA_def_boolean(ot->srna, "extend", false, "Extend", - "Extend selection instead of deselecting everything first"); - RNA_def_property_flag(prop, PROP_SKIP_SAVE); - prop = RNA_def_boolean(ot->srna, "deselect", false, "Deselect", "Remove from selection"); - RNA_def_property_flag(prop, PROP_SKIP_SAVE); - prop = RNA_def_boolean(ot->srna, "toggle", false, "Toggle Selection", "Toggle the selection"); - RNA_def_property_flag(prop, PROP_SKIP_SAVE); -} - +/** + * Use with #WM_gesture_straightline_invoke + */ void WM_operator_properties_gesture_straightline(wmOperatorType *ot, int cursor) { PropertyRNA *prop; @@ -268,6 +261,36 @@ void WM_operator_properties_gesture_straightline(wmOperatorType *ot, int cursor) } } +/** + * Use with #WM_gesture_circle_invoke + */ +void WM_operator_properties_gesture_circle(wmOperatorType *ot) +{ + PropertyRNA *prop; + const int radius_default = 25; + + prop = RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); + prop = RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); + RNA_def_int(ot->srna, "radius", radius_default, 1, INT_MAX, "Radius", "", 1, INT_MAX); + prop = RNA_def_int(ot->srna, "gesture_mode", 0, INT_MIN, INT_MAX, "Gesture Mode", "", INT_MIN, INT_MAX); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); +} + +void WM_operator_properties_mouse_select(wmOperatorType *ot) +{ + PropertyRNA *prop; + + prop = RNA_def_boolean(ot->srna, "extend", false, "Extend", + "Extend selection instead of deselecting everything first"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); + prop = RNA_def_boolean(ot->srna, "deselect", false, "Deselect", "Remove from selection"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); + prop = RNA_def_boolean(ot->srna, "toggle", false, "Toggle Selection", "Toggle the selection"); + RNA_def_property_flag(prop, PROP_SKIP_SAVE); +} + /** * \param nth_can_disable: Enable if we want to be able to select no interval at all. */ diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 6fdc0a0a8c0..e4776ea7b29 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2394,14 +2394,15 @@ void WM_border_select_cancel(bContext *C, wmOperator *op) /* **************** circle gesture *************** */ /* works now only for selection or modal paint stuff, calls exec while hold mouse, exit on release */ -#ifdef GESTURE_MEMORY -int circle_select_size = 25; /* XXX - need some operator memory thing! */ -#endif - int WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event) { op->customdata = WM_gesture_new(C, event, WM_GESTURE_CIRCLE); + wmGesture *gesture = op->customdata; + rcti *rect = gesture->customdata; + /* Default or previously stored value. */ + rect->xmax = RNA_int_get(op->ptr, "radius"); + /* add modal handler */ WM_event_add_modal_handler(C, op); @@ -2428,9 +2429,6 @@ static void gesture_circle_apply(bContext *C, wmOperator *op) retval = op->type->exec(C, op); OPERATOR_RETVAL_CHECK(retval); } -#ifdef GESTURE_MEMORY - circle_select_size = rect->xmax; -#endif } int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) @@ -2452,6 +2450,7 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) } } else if (event->type == EVT_MODAL_MAP) { + bool is_circle_size = false; float fac; switch (event->val) { @@ -2462,22 +2461,25 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) else rect->xmax += floor(fac); if (rect->xmax < 1) rect->xmax = 1; - wm_gesture_tag_redraw(C); + is_circle_size = true; break; case GESTURE_MODAL_CIRCLE_ADD: rect->xmax += 2 + rect->xmax / 10; - wm_gesture_tag_redraw(C); + is_circle_size = true; break; case GESTURE_MODAL_CIRCLE_SUB: rect->xmax -= 2 + rect->xmax / 10; if (rect->xmax < 1) rect->xmax = 1; - wm_gesture_tag_redraw(C); + is_circle_size = true; break; case GESTURE_MODAL_SELECT: case GESTURE_MODAL_DESELECT: case GESTURE_MODAL_NOP: - if (RNA_struct_find_property(op->ptr, "gesture_mode")) - RNA_int_set(op->ptr, "gesture_mode", event->val); + { + PropertyRNA *prop = RNA_struct_find_property(op->ptr, "gesture_mode"); + if (prop != NULL) { + RNA_property_int_set(op->ptr, prop, event->val); + } if (event->val != GESTURE_MODAL_NOP) { /* apply first click */ @@ -2486,12 +2488,22 @@ int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event) wm_gesture_tag_redraw(C); } break; - + } case GESTURE_MODAL_CANCEL: case GESTURE_MODAL_CONFIRM: + /* Normally we wouldn't store last-properties on cancel, + * this is an exception since the circle tool is modal. */ + WM_operator_last_properties_store(op); wm_gesture_end(C, op); return OPERATOR_FINISHED; /* use finish or we don't get an undo */ } + + if (is_circle_size) { + wm_gesture_tag_redraw(C); + + /* So next use remembers last seen size, even if we didn't apply it. */ + RNA_int_set(op->ptr, "radius", rect->xmax); + } } #ifdef WITH_INPUT_NDOF else if (event->type == NDOF_MOTION) { @@ -2522,12 +2534,10 @@ void WM_OT_circle_gesture(wmOperatorType *ot) ot->invoke = WM_gesture_circle_invoke; ot->modal = WM_gesture_circle_modal; - ot->poll = WM_operator_winactive; - - RNA_def_property(ot->srna, "x", PROP_INT, PROP_NONE); - RNA_def_property(ot->srna, "y", PROP_INT, PROP_NONE); - RNA_def_property(ot->srna, "radius", PROP_INT, PROP_NONE); + + /* properties */ + WM_operator_properties_gesture_circle(ot); } #endif diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h index cb88ca3a474..c1cab8c8ff8 100644 --- a/source/blender/windowmanager/wm.h +++ b/source/blender/windowmanager/wm.h @@ -88,12 +88,4 @@ void wm_stereo3d_set_cancel(bContext *C, wmOperator *op); void wm_open_init_load_ui(wmOperator *op, bool use_prefs); void wm_open_init_use_scripts(wmOperator *op, bool use_prefs); -/* hack to store circle select size - campbell, must replace with nice operator memory */ -#define GESTURE_MEMORY - -#ifdef GESTURE_MEMORY -extern int circle_select_size; -#endif - #endif /* __WM_H__ */ - -- cgit v1.2.3