From 53a091663694a8d24e6b97d269f5e21b980bd6a1 Mon Sep 17 00:00:00 2001 From: mano-wii Date: Thu, 1 Aug 2019 23:00:16 -0300 Subject: DRW: Select Engine: Add a utility to detect `select_node` --- .../draw/engines/select/select_draw_utils.c | 29 ++++++++++++++-------- source/blender/draw/engines/select/select_engine.c | 3 +-- .../blender/draw/engines/select/select_private.h | 2 ++ 3 files changed, 22 insertions(+), 12 deletions(-) (limited to 'source/blender/draw/engines/select') diff --git a/source/blender/draw/engines/select/select_draw_utils.c b/source/blender/draw/engines/select/select_draw_utils.c index 241a05d0feb..745c55405de 100644 --- a/source/blender/draw/engines/select/select_draw_utils.c +++ b/source/blender/draw/engines/select/select_draw_utils.c @@ -40,6 +40,25 @@ /** \name Draw Utilities * \{ */ +short select_id_get_object_select_mode(Scene *scene, Object *ob) +{ + short r_select_mode = 0; + if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)) { + Mesh *me_orig = DEG_get_original_object(ob)->data; + if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) { + r_select_mode = SCE_SELECT_FACE; + } + if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) { + r_select_mode |= SCE_SELECT_VERTEX; + } + } + else { + r_select_mode = scene->toolsettings->selectmode; + } + + return r_select_mode; +} + static bool check_ob_drawface_dot(short select_mode, const View3D *v3d, char dt) { if (select_mode & SCE_SELECT_FACE) { @@ -189,16 +208,6 @@ void select_id_draw_object(void *vedata, r_face_offset); } else { - if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)) { - Mesh *me_orig = DEG_get_original_object(ob)->data; - select_mode = 0; - if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) { - select_mode = SCE_SELECT_FACE; - } - if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) { - select_mode |= SCE_SELECT_VERTEX; - } - } draw_select_id_mesh( stl, ob, select_mode, initial_offset, r_vert_offset, r_edge_offset, r_face_offset); } diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c index 68b4a8084f0..20b04d0a659 100644 --- a/source/blender/draw/engines/select/select_engine.c +++ b/source/blender/draw/engines/select/select_engine.c @@ -191,8 +191,7 @@ static void select_cache_populate(void *vedata, Object *ob) short select_mode = e_data.context.select_mode; if (select_mode == -1) { - ToolSettings *ts = draw_ctx->scene->toolsettings; - select_mode = ts->selectmode; + select_mode = select_id_get_object_select_mode(draw_ctx->scene, ob); } struct BaseOffset *base_ofs = diff --git a/source/blender/draw/engines/select/select_private.h b/source/blender/draw/engines/select/select_private.h index 9b0addb0fb8..e2b5163c88a 100644 --- a/source/blender/draw/engines/select/select_private.h +++ b/source/blender/draw/engines/select/select_private.h @@ -79,6 +79,8 @@ struct BaseOffset { uint vert; }; +short select_id_get_object_select_mode(Scene *scene, Object *ob); + void select_id_draw_object(void *vedata, View3D *v3d, Object *ob, -- cgit v1.2.3