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:
authorCampbell Barton <campbell@blender.org>2022-03-30 07:03:12 +0300
committerYimingWu <xp8110@outlook.com>2022-04-02 16:09:02 +0300
commit6614dc359e73b7f9ec2232babff8906e81ad1307 (patch)
treec11eadc85bb66126661a3fdf244c32be2b23ecd2
parent3e96c155d6b69780a74b8f656b0d9300ee757244 (diff)
Cleanup: use utility function to initialize SelectPick_Params
-rw-r--r--source/blender/editors/include/ED_select_utils.h13
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c14
-rw-r--r--source/blender/editors/util/select_utils.c20
-rw-r--r--source/blender/editors/uvedit/uvedit_select.c10
-rw-r--r--source/blender/windowmanager/WM_api.h4
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, &params);
+
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, &params);
const bool changed = uv_mouse_select(C, co, &params);
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,