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