From bb041b3f48f5fc52362171b558c05cbe5a1ff072 Mon Sep 17 00:00:00 2001 From: Falk David Date: Wed, 21 Jun 2023 16:47:18 +0200 Subject: [PATCH] Fix #109207: Can't select in gpencil edit mode This was due to a wrong mapping of tools in the toolbar. The fix makes sure that the correct selection tools are used for the old grease pencil objects. In order to accomplish this properly, the new grease pencil objects use their own edit mode context. This way the two objects are cleanly seperated. --- .../startup/bl_ui/space_toolsystem_toolbar.py | 5 +++- scripts/startup/bl_ui/space_view3d.py | 4 +-- source/blender/blenkernel/BKE_context.h | 3 ++- source/blender/blenkernel/intern/context.cc | 5 ++-- .../draw/engines/overlay/overlay_engine.cc | 26 ++++++++----------- .../gpencil_legacy/gpencil_interpolate.c | 2 +- .../editors/space_view3d/space_view3d.cc | 5 +++- source/blender/makesrna/intern/rna_context.c | 3 ++- .../windowmanager/intern/wm_keymap_utils.c | 12 ++++----- 9 files changed, 34 insertions(+), 31 deletions(-) diff --git a/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 6e1c36d0b01..4cbbbfd975d 100644 --- a/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -3008,6 +3008,9 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): *_tools_annotate, _defs_view3d_generic.ruler, ], + 'EDIT_GREASE_PENCIL': [ + *_tools_select, + ], 'PARTICLE': [ *_tools_select, _defs_view3d_generic.cursor, @@ -3113,7 +3116,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): *_tools_annotate, ], 'EDIT_GPENCIL': [ - *_tools_select, + *_tools_gpencil_select, _defs_view3d_generic.cursor, None, *_tools_transform, diff --git a/scripts/startup/bl_ui/space_view3d.py b/scripts/startup/bl_ui/space_view3d.py index 6aeac9d9435..a95d8c42179 100644 --- a/scripts/startup/bl_ui/space_view3d.py +++ b/scripts/startup/bl_ui/space_view3d.py @@ -754,7 +754,7 @@ class VIEW3D_HT_header(Header): row = layout.row(align=True) row.prop_enum(tool_settings, "gpencil_selectmode_edit", text="", value='POINT') row.prop_enum(tool_settings, "gpencil_selectmode_edit", text="", value='STROKE') - + # Grease Pencil (legacy) if obj and obj.type == 'GPENCIL' and context.gpencil_data: gpd = context.gpencil_data @@ -3065,7 +3065,7 @@ class VIEW3D_MT_object_convert(Menu): def draw(self, context): layout = self.layout ob = context.active_object - + if ob and ob.type == 'GPENCIL' and context.gpencil_data and not context.preferences.experimental.use_grease_pencil_version3: layout.operator_enum("gpencil.convert", "type") else: diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 3e5cfac78d3..44a6a056a69 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -118,6 +118,7 @@ typedef enum eContextObjectMode { CTX_MODE_EDIT_METABALL, CTX_MODE_EDIT_LATTICE, CTX_MODE_EDIT_CURVES, + CTX_MODE_EDIT_GREASE_PENCIL, CTX_MODE_POSE, CTX_MODE_SCULPT, CTX_MODE_PAINT_WEIGHT, @@ -126,7 +127,7 @@ typedef enum eContextObjectMode { CTX_MODE_PARTICLE, CTX_MODE_OBJECT, CTX_MODE_PAINT_GPENCIL, - CTX_MODE_EDIT_GPENCIL, + CTX_MODE_EDIT_GPENCIL_LEGACY, CTX_MODE_SCULPT_GPENCIL, CTX_MODE_WEIGHT_GPENCIL, CTX_MODE_VERTEX_GPENCIL, diff --git a/source/blender/blenkernel/intern/context.cc b/source/blender/blenkernel/intern/context.cc index 1d85f0559aa..3c183d6f8c8 100644 --- a/source/blender/blenkernel/intern/context.cc +++ b/source/blender/blenkernel/intern/context.cc @@ -1187,7 +1187,7 @@ enum eContextObjectMode CTX_data_mode_enum_ex(const Object *obedit, case OB_CURVES: return CTX_MODE_EDIT_CURVES; case OB_GREASE_PENCIL: - return CTX_MODE_EDIT_GPENCIL; + return CTX_MODE_EDIT_GREASE_PENCIL; } } else { @@ -1215,7 +1215,7 @@ enum eContextObjectMode CTX_data_mode_enum_ex(const Object *obedit, return CTX_MODE_PAINT_GPENCIL; } if (object_mode & OB_MODE_EDIT_GPENCIL) { - return CTX_MODE_EDIT_GPENCIL; + return CTX_MODE_EDIT_GPENCIL_LEGACY; } if (object_mode & OB_MODE_SCULPT_GPENCIL) { return CTX_MODE_SCULPT_GPENCIL; @@ -1256,6 +1256,7 @@ static const char *data_mode_strings[] = { "mball_edit", "lattice_edit", "curves_edit", + "grease_pencil_edit", "posemode", "sculpt_mode", "weightpaint", diff --git a/source/blender/draw/engines/overlay/overlay_engine.cc b/source/blender/draw/engines/overlay/overlay_engine.cc index a5c32fce142..d29c3935131 100644 --- a/source/blender/draw/engines/overlay/overlay_engine.cc +++ b/source/blender/draw/engines/overlay/overlay_engine.cc @@ -181,6 +181,9 @@ static void OVERLAY_cache_init(void *vedata) case CTX_MODE_EDIT_LATTICE: OVERLAY_edit_lattice_cache_init(data); break; + case CTX_MODE_EDIT_GREASE_PENCIL: + OVERLAY_edit_grease_pencil_cache_init(data); + break; case CTX_MODE_PARTICLE: OVERLAY_edit_particle_cache_init(data); break; @@ -193,13 +196,8 @@ static void OVERLAY_cache_init(void *vedata) case CTX_MODE_SCULPT: OVERLAY_sculpt_cache_init(data); break; - case CTX_MODE_EDIT_GPENCIL: - if (U.experimental.use_grease_pencil_version3) { - OVERLAY_edit_grease_pencil_cache_init(data); - } - else { - OVERLAY_edit_gpencil_legacy_cache_init(data); - } + case CTX_MODE_EDIT_GPENCIL_LEGACY: + OVERLAY_edit_gpencil_legacy_cache_init(data); break; case CTX_MODE_PAINT_GPENCIL: case CTX_MODE_SCULPT_GPENCIL: @@ -287,7 +285,7 @@ static bool overlay_object_is_edit_mode(const OVERLAY_PrivateData *pd, const Obj /* No edit mode yet. */ return false; case OB_GREASE_PENCIL: - return pd->ctx_mode == CTX_MODE_EDIT_GPENCIL; + return pd->ctx_mode == CTX_MODE_EDIT_GREASE_PENCIL; } } return false; @@ -731,13 +729,8 @@ static void OVERLAY_draw_scene(void *vedata) case CTX_MODE_PARTICLE: OVERLAY_edit_particle_draw(data); break; - case CTX_MODE_EDIT_GPENCIL: - if (U.experimental.use_grease_pencil_version3) { - OVERLAY_edit_grease_pencil_draw(data); - } - else { - OVERLAY_edit_gpencil_legacy_draw(data); - } + case CTX_MODE_EDIT_GPENCIL_LEGACY: + OVERLAY_edit_gpencil_legacy_draw(data); break; case CTX_MODE_PAINT_GPENCIL: case CTX_MODE_SCULPT_GPENCIL: @@ -750,6 +743,9 @@ static void OVERLAY_draw_scene(void *vedata) case CTX_MODE_EDIT_CURVES: OVERLAY_edit_curves_draw(data); break; + case CTX_MODE_EDIT_GREASE_PENCIL: + OVERLAY_edit_grease_pencil_draw(data); + break; default: break; } diff --git a/source/blender/editors/gpencil_legacy/gpencil_interpolate.c b/source/blender/editors/gpencil_legacy/gpencil_interpolate.c index a7b20750c9d..95ddda0c0a1 100644 --- a/source/blender/editors/gpencil_legacy/gpencil_interpolate.c +++ b/source/blender/editors/gpencil_legacy/gpencil_interpolate.c @@ -1449,7 +1449,7 @@ static void gpencil_interpolate_seq_ui(bContext *C, wmOperator *op) row = uiLayoutRow(layout, true); uiItemR(row, op->ptr, "layers", 0, NULL, ICON_NONE); - if (CTX_data_mode_enum(C) == CTX_MODE_EDIT_GPENCIL) { + if (CTX_data_mode_enum(C) == CTX_MODE_EDIT_GPENCIL_LEGACY) { row = uiLayoutRow(layout, true); uiItemR(row, op->ptr, "interpolate_selected_only", 0, NULL, ICON_NONE); } diff --git a/source/blender/editors/space_view3d/space_view3d.cc b/source/blender/editors/space_view3d/space_view3d.cc index c44e14e5dc0..81c25602e46 100644 --- a/source/blender/editors/space_view3d/space_view3d.cc +++ b/source/blender/editors/space_view3d/space_view3d.cc @@ -1698,6 +1698,9 @@ void ED_view3d_buttons_region_layout_ex(const bContext *C, case CTX_MODE_EDIT_LATTICE: ARRAY_SET_ITEMS(contexts, ".lattice_edit"); break; + case CTX_MODE_EDIT_GREASE_PENCIL: + ARRAY_SET_ITEMS(contexts, ".grease_pencil_edit"); + break; case CTX_MODE_POSE: ARRAY_SET_ITEMS(contexts, ".posemode"); break; @@ -1748,7 +1751,7 @@ void ED_view3d_buttons_region_layout_ex(const bContext *C, case CTX_MODE_WEIGHT_GPENCIL: ARRAY_SET_ITEMS(contexts, ".greasepencil_weight"); break; - case CTX_MODE_EDIT_GPENCIL: + case CTX_MODE_EDIT_GPENCIL_LEGACY: ARRAY_SET_ITEMS(contexts, ".greasepencil_edit"); break; case CTX_MODE_VERTEX_GPENCIL: diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c index 405e1becc90..c35308236e8 100644 --- a/source/blender/makesrna/intern/rna_context.c +++ b/source/blender/makesrna/intern/rna_context.c @@ -30,6 +30,7 @@ const EnumPropertyItem rna_enum_context_mode_items[] = { {CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", ""}, {CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", ""}, {CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""}, + {CTX_MODE_EDIT_GREASE_PENCIL, "EDIT_GREASE_PENCIL", 0, "Grease Pencil Edit", ""}, {CTX_MODE_POSE, "POSE", 0, "Pose", ""}, {CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""}, {CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""}, @@ -38,7 +39,7 @@ const EnumPropertyItem rna_enum_context_mode_items[] = { {CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""}, {CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""}, {CTX_MODE_PAINT_GPENCIL, "PAINT_GPENCIL", 0, "Grease Pencil Paint", ""}, - {CTX_MODE_EDIT_GPENCIL, "EDIT_GPENCIL", 0, "Grease Pencil Edit", ""}, + {CTX_MODE_EDIT_GPENCIL_LEGACY, "EDIT_GPENCIL", 0, "Grease Pencil Edit", ""}, {CTX_MODE_SCULPT_GPENCIL, "SCULPT_GPENCIL", 0, "Grease Pencil Sculpt", ""}, {CTX_MODE_WEIGHT_GPENCIL, "WEIGHT_GPENCIL", 0, "Grease Pencil Weight Paint", ""}, {CTX_MODE_VERTEX_GPENCIL, "VERTEX_GPENCIL", 0, "Grease Pencil Vertex Paint", ""}, diff --git a/source/blender/windowmanager/intern/wm_keymap_utils.c b/source/blender/windowmanager/intern/wm_keymap_utils.c index 7ef0ca80d57..05983fe6389 100644 --- a/source/blender/windowmanager/intern/wm_keymap_utils.c +++ b/source/blender/windowmanager/intern/wm_keymap_utils.c @@ -106,6 +106,9 @@ wmKeyMap *WM_keymap_guess_from_context(const bContext *C) case CTX_MODE_EDIT_LATTICE: km_id = "Lattice"; break; + case CTX_MODE_EDIT_GREASE_PENCIL: + km_id = "Grease Pencil Edit Mode"; + break; case CTX_MODE_POSE: km_id = "Pose"; break; @@ -130,13 +133,8 @@ wmKeyMap *WM_keymap_guess_from_context(const bContext *C) case CTX_MODE_PAINT_GPENCIL: km_id = "Grease Pencil Stroke Paint Mode"; break; - case CTX_MODE_EDIT_GPENCIL: - if (U.experimental.use_grease_pencil_version3) { - km_id = "Grease Pencil Edit Mode"; - } - else { - km_id = "Grease Pencil Stroke Edit Mode"; - } + case CTX_MODE_EDIT_GPENCIL_LEGACY: + km_id = "Grease Pencil Stroke Edit Mode"; break; case CTX_MODE_SCULPT_GPENCIL: km_id = "Grease Pencil Stroke Sculpt Mode";