Commit: e013596735e9d17fe9246e9259dc4e638dee76ba
Author: Antonio Vazquez
Date:   Tue Nov 26 19:59:20 2019 +0100
Branches: greasepencil-object
https://developer.blender.org/rBe013596735e9d17fe9246e9259dc4e638dee76ba

GPencil: Fist changes to reset brushes in the right way

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

M       release/scripts/startup/bl_ui/space_view3d_toolbar.py
M       source/blender/blenkernel/BKE_brush.h
M       source/blender/blenkernel/intern/brush.c
M       source/blender/editors/gpencil/gpencil_data.c
M       source/blender/editors/gpencil/gpencil_intern.h
M       source/blender/editors/gpencil/gpencil_ops.c
M       source/blender/makesdna/DNA_brush_types.h

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

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py 
b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index df6879738dc..a972909c75c 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -68,6 +68,33 @@ class VIEW3D_MT_brush_context_menu(Menu):
             layout.operator("brush.reset")
 
 
+class VIEW3D_MT_brush_gpencil_context_menu(Menu):
+    bl_label = "Brush Specials"
+
+    def draw(self, context):
+        layout = self.layout
+        ts = context.tool_settings
+
+        settings = None
+        if context.mode == 'PAINT_GPENCIL':
+            settings = ts.gpencil_paint
+        if context.mode == 'SCULPT_GPENCIL':
+            settings = ts.gpencil_sculpt_paint
+        elif context.mode == 'WEIGHT_GPENCIL':
+            settings = ts.gpencil_weight_paint
+        elif context.mode == 'VERTEX_GPENCIL':
+            settings = ts.gpencil_vertex_paint
+
+        brush = getattr(settings, "brush", None)
+        # skip if no active brush
+        if not brush:
+            layout.label(text="No Brushes currently available", icon='INFO')
+            return
+
+        layout.operator("gpencil.brush_reset")
+        layout.operator("gpencil.brush_reset_all")
+
+
 class VIEW3D_MT_brush_context_menu_paint_modes(Menu):
     bl_label = "Enabled Modes"
 
@@ -1869,16 +1896,13 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, 
Panel):
 
         row = layout.row()
         if not self.is_popover:
-            col = row.column()
-            col.template_ID_preview(gpencil_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row = layout.row()
+            row.column().template_ID_preview(gpencil_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row.menu("VIEW3D_MT_brush_gpencil_context_menu", 
icon='DOWNARROW_HLT', text="")
 
         col = row.column()
         brush = gpencil_paint.brush
 
-        if not self.is_popover:
-            sub = col.column(align=True)
-            sub.operator("gpencil.brush_presets_create", icon='PRESET_NEW', 
text="")
-
         if brush is not None:
             gp_settings = brush.gpencil_settings
 
@@ -2316,8 +2340,9 @@ class 
VIEW3D_PT_tools_grease_pencil_vertex_brush(View3DPanel, Panel):
 
         row = layout.row()
         if not self.is_popover:
-            col = row.column()
-            col.template_ID_preview(gpencil_vertex_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row = layout.row()
+            row.column().template_ID_preview(gpencil_vertex_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row.menu("VIEW3D_MT_brush_gpencil_context_menu", 
icon='DOWNARROW_HLT', text="")
 
         col = row.column()
         brush = gpencil_vertex_paint.brush
@@ -2387,6 +2412,9 @@ class 
VIEW3D_PT_tools_grease_pencil_brush_paint_falloff(GreasePencilBrushFalloff
         ts = context.tool_settings
         settings = ts.gpencil_paint
         brush = settings.brush
+        if brush is None:
+            return False
+
         tool = brush.gpencil_tool
 
         return (settings and settings.brush and settings.brush.curve and tool 
== 'TINT')
@@ -2554,10 +2582,10 @@ class VIEW3D_PT_tools_grease_pencil_sculpt(View3DPanel, 
Panel):
 
         row = layout.row()
         if not self.is_popover:
-            col = row.column()
-            col.template_ID_preview(gpencil_sculpt_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row = layout.row()
+            row.column().template_ID_preview(gpencil_sculpt_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row.menu("VIEW3D_MT_brush_gpencil_context_menu", 
icon='DOWNARROW_HLT', text="")
 
-        col = row.column()
         brush = gpencil_sculpt_paint.brush
 
         if brush is not None:
@@ -2600,10 +2628,10 @@ class 
VIEW3D_PT_tools_grease_pencil_weight_paint(View3DPanel, Panel):
 
         row = layout.row()
         if not self.is_popover:
-            col = row.column()
-            col.template_ID_preview(gpencil_weight_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row = layout.row()
+            row.column().template_ID_preview(gpencil_weight_paint, "brush", 
new="brush.add_gpencil", rows=3, cols=8)
+            row.menu("VIEW3D_MT_brush_gpencil_context_menu", 
icon='DOWNARROW_HLT', text="")
 
-        col = row.column()
         brush = gpencil_weight_paint.brush
 
         if brush is not None:
@@ -2657,6 +2685,7 @@ class VIEW3D_PT_gpencil_brush_presets(PresetPanel, Panel):
 
 classes = (
     VIEW3D_MT_brush_context_menu,
+    VIEW3D_MT_brush_gpencil_context_menu,
     VIEW3D_MT_brush_context_menu_paint_modes,
     VIEW3D_PT_tools_object_options,
     VIEW3D_PT_tools_object_options_transform,
diff --git a/source/blender/blenkernel/BKE_brush.h 
b/source/blender/blenkernel/BKE_brush.h
index b1b7ba994a8..a7b51ee9c97 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -47,6 +47,7 @@ struct Brush *BKE_brush_add_gpencil(struct Main *bmain,
                                     struct ToolSettings *ts,
                                     const char *name,
                                     eObjectMode mode);
+bool BKE_brush_delete(struct Main *bmain, struct Brush *brush);
 void BKE_brush_init_gpencil_settings(struct Brush *brush);
 struct Brush *BKE_brush_first_search(struct Main *bmain, const eObjectMode 
ob_mode);
 void BKE_brush_copy_data(struct Main *bmain,
@@ -63,6 +64,7 @@ void BKE_brush_gpencil_paint_presets(struct Main *bmain, 
struct ToolSettings *ts
 void BKE_brush_gpencil_vertex_presets(struct Main *bmain, struct ToolSettings 
*ts);
 void BKE_brush_gpencil_sculpt_presets(struct Main *bmain, struct ToolSettings 
*ts);
 void BKE_brush_gpencil_weight_presets(struct Main *bmain, struct ToolSettings 
*ts);
+void BKE_gpencil_brush_preset_set(struct Main *bmain, struct Brush *brush, 
const short type);
 
 /* image icon function */
 struct ImBuf *get_brush_icon(struct Brush *brush);
diff --git a/source/blender/blenkernel/intern/brush.c 
b/source/blender/blenkernel/intern/brush.c
index 829992c834d..5d13d4d154a 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -184,6 +184,22 @@ Brush *BKE_brush_add_gpencil(Main *bmain, ToolSettings 
*ts, const char *name, eO
   return brush;
 }
 
+/* Delete a Brush. */
+bool BKE_brush_delete(Main *bmain, Brush *brush)
+{
+  if (brush->id.tag & LIB_TAG_INDIRECT) {
+    return false;
+  }
+  else if (BKE_library_ID_is_indirectly_used(bmain, brush) && 
ID_REAL_USERS(brush) <= 1 &&
+           ID_EXTRA_USERS(brush) == 0) {
+    return false;
+  }
+
+  BKE_id_delete(bmain, brush);
+
+  return true;
+}
+
 /* grease pencil cumapping->preset */
 typedef enum eGPCurveMappingPreset {
   GPCURVE_PRESET_PENCIL = 0,
@@ -244,16 +260,18 @@ static void brush_gpencil_curvemap_reset(CurveMap *cuma, 
int tot, int preset)
   }
 }
 
-static Brush *gpencil_brush_ensure(
-    Main *bmain, ToolSettings *ts, char *brush_name, eObjectMode mode, bool 
*new)
+void BKE_gpencil_brush_preset_set(Main *bmain, Brush *brush, const short type)
 {
-  *new = false;
-  Brush *brush = BLI_findstring(&bmain->brushes, brush_name, offsetof(ID, 
name) + 2);
-  if (brush == NULL) {
-    brush = BKE_brush_add_gpencil(bmain, ts, brush_name, mode);
-    *new = true;
-  }
-  /* Set default at brush level. */
+#define SMOOTH_STROKE_RADIUS 40
+#define SMOOTH_STROKE_FACTOR 0.9f
+#define ACTIVE_SMOOTH 0.35f
+
+  CurveMapping *custom_curve = NULL;
+
+  /* Set general defaults at brush level. */
+  brush->smooth_stroke_radius = SMOOTH_STROKE_RADIUS;
+  brush->smooth_stroke_factor = SMOOTH_STROKE_FACTOR;
+
   brush->rgb[0] = 0.498f;
   brush->rgb[1] = 1.0f;
   brush->rgb[2] = 0.498f;
@@ -265,405 +283,645 @@ static Brush *gpencil_brush_ensure(
   brush->curve_preset = BRUSH_CURVE_SMOOTH;
 
   if (brush->gpencil_settings == NULL) {
-    BKE_brush_init_gpencil_settings(brush);
+    return;
   }
 
+  /* Set preset type. */
+  brush->gpencil_settings->preset_type = type;
+
   /* Set vertex mix factor. */
-  if (brush->gpencil_settings) {
-    brush->gpencil_settings->vertex_mode = GPPAINT_MODE_STROKE;
-    brush->gpencil_settings->vertex_factor = 1.0f;
+  brush->gpencil_settings->vertex_mode = GPPAINT_MODE_STROKE;
+  brush->gpencil_settings->vertex_factor = 1.0f;
+
+  /* Set default weight. */
+  brush->gpencil_settings->weight = 1.0f;
+
+  switch (type) {
+    case GP_BRUSH_PRESET_AIRBRUSH: {
+      brush->size = 300.0f;
+      brush->gpencil_settings->flag |= GP_BRUSH_USE_PRESSURE;
+
+      brush->gpencil_settings->draw_strength = 0.4f;
+      brush->gpencil_settings->flag |= GP_BRUSH_USE_STENGTH_PRESSURE;
+
+      brush->gpencil_settings->input_samples = 10;
+      brush->gpencil_settings->active_smooth = ACTIVE_SMOOTH;
+      brush->gpencil_settings->draw_angle = 0.0f;
+      brush->gpencil_settings->draw_angle_factor = 0.0f;
+      brush->gpencil_settings->gradient_f = 0.211f;
+      brush->gpencil_settings->gradient_s[0] = 1.0f;
+      brush->gpencil_settings->gradient_s[1] = 1.0f;
+
+      brush->gpencil_tool = GPAINT_TOOL_DRAW;
+      brush->gpencil_settings->icon_id = GP_BRUSH_ICON_AIRBRUSH;
+
+      /* Create and link Black Dots material to brush.
+       * This material is required because the brush uses the material to 
define how the stroke is
+       * drawn. */
+      Material *ma = BLI_findstring(&bmain->materials, "Dots Stroke", 
offsetof(ID, name) + 2);
+      if (ma == NULL) {
+        ma = BKE_material_add_gpencil(bmain, "Dots Stroke");
+      }
+      brush->gpencil_settings->material = ma;
+      /* Pin the matterial to the brush. */
+      brush->gpencil_settings->flag |= GP_BRUSH_MATERIAL_PINNED;
 
-    brush->gpencil_settings->weight = 1.0f;
-  }
+      break;
+    }
+    case GP_BRUSH_PRESET_INK_PEN: {
 
-  return brush;
-}
+      brush->size = 60.0f;
+      brush->gpencil_settings->flag |= GP_BRUSH_USE_PRESSURE;
 
-/* Create a set of grease pencil Drawing presets. */
-void BKE_brush_gpencil_paint_presets(Main *bmain, ToolSettings *ts)
-{
-#define SMOOTH_STROKE_RADIUS 40
-#define SMOOTH_STROKE_FACTOR 0.9f
-#define ACTIVE_SMOOTH 0.35f
+     

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