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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to