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:
@@ -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,
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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", ""},
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user