From 6de7f3c747af35566e2f5822f8e379f19998dbe0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 5 Jul 2015 14:34:17 +1000 Subject: GPencil: use ctrl+x/del for dissolve Move dissolve into own operator (as with mesh/armature) --- release/scripts/startup/bl_ui/space_view3d.py | 14 +++++++++++ source/blender/editors/gpencil/gpencil_edit.c | 31 +++++++++++++++++-------- source/blender/editors/gpencil/gpencil_intern.h | 1 + source/blender/editors/gpencil/gpencil_ops.c | 8 +++++-- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 22869c0273a..8b388b9c4b1 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -2471,6 +2471,20 @@ class VIEW3D_MT_edit_mesh_delete(Menu): class VIEW3D_MT_edit_mesh_showhide(ShowHideMenu, Menu): _operator_name = "mesh" + +class VIEW3D_MT_edit_gpencil_delete(Menu): + bl_label = "Delete" + + def draw(self, context): + layout = self.layout + + layout.operator_enum("gpencil.delete", "type") + + layout.separator() + + layout.operator("gpencil.dissolve") + + # Edit Curve # draw_curve is used by VIEW3D_MT_edit_curve and VIEW3D_MT_edit_surface diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 2c6e9d75337..cc7cb902520 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -495,8 +495,6 @@ typedef enum eGP_DeleteMode { GP_DELETEOP_STROKES = 1, /* delete active frame */ GP_DELETEOP_FRAME = 2, - /* delete selected stroke points (without splitting stroke) */ - GP_DELETEOP_POINTS_DISSOLVE = 3, } eGP_DeleteMode; @@ -759,11 +757,7 @@ static int gp_delete_exec(bContext *C, wmOperator *op) case GP_DELETEOP_POINTS: /* selected points (breaks the stroke into segments) */ result = gp_delete_selected_points(C); break; - - case GP_DELETEOP_POINTS_DISSOLVE: /* selected points (without splitting the stroke) */ - result = gp_dissolve_selected_points(C); - break; - + case GP_DELETEOP_FRAME: /* active frame */ result = gp_actframe_delete_exec(C, op); break; @@ -778,9 +772,6 @@ void GPENCIL_OT_delete(wmOperatorType *ot) {GP_DELETEOP_POINTS, "POINTS", 0, "Points", "Delete selected points and split strokes into segments"}, {GP_DELETEOP_STROKES, "STROKES", 0, "Strokes", "Delete selected strokes"}, {GP_DELETEOP_FRAME, "FRAME", 0, "Frame", "Delete active frame"}, - {0, "", 0, NULL, NULL}, - {GP_DELETEOP_POINTS_DISSOLVE, "DISSOLVE_POINTS", 0, "Dissolve Points", - "Delete selected points without splitting strokes"}, {0, NULL, 0, NULL, NULL} }; @@ -801,4 +792,24 @@ void GPENCIL_OT_delete(wmOperatorType *ot) ot->prop = RNA_def_enum(ot->srna, "type", prop_gpencil_delete_types, 0, "Type", "Method used for deleting Grease Pencil data"); } +static int gp_dissolve_exec(bContext *C, wmOperator *UNUSED(op)) +{ + return gp_dissolve_selected_points(C); +} + +void GPENCIL_OT_dissolve(wmOperatorType *ot) +{ + /* identifiers */ + ot->name = "Dissolve"; + ot->idname = "GPENCIL_OT_dissolve"; + ot->description = "Delete selected points without splitting strokes"; + + /* callbacks */ + ot->exec = gp_dissolve_exec; + ot->poll = gp_stroke_edit_poll; + + /* flags */ + ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER; +} + /* ************************************************ */ diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h index 72cd9022d69..290935a06cf 100644 --- a/source/blender/editors/gpencil/gpencil_intern.h +++ b/source/blender/editors/gpencil/gpencil_intern.h @@ -131,6 +131,7 @@ void GPENCIL_OT_select_less(struct wmOperatorType *ot); void GPENCIL_OT_duplicate(struct wmOperatorType *ot); void GPENCIL_OT_delete(struct wmOperatorType *ot); +void GPENCIL_OT_dissolve(struct wmOperatorType *ot); void GPENCIL_OT_copy(struct wmOperatorType *ot); void GPENCIL_OT_paste(struct wmOperatorType *ot); diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c index 4752f3dbb36..ab56565f4ca 100644 --- a/source/blender/editors/gpencil/gpencil_ops.c +++ b/source/blender/editors/gpencil/gpencil_ops.c @@ -171,8 +171,11 @@ static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf) WM_keymap_add_item(keymap, "GPENCIL_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0); /* delete */ - WM_keymap_add_item(keymap, "GPENCIL_OT_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "GPENCIL_OT_delete", DELKEY, KM_PRESS, 0, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_gpencil_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_gpencil_delete", DELKEY, KM_PRESS, 0, 0); + + WM_keymap_add_item(keymap, "GPENCIL_OT_dissolve", XKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "GPENCIL_OT_dissolve", DELKEY, KM_PRESS, KM_CTRL, 0); /* copy + paste */ WM_keymap_add_item(keymap, "GPENCIL_OT_copy", CKEY, KM_PRESS, KM_CTRL, 0); @@ -258,6 +261,7 @@ void ED_operatortypes_gpencil(void) WM_operatortype_append(GPENCIL_OT_duplicate); WM_operatortype_append(GPENCIL_OT_delete); + WM_operatortype_append(GPENCIL_OT_dissolve); WM_operatortype_append(GPENCIL_OT_copy); WM_operatortype_append(GPENCIL_OT_paste); -- cgit v1.2.3