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.
This commit is contained in:
Falk David
2023-06-21 16:47:18 +02:00
parent 738264c7d6
commit bb041b3f48
9 changed files with 34 additions and 31 deletions

View File

@@ -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,

View File

@@ -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:

View File

@@ -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,

View File

@@ -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",

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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:

View File

@@ -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", ""},

View File

@@ -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";