[Bf-blender-cvs] [dd6b008fb44] greasepencil-object: WIP: Initial implementation for paint mode

Antonio Vazquez noreply at git.blender.org
Tue Jun 6 11:28:39 CEST 2017


Commit: dd6b008fb4444931a87a416a450f1700543ac78a
Author: Antonio Vazquez
Date:   Mon Jun 5 13:10:36 2017 +0200
Branches: greasepencil-object
https://developer.blender.org/rBdd6b008fb4444931a87a416a450f1700543ac78a

WIP: Initial implementation for paint mode

The paint mode need more work, but it start to work.

===================================================================

M	release/scripts/modules/bpy_extras/keyconfig_utils.py
M	source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
M	source/blender/editors/gpencil/gpencil_edit.c
M	source/blender/editors/gpencil/gpencil_ops.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_select.c
M	source/blender/editors/screen/area.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/makesrna/intern/rna_gpencil.c

===================================================================

diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 3203bc41b76..702024819a0 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -122,6 +122,8 @@ KM_HIERARCHY = [
 
     ('Grease Pencil', 'EMPTY', 'WINDOW', [  # grease pencil stuff (per region)
         ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []),
+        ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []),
+        ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []),
     ]),
     ('Mask Editing', 'EMPTY', 'WINDOW', []),
     ('Frames', 'EMPTY', 'WINDOW', []),    # frame navigation (per region)
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index 8c7e9bcf26b..eba164a12f4 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -126,7 +126,7 @@ static bool gpencil_batch_cache_valid(bGPdata *gpd, int cfra)
 		return false;
 	}
 
-	cache->is_editmode = gpd->flag & GP_DATA_STROKE_EDITMODE;
+	cache->is_editmode = gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE);
 	if (cache->is_editmode) {
 		return false;
 	}
@@ -180,7 +180,7 @@ static void gpencil_batch_cache_init(bGPdata *gpd, int cfra)
 	cache->batch_fill = MEM_callocN(sizeof(struct Batch) * cache->cache_size, "Gpencil_Batch_Fill");
 	cache->batch_edit = MEM_callocN(sizeof(struct Batch) * cache->cache_size, "Gpencil_Batch_Edit");
 
-	cache->is_editmode = gpd->flag & GP_DATA_STROKE_EDITMODE;
+	cache->is_editmode = gpd->flag & (GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE);
 	gpd->flag &= ~GP_DATA_CACHE_IS_DIRTY;
 
 	cache->cache_idx = 0;
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index 392683557aa..f99d7b8d306 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -182,7 +182,7 @@ static int gpencil_paintmode_toggle_exec(bContext *C, wmOperator *UNUSED(op))
 	if (gpd == NULL)
 		return OPERATOR_CANCELLED;
 
-	/* Just toggle editmode flag... */
+	/* Just toggle paintmode flag... */
 	gpd->flag ^= GP_DATA_STROKE_PAINTMODE;
 	/* disable other GP modes */
 	gpd->flag &= ~GP_DATA_STROKE_EDITMODE;
@@ -252,7 +252,7 @@ static int gpencil_sculptmode_toggle_exec(bContext *C, wmOperator *UNUSED(op))
 	if (gpd == NULL)
 		return OPERATOR_CANCELLED;
 
-	/* Just toggle editmode flag... */
+	/* Just toggle sculptmode flag... */
 	gpd->flag ^= GP_DATA_STROKE_SCULPTMODE;
 	/* disable other GP modes */
 	gpd->flag &= ~GP_DATA_STROKE_EDITMODE;
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index 811a048e055..4ed0dde7ed7 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -37,6 +37,9 @@
 #include "BKE_context.h"
 
 #include "DNA_gpencil_types.h"
+#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_space_types.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -123,6 +126,7 @@ static int gp_stroke_editmode_poll(bContext *C)
 /* Poll callback for stroke painting mode */
 static int gp_stroke_paintmode_poll(bContext *C)
 {
+	/* TODO: limit this to mode, but review 2D editors */
 	bGPdata *gpd = CTX_data_gpencil_data(C);
 	return (gpd && (gpd->flag & GP_DATA_STROKE_PAINTMODE));
 }
@@ -131,121 +135,143 @@ static int gp_stroke_paintmode_poll(bContext *C)
 static int gp_stroke_sculptmode_poll(bContext *C)
 {
 	bGPdata *gpd = CTX_data_gpencil_data(C);
-	return (gpd && (gpd->flag & GP_DATA_STROKE_SCULPTMODE));
+	Object *ob = CTX_data_active_object(C);
+	ScrArea *sa = CTX_wm_area(C);
+
+	/* if not gpencil object and not view3d, need sculpt keys if edit mode */
+	if (sa->spacetype != SPACE_VIEW3D) {
+		return (gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE));
+	}
+	else {
+		if (ob && (ob->type == OB_GPENCIL)) {
+			return (gpd && (gpd->flag & GP_DATA_STROKE_SCULPTMODE));
+		}
+	}
 }
 
-/* Stroke Editing Keymap - Only when editmode is enabled */
-static void ed_keymap_gpencil_editing(wmKeyConfig *keyconf)
+static void ed_keymap_gpencil_selection(wmKeyMap *keymap)
 {
-	wmKeyMap *keymap = WM_keymap_find(keyconf, "Grease Pencil Stroke Edit Mode", 0, 0);
 	wmKeyMapItem *kmi;
-	
-	/* set poll callback - so that this keymap only gets enabled when stroke editmode is enabled */
-	keymap->poll = gp_stroke_editmode_poll;
-	
-	/* ----------------------------------------------- */
-	
-	/* Exit EditMode */
-	WM_keymap_add_item(keymap, "GPENCIL_OT_editmode_toggle", TABKEY, KM_PRESS, 0, 0);
-	
-	/* Pie Menu - For settings/tools easy access */
-	WM_keymap_add_menu_pie(keymap, "GPENCIL_PIE_sculpt", EKEY, KM_PRESS, 0, DKEY);
-	
-	/* Brush Settings */
-	/* NOTE: We cannot expose these in the standard keymap, as they will interfere with regular hotkeys
-	 *       in other modes. However, when we are dealing with Stroke Edit Mode, we know for certain
-	 *       that the only data being edited is that of the Grease Pencil strokes
-	 */
-	
-	/* CTRL + FKEY = Eraser Radius */
-	kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_CTRL, 0);
-	RNA_string_set(kmi->ptr, "data_path_primary", "user_preferences.edit.grease_pencil_eraser_radius");
-	
-	/* Interpolation */
-	WM_keymap_add_item(keymap, "GPENCIL_OT_interpolate", EKEY, KM_PRESS, KM_CTRL | KM_ALT, 0);
-	WM_keymap_add_item(keymap, "GPENCIL_OT_interpolate_sequence", EKEY, KM_PRESS, KM_SHIFT | KM_CTRL, 0);
 
-	/* Sculpting ------------------------------------- */
-	
-	/* Brush-Based Editing:
-	 *   EKEY + LMB                          = Single stroke, draw immediately 
-	 *        + Other Modifiers (Ctrl/Shift) = Invert, Smooth, etc.
-	 *
-	 * For the modal version, use D+E -> Sculpt
-	 */
-	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_paint", LEFTMOUSE, KM_PRESS, 0, EKEY);
-	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-	
-	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_paint", LEFTMOUSE, KM_PRESS, KM_CTRL, EKEY);
-	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-	/*RNA_boolean_set(kmi->ptr, "use_invert", true);*/
-	
-	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_brush_paint", LEFTMOUSE, KM_PRESS, KM_SHIFT, EKEY);
-	RNA_boolean_set(kmi->ptr, "wait_for_input", false);
-	/*RNA_boolean_set(kmi->ptr, "use_smooth", true);*/
-	
-	
-	/* Shift-FKEY = Sculpt Strength */
-	kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0);
-	RNA_string_set(kmi->ptr, "data_path_primary", "tool_settings.gpencil_sculpt.brush.strength");
-	
-	/* FKEY = Sculpt Brush Size */
-	kmi = WM_keymap_add_item(keymap, "WM_OT_radial_control", FKEY, KM_PRESS, 0, 0);
-	RNA_string_set(kmi->ptr, "data_path_primary", "tool_settings.gpencil_sculpt.brush.size");
-	
-	
-	/* Selection ------------------------------------- */
 	/* select all */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_all", AKEY, KM_PRESS, 0, 0);
 	RNA_enum_set(kmi->ptr, "action", SEL_TOGGLE);
-	
+
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_all", IKEY, KM_PRESS, KM_CTRL, 0);
 	RNA_enum_set(kmi->ptr, "action", SEL_INVERT);
-	
+
 	/* circle select */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_circle", CKEY, KM_PRESS, 0, 0);
-	
+
 	/* border select */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_border", BKEY, KM_PRESS, 0, 0);
-	
+
 	/* lasso select */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL, 0);
 	RNA_boolean_set(kmi->ptr, "deselect", false);
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_SHIFT | KM_CTRL, 0);
 	RNA_boolean_set(kmi->ptr, "deselect", true);
-	
+
 	/* In the Node Editor, lasso select needs ALT modifier too (as somehow CTRL+LMB drag gets taken for "cut" quite early)
-	 * There probably isn't too much harm adding this for other editors too as part of standard GP editing keymap. This hotkey
-	 * combo doesn't seem to see much use under standard scenarios?
-	 */
+	* There probably isn't too much harm adding this for other editors too as part of standard GP editing keymap. This hotkey
+	* combo doesn't seem to see much use under standard scenarios?
+	*/
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_CTRL | KM_ALT, 0);
 	RNA_boolean_set(kmi->ptr, "deselect", false);
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select_lasso", EVT_TWEAK_A, KM_ANY, KM_SHIFT | KM_CTRL | KM_ALT, 0);
 	RNA_boolean_set(kmi->ptr, "deselect", true);
-	
+
 	/* normal select */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, 0, 0);
-	
+
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
 	RNA_boolean_set(kmi->ptr, "extend", true);
 	RNA_boolean_set(kmi->ptr, "toggle", true);
-	
+
 	/* whole stroke select */
 	kmi = WM_keymap_add_item(keymap, "GPENCIL_OT_select", SELECTMOUSE, KM_PRESS, KM_ALT, 0);
 	RNA_boolean_set(kmi->ptr, "entire_strokes", true);
-	
+
 	/* select linked */
 	/* NOTE: While LKEY is redundant, not having it breaks the mode illusion too much */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_linked", LKEY, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_linked", LKEY, KM_PRESS, KM_CTRL, 0);
-	
+
 	/* select grouped */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_grouped", GKEY, KM_PRESS, KM_SHIFT, 0);
-		
+
 	/* select more/less */
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_more", PADPLUSKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "GPENCIL_OT_select_less", PADMINUS, KM_PRESS, KM_CTRL, 0);
+
+}
+
+static void ed_keymap_gpencil_sculpt(wmKeyMap *keymap)
+{
+	wmKeyMapItem *kmi;
+
+	/* Pie Menu - For settings/tools easy access */
+	WM_keymap_add_menu_pie(keymap, "GPENCIL_PIE_sculpt", EKEY, KM_PRESS, 0, DKEY);
+
+	/* Sculpting ------------------------------------- */
+
+	/* Brush-Based Editing:
+	*   EKEY + LMB                          = Single stroke, draw immediately
+	*        + Other Modifiers (Ctrl/Shift) = Invert, Smooth, etc.
+	*
+	* For the modal version,

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list