[Bf-blender-cvs] [338903f5f5f] greasepencil-object: New default color for Brush

Antonio Vazquez noreply at git.blender.org
Tue Mar 13 13:06:34 CET 2018


Commit: 338903f5f5f976a5ebf0c91ebb73cab3e3a041e7
Author: Antonio Vazquez
Date:   Tue Mar 13 12:59:19 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rB338903f5f5f976a5ebf0c91ebb73cab3e3a041e7

New default color for Brush

If the brush defines a default Palette and Color, when draw the color used is this and not the current context default color.

Still there is problem when change drawing mode from Line to Dots.

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

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/blenkernel/BKE_gpencil.h
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/makesdna/DNA_brush_types.h
M	source/blender/makesrna/intern/rna_brush.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 64868af2b6e..ba320173a4f 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -2156,6 +2156,14 @@ class VIEW3D_PT_tools_grease_pencil_brush_option(Panel):
             col.prop(brush, "active_smooth_factor")
             col.separator()
 
+            col.label("Color Settings:")
+            col.template_ID(brush, "palette")
+            if brush.palette:
+                col.separator()
+                subcol = col.column()
+                subcol.prop_search(brush, "colorname", brush.palette, "colors", text="Color", icon="LAYER_ACTIVE")
+            col.separator()
+
             if brush.gpencil_brush_type == 'DRAW':
                 col.prop(brush, "use_stabilizer", text="Stabilizer")
                 if brush.use_stabilizer:
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 5e3a9865824..3b781e8f0a4 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -47,6 +47,7 @@ struct bGPDpalettecolor;
 struct Main;
 struct PaletteColor;
 struct BoundBox;
+struct Brush;
 struct Object;
 struct bDeformGroup;
 struct GpencilSimplifyModifierData;
@@ -149,6 +150,7 @@ void BKE_gpencil_paletteslot_set_palette(struct bGPdata *gpd, struct bGPDpalette
 struct bGPDpaletteref *BKE_gpencil_paletteslot_add(struct bGPdata *gpd, struct Palette *palette);
 struct bGPDpaletteref *BKE_gpencil_paletteslot_addnew(struct Main *bmain, struct bGPdata *gpd, const char name[]);
 struct bGPDpaletteref *BKE_gpencil_paletteslot_validate(struct Main *bmain, struct bGPdata *gpd);
+struct PaletteColor *BKE_gpencil_get_color_from_brush(struct bGPdata *gpd, struct Brush *brush);
 
 /* Palettes - Deprecated (2.78-2.79) */
 void BKE_gpencil_free_palettes(struct ListBase *list);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index a337b3b4143..cac976f0b85 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -1281,6 +1281,32 @@ bGPDpaletteref *BKE_gpencil_paletteslot_addnew(Main *bmain, bGPdata *gpd, const
 	return BKE_gpencil_paletteslot_add(gpd, palette);
 }
 
+PaletteColor *BKE_gpencil_get_color_from_brush(bGPdata *gpd, Brush *brush)
+{
+	bGPDpaletteref *palslot = NULL;
+	PaletteColor *palcolor = NULL;
+
+	if ((brush->palette) && (brush->colorname)) {
+
+		/* verify paletteslots has this palette */
+		for (bGPDpaletteref *slot = gpd->palette_slots.first; slot; slot = slot->next) {
+			if (slot->palette == brush->palette) {
+				palslot = slot;
+				break;
+			}
+		}
+		/* add slot */
+		if (palslot == NULL) {
+			palslot = BKE_gpencil_paletteslot_add(gpd, NULL);
+			palslot->palette = brush->palette;
+		}
+
+		palcolor = BKE_palette_color_getbyname(brush->palette, brush->colorname);
+	}
+
+	return palcolor;
+}
+
 /* Get active palette slot, and add all default settings if we don't find anything */
 bGPDpaletteref *BKE_gpencil_paletteslot_validate(Main *bmain, bGPdata *gpd)
 {
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 81ca27e43cd..04970a54133 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2331,6 +2331,9 @@ static void lib_link_brush(FileData *fd, Main *main)
 			brush->toggle_brush = newlibadr(fd, brush->id.lib, brush->toggle_brush);
 			brush->paint_curve = newlibadr_us(fd, brush->id.lib, brush->paint_curve);
 
+			/* link default grease pencil palette */
+			brush->palette = newlibadr(fd, brush->id.lib, brush->palette);
+
 			brush->id.tag &= ~LIB_TAG_NEED_LINK;
 		}
 	}
@@ -8972,8 +8975,8 @@ static void lib_link_all(FileData *fd, Main *main)
 	lib_link_action(fd, main);
 	lib_link_vfont(fd, main);
 	lib_link_nodetree(fd, main);   /* has to be done after scene/materials, this will verify group nodes */
-	lib_link_brush(fd, main);
 	lib_link_palette(fd, main);
+	lib_link_brush(fd, main);
 	lib_link_paint_curve(fd, main);
 	lib_link_particlesettings(fd, main);
 	lib_link_movieclip(fd, main);
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 603168fcdb4..d39d4fb2a89 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1563,18 +1563,26 @@ static void gp_init_drawing_brush(bContext *C, tGPsdata *p)
 static void gp_init_palette(tGPsdata *p)
 {
 	bGPdata *gpd = p->gpd;
-	
-	bGPDpaletteref *palslot;
+	Brush *brush = p->brush;
+
+	bGPDpaletteref *palslot = NULL;
 	Palette *palette = NULL;
 	PaletteColor *palcolor = NULL;
 	
-	/* get palette and color info
+	/* if the brush has a palette and color defined, use these and not current defaults */
+	palcolor = BKE_gpencil_get_color_from_brush(gpd, brush);
+
+	/* if no brush defaults, get palette and color info
 	 * NOTE: _validate() ensures that everything we need will exist...
 	 */
-	palslot  = BKE_gpencil_paletteslot_validate(p->bmain, gpd);
-	palette  = palslot->palette;
-	palcolor = BKE_palette_color_get_active(palette);
-	
+	if (palcolor != NULL) {
+		palette = brush->palette;
+	}
+	else {
+		palslot = BKE_gpencil_paletteslot_validate(p->bmain, gpd);
+		palette = palslot->palette;
+		palcolor = BKE_palette_color_get_active(palette);
+	}
 	/* assign color to temp tGPsdata */
 	if (palcolor) {
 		p->palette = palette;
diff --git a/source/blender/makesdna/DNA_brush_types.h b/source/blender/makesdna/DNA_brush_types.h
index 989c6bfdac0..f08e492c434 100644
--- a/source/blender/makesdna/DNA_brush_types.h
+++ b/source/blender/makesdna/DNA_brush_types.h
@@ -179,6 +179,10 @@ typedef struct Brush {
 	int   gp_eraser_mode;     /* soft, hard or stroke */
 	float gp_active_smooth;   /* smooth while drawing factor */
 	char pad_[4];
+
+	/* optional link of palette and color to replace default color in context */	
+	struct Palette *palette;            /* palette linked */
+	char           colorname[64];       /* color name */
 } Brush;
 
 /* Brush->gp_flag */
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index 63a04ef591c..ad96b5f20f1 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -689,6 +689,27 @@ static void rna_brush_gpencil_eraser_mode(Main *bmain, Scene *scene, PointerRNA
 
 }
 
+static void rna_BrushPalette_colorname_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
+{
+	/* reset colorname */
+	Brush *brush = ptr->data;
+	brush->colorname[0] = '\0';
+}
+
+/* check the current color is valid */
+static int rna_Brush_color_valid(PointerRNA *ptr)
+{
+	Brush *brush = ptr->data;
+	Palette *palette = brush->palette;
+	PaletteColor *palcolor = BKE_palette_color_getbyname(palette, brush->colorname);
+
+	if (palcolor) {
+		return true;
+	}
+
+	return false;
+}
+
 #else
 
 static void rna_def_brush_texture_slot(BlenderRNA *brna)
@@ -1784,6 +1805,25 @@ static void rna_def_brush(BlenderRNA *brna)
 	RNA_def_property_enum_items(prop, rna_enum_gpencil_fill_draw_modes_items);
 	RNA_def_property_ui_text(prop, "Mode", "Mode to draw boundary limits");
 
+	/* Palette */
+	prop = RNA_def_property(srna, "palette", PROP_POINTER, PROP_NONE);
+	RNA_def_property_struct_type(prop, "Palette");
+	RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+	RNA_def_property_ui_text(prop, "Palette", "Palette used when enable this brush");
+	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_BrushPalette_colorname_reset");
+
+	/* Color Name */
+	prop = RNA_def_property(srna, "colorname", PROP_STRING, PROP_NONE);
+	RNA_def_property_string_sdna(prop, NULL, "colorname");
+	RNA_def_property_ui_text(prop, "Color", "Name of the color used when enable this brush");
+	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
+
+	prop = RNA_def_property(srna, "is_color_valid", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_funcs(prop, "rna_Brush_color_valid", NULL);
+	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Color valid", "Flag to check if color name exist in current palette");
+	RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_SELECTED, NULL);
+
 	prop = RNA_def_property(srna, "gpencil_fill_show_boundary", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "gp_flag", GP_BRUSH_FILL_SHOW_HELPLINES);
 	RNA_def_property_boolean_default(prop, true);



More information about the Bf-blender-cvs mailing list