diff options
author | Campbell Barton <campbell@blender.org> | 2022-03-30 07:03:12 +0300 |
---|---|---|
committer | YimingWu <xp8110@outlook.com> | 2022-04-02 16:09:02 +0300 |
commit | 6614dc359e73b7f9ec2232babff8906e81ad1307 (patch) | |
tree | c11eadc85bb66126661a3fdf244c32be2b23ecd2 | |
parent | 3e96c155d6b69780a74b8f656b0d9300ee757244 (diff) |
Cleanup: use utility function to initialize SelectPick_Params
-rw-r--r-- | source/blender/editors/include/ED_select_utils.h | 13 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 14 | ||||
-rw-r--r-- | source/blender/editors/util/select_utils.c | 20 | ||||
-rw-r--r-- | source/blender/editors/uvedit/uvedit_select.c | 10 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 4 |
5 files changed, 42 insertions, 19 deletions
diff --git a/source/blender/editors/include/ED_select_utils.h b/source/blender/editors/include/ED_select_utils.h index b9ef5c283aa..dbe1b582132 100644 --- a/source/blender/editors/include/ED_select_utils.h +++ b/source/blender/editors/include/ED_select_utils.h @@ -6,11 +6,14 @@ #pragma once +#include "BLI_compiler_attrs.h" + #ifdef __cplusplus extern "C" { #endif struct KDTree_1d; +struct wmOperator; enum { SEL_TOGGLE = 0, @@ -93,7 +96,15 @@ struct SelectPick_Params { /** * Utility to get #eSelectPickMode from booleans for convenience. */ -eSelectOp ED_select_op_from_booleans(bool extend, bool deselect, bool toggle); +eSelectOp ED_select_op_from_operator(struct wmOperator *op) + ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT; + +/** + * Initialize `params` from `op`, + * these properties are defined by #WM_operator_properties_mouse_select. + */ +void ED_select_pick_params_from_operator(struct wmOperator *op, struct SelectPick_Params *params) + ATTR_NONNULL(1, 2); #ifdef __cplusplus } diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index 54a335f98ed..9b66e24ce7d 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -1646,9 +1646,7 @@ static int bone_select_menu_exec(bContext *C, wmOperator *op) const int name_index = RNA_enum_get(op->ptr, "name"); const struct SelectPick_Params params = { - .sel_op = ED_select_op_from_booleans(RNA_boolean_get(op->ptr, "extend"), - RNA_boolean_get(op->ptr, "deselect"), - RNA_boolean_get(op->ptr, "toggle")), + .sel_op = ED_select_op_from_operator(op), }; View3D *v3d = CTX_wm_view3d(C); @@ -2918,14 +2916,10 @@ static int view3d_select_exec(bContext *C, wmOperator *op) Scene *scene = CTX_data_scene(C); Object *obedit = CTX_data_edit_object(C); Object *obact = CTX_data_active_object(C); - const struct SelectPick_Params params = { - .sel_op = ED_select_op_from_booleans(RNA_boolean_get(op->ptr, "extend"), - RNA_boolean_get(op->ptr, "deselect"), - RNA_boolean_get(op->ptr, "toggle")), - .deselect_all = RNA_boolean_get(op->ptr, "deselect_all"), - .select_passthrough = RNA_boolean_get(op->ptr, "select_passthrough"), - }; + struct SelectPick_Params params = {0}; + ED_select_pick_params_from_operator(op, ¶ms); + bool center = RNA_boolean_get(op->ptr, "center"); bool enumerate = RNA_boolean_get(op->ptr, "enumerate"); /* Only force object select for edit-mode to support vertex parenting, diff --git a/source/blender/editors/util/select_utils.c b/source/blender/editors/util/select_utils.c index 380c7ed0e43..53f9aca8e8d 100644 --- a/source/blender/editors/util/select_utils.c +++ b/source/blender/editors/util/select_utils.c @@ -10,6 +10,12 @@ #include "BLI_math.h" #include "BLI_utildefines.h" +#include "DNA_windowmanager_types.h" + +#include "RNA_access.h" + +#include "WM_types.h" + #include "ED_select_utils.h" int ED_select_op_action(const eSelectOp sel_op, const bool is_select, const bool is_inside) @@ -113,8 +119,12 @@ bool ED_select_similar_compare_float_tree(const KDTree_1d *tree, return false; } -eSelectOp ED_select_op_from_booleans(const bool extend, const bool deselect, const bool toggle) +eSelectOp ED_select_op_from_operator(wmOperator *op) { + const bool extend = RNA_boolean_get(op->ptr, "extend"); + const bool deselect = RNA_boolean_get(op->ptr, "deselect"); + const bool toggle = RNA_boolean_get(op->ptr, "toggle"); + if (extend) { return SEL_OP_ADD; } @@ -126,3 +136,11 @@ eSelectOp ED_select_op_from_booleans(const bool extend, const bool deselect, con } return SEL_OP_SET; } + +void ED_select_pick_params_from_operator(wmOperator *op, struct SelectPick_Params *params) +{ + memset(params, 0x0, sizeof(*params)); + params->sel_op = ED_select_op_from_operator(op); + params->deselect_all = RNA_boolean_get(op->ptr, "deselect_all"); + params->select_passthrough = RNA_boolean_get(op->ptr, "select_passthrough"); +} diff --git a/source/blender/editors/uvedit/uvedit_select.c b/source/blender/editors/uvedit/uvedit_select.c index ed4aa6985c4..02685e2efb3 100644 --- a/source/blender/editors/uvedit/uvedit_select.c +++ b/source/blender/editors/uvedit/uvedit_select.c @@ -2622,13 +2622,9 @@ static int uv_select_exec(bContext *C, wmOperator *op) float co[2]; RNA_float_get_array(op->ptr, "location", co); - const struct SelectPick_Params params = { - .sel_op = ED_select_op_from_booleans(RNA_boolean_get(op->ptr, "extend"), - RNA_boolean_get(op->ptr, "deselect"), - RNA_boolean_get(op->ptr, "toggle")), - .deselect_all = RNA_boolean_get(op->ptr, "deselect_all"), - .select_passthrough = RNA_boolean_get(op->ptr, "select_passthrough"), - }; + + struct SelectPick_Params params = {0}; + ED_select_pick_params_from_operator(op, ¶ms); const bool changed = uv_mouse_select(C, co, ¶ms); diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 0864627ebe3..b0fb0c5d6df 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -39,6 +39,7 @@ struct MenuType; struct PointerRNA; struct PropertyRNA; struct ScrArea; +struct SelectPick_Params; struct View3D; struct ViewLayer; struct bContext; @@ -796,6 +797,9 @@ void WM_operator_properties_gesture_straightline(struct wmOperatorType *ot, int * Use with #WM_gesture_circle_invoke */ void WM_operator_properties_gesture_circle(struct wmOperatorType *ot); +/** + * See #ED_select_pick_params_from_operator to initialize parameters defined here. + */ 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, |