[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30738] trunk/blender: == Sculpt ==

Nicholas Bishop nicholasbishop at gmail.com
Mon Jul 26 06:00:34 CEST 2010


Revision: 30738
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30738
Author:   nicholasbishop
Date:     2010-07-26 06:00:09 +0200 (Mon, 26 Jul 2010)

Log Message:
-----------
== Sculpt ==

Fixed brush icons loading slowly

* Changed brush icon property from an enum to a flag that toggles whether a custom file is used for the brush icon
* Changed get_brush_icon to only handle loading external icons, built-ins are handled through the regular icon system
* Modified preview icon drawing to allow built-in icons
* When not using a custom icon, a default icon is selected based on the current tool

TODO:
* Allowing preview to show built-in icons makes the brush texture selector look ugly when nothing is selected. As discussed on IRC though, the nothing-selected state needs to be clarified anyway; I'll address this in another commit
* Use image browser when selecting a custom icon
* Selecting the default icon is ugly (uses the active object's mode), this can be fixed by making brushes know which paint mode they are part of

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/editors/interface/interface_icons.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h
    trunk/blender/source/blender/makesrna/RNA_enum_types.h
    trunk/blender/source/blender/makesrna/intern/rna_brush.c

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py	2010-07-26 04:00:09 UTC (rev 30738)
@@ -1107,17 +1107,15 @@
         else:
             col.prop(brush, "add_col", text="Color")
 
-        col.separator()
-
         col = layout.column()
         col.label(text="Icon:")
 
         row = col.row(align=True)
-        row.prop(brush, "icon", text="")
+        row.prop(brush, "use_custom_icon")
+        if brush.use_custom_icon:
+            row = col.row(align=True)
+            row.prop(brush, "icon_filepath", text="")
 
-        row = col.row(align=True)
-        row.prop(brush, "icon_filepath", text="")
-
 # ********** default tools for weightpaint ****************
 
 

Modified: trunk/blender/source/blender/editors/interface/interface_icons.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_icons.c	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/editors/interface/interface_icons.c	2010-07-26 04:00:09 UTC (rev 30738)
@@ -44,10 +44,14 @@
 #include "BLI_blenlib.h"
 #include "BLI_storage_types.h"
 
+#include "DNA_brush_types.h"
+#include "DNA_object_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_userdef_types.h"
-#include "DNA_brush_types.h"
 
+#include "RNA_access.h"
+#include "RNA_enum_types.h"
+
 #include "BKE_context.h"
 #include "BKE_global.h"
 #include "BKE_image.h"
@@ -1009,6 +1013,43 @@
 	}
 }
 
+static int ui_id_brush_get_icon(bContext *C, ID *id, int preview)
+{
+	Brush *br = (Brush*)id;
+
+	if(br->flag & BRUSH_CUSTOM_ICON) {
+		BKE_icon_getid(id);
+		ui_id_icon_render(C, id, preview);
+	}
+	else if(!id->icon_id) {
+		/* no icon found, reset it */
+		
+		/* this is not nice, should probably make
+		   brushes be strictly in one paint mode only
+		   to avoid this kind of thing */
+		Object *ob = CTX_data_active_object(C);
+		EnumPropertyItem *items;
+		int tool;
+		
+		if(ob->mode & OB_MODE_SCULPT) {
+			items = brush_sculpt_tool_items;
+			tool = br->sculpt_tool;
+		}
+		else if(ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT)) {
+			items = brush_vertexpaint_tool_items;
+			tool = br->vertexpaint_tool;
+		}
+		else {
+			items = brush_imagepaint_tool_items;
+			tool = br->imagepaint_tool;
+		}
+
+		RNA_enum_icon_from_value(items, tool, &id->icon_id);
+	}
+
+	return id->icon_id;
+}
+
 int ui_id_icon_get(bContext *C, ID *id, int preview)
 {
 	int iconid= 0;
@@ -1016,12 +1057,14 @@
 	/* icon */
 	switch(GS(id->name))
 	{
+		case ID_BR:
+			iconid= ui_id_brush_get_icon(C, id, preview);
+			break;
 		case ID_MA: /* fall through */
 		case ID_TE: /* fall through */
 		case ID_IM: /* fall through */
 		case ID_WO: /* fall through */
 		case ID_LA: /* fall through */
-		case ID_BR: /* fall through */
 			iconid= BKE_icon_getid(id);
 			/* checks if not exists, or changed */
 			ui_id_icon_render(C, id, preview);

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-07-26 04:00:09 UTC (rev 30738)
@@ -747,11 +747,7 @@
 static void widget_draw_preview(BIFIconID icon, float aspect, float alpha, rcti *rect)
 {
 	int w, h, x, y, size;
-	
-	/* only display previews for actual preview images .. ? */
-	if (icon < BIFICONID_LAST)
-		return;
-	
+
 	w = rect->xmax - rect->xmin;
 	h = rect->ymax - rect->ymin;
 	size = MIN2(w, h);

Modified: trunk/blender/source/blender/editors/render/render_preview.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_preview.c	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/editors/render/render_preview.c	2010-07-26 04:00:09 UTC (rev 30738)
@@ -104,83 +104,13 @@
 
 ImBuf* get_brush_icon(Brush *brush)
 {
-	void *icon_data[]= {
-		0,
-
-		&datatoc_blob_png,
-		&datatoc_clay_png,
-		&datatoc_crease_png,
-		&datatoc_draw_png,
-		&datatoc_fill_png,
-		&datatoc_flatten_png,
-		&datatoc_grab_png,
-		&datatoc_inflate_png,
-		&datatoc_layer_png,
-		&datatoc_nudge_png,
-		&datatoc_pinch_png,
-		&datatoc_scrape_png,
-		&datatoc_smooth_png,
-		&datatoc_snake_hook_png,
-		&datatoc_thumb_png,
-		&datatoc_twist_png,
-
-		&datatoc_add_png,
-		&datatoc_blur_png,
-		&datatoc_clone_png,
-		&datatoc_darken_png,
-		&datatoc_lighten_png,
-		&datatoc_mix_png,
-		&datatoc_multiply_png,
-		&datatoc_smear_png,
-		&datatoc_soften_png,
-		&datatoc_subtract_png,
-		&datatoc_texdraw_png,
-		&datatoc_vertexdraw_png,
-	};
-
-	size_t icon_size[]= {
-		0,
-
-		datatoc_blob_png_size,
-		datatoc_clay_png_size,
-		datatoc_crease_png_size,
-		datatoc_draw_png_size,
-		datatoc_fill_png_size,
-		datatoc_flatten_png_size,
-		datatoc_grab_png_size,
-		datatoc_inflate_png_size,
-		datatoc_layer_png_size,
-		datatoc_nudge_png_size,
-		datatoc_pinch_png_size,
-		datatoc_scrape_png_size,
-		datatoc_smooth_png_size,
-		datatoc_snake_hook_png_size,
-		datatoc_thumb_png_size,
-		datatoc_twist_png_size,
-
-		datatoc_add_png_size,
-		datatoc_blur_png_size,
-		datatoc_clone_png_size,
-		datatoc_darken_png_size,
-		datatoc_lighten_png_size,
-		datatoc_mix_png_size,
-		datatoc_multiply_png_size,
-		datatoc_smear_png_size,
-		datatoc_soften_png_size,
-		datatoc_subtract_png_size,
-		datatoc_texdraw_png_size,
-		datatoc_vertexdraw_png_size,
-	};
-
 	static const int flags = IB_rect|IB_multilayer|IB_metadata;
 
-	static const int default_icon = BRUSH_ICON_SCULPTDRAW;
-
 	char path[240];
 	char *folder;
 
 	if (!(brush->icon_imbuf)) {
-		if (brush->icon==BRUSH_ICON_FILE) {
+		if (brush->flag & BRUSH_CUSTOM_ICON) {
 
 			if (brush->icon_filepath[0]) {
 				// first use the path directly to try and load the file
@@ -202,21 +132,13 @@
 						brush->icon_imbuf= IMB_loadiffname(path, flags);
 				}
 			}
-
-			// if all else fails use a default image
-			if (!(brush->icon_imbuf))
-				brush->icon_imbuf= IMB_ibImageFromMemory(icon_data[default_icon], icon_size[default_icon], flags);
 		}
-		else {
-			if (!(brush->icon_imbuf))
-				brush->icon_imbuf= IMB_ibImageFromMemory(icon_data[brush->icon], icon_size[brush->icon], flags);
-		}
-
-		BKE_icon_changed(BKE_icon_getid(&(brush->id)));
 	}
 
 	if (!(brush->icon_imbuf))
-		printf("get_brush_icon: unable to resolve brush icon imbuf\n");
+		brush->id.icon_id = 0;
+	else
+		BKE_icon_changed(BKE_icon_getid(&(brush->id)));
 
 	return brush->icon_imbuf;
 }

Modified: trunk/blender/source/blender/makesdna/DNA_brush_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_brush_types.h	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/makesdna/DNA_brush_types.h	2010-07-26 04:00:09 UTC (rev 30738)
@@ -55,8 +55,6 @@
 	struct MTex mtex;
 
 	struct ImBuf *icon_imbuf;
-	char icon;
-	char pad2[7];
 	PreviewImage *preview;
 	char icon_filepath[240];
 
@@ -126,6 +124,7 @@
 #define BRUSH_RANDOM_ROTATION (1<<25)
 #define BRUSH_PLANE_TRIM (1<<26)
 #define BRUSH_FRONTFACE (1<<27)
+#define BRUSH_CUSTOM_ICON (1<<28)
 
 /* Brush.sculpt_tool */
 #define SCULPT_TOOL_DRAW        1
@@ -147,41 +146,6 @@
 #define SCULPT_TOOL_BLOB       17
 #define SCULPT_TOOL_CLAY_TUBES 18
 
-/* Internal Icons */
-#define BRUSH_ICON_FILE        0
-
-#define BRUSH_ICON_BLOB        1
-#define BRUSH_ICON_CLAY        2
-#define BRUSH_ICON_CREASE      3
-#define BRUSH_ICON_SCULPTDRAW        4
-#define BRUSH_ICON_FILL        5
-#define BRUSH_ICON_FLATTEN     6
-#define BRUSH_ICON_GRAB        7
-#define BRUSH_ICON_INFLATE     8
-#define BRUSH_ICON_LAYER       9
-#define BRUSH_ICON_NUDGE      10
-#define BRUSH_ICON_PINCH      11
-#define BRUSH_ICON_SCRAPE     12
-#define BRUSH_ICON_SMOOTH     13
-#define BRUSH_ICON_SNAKE_HOOK 14
-#define BRUSH_ICON_THUMB      15
-#define BRUSH_ICON_TWIST      16
-
-#define BRUSH_ICON_ADD        17
-#define BRUSH_ICON_BLUR       18
-#define BRUSH_ICON_CLONE      19
-#define BRUSH_ICON_DARKEN     20
-#define BRUSH_ICON_LIGHTEN    21
-#define BRUSH_ICON_MIX        22
-#define BRUSH_ICON_MULTIPLY   23
-#define BRUSH_ICON_SMEAR      24
-#define BRUSH_ICON_SOFTEN     25
-#define BRUSH_ICON_SUBTRACT   26
-#define BRUSH_ICON_TEXDRAW    27
-#define BRUSH_ICON_VERTEXDRAW 28
-
-#define BRUSH_ICON_COUNT      29
-
 /* ImagePaintSettings.tool */
 #define PAINT_TOOL_DRAW		0
 #define PAINT_TOOL_SOFTEN	1

Modified: trunk/blender/source/blender/makesrna/RNA_enum_types.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_enum_types.h	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/makesrna/RNA_enum_types.h	2010-07-26 04:00:09 UTC (rev 30738)
@@ -66,6 +66,8 @@
 extern EnumPropertyItem operator_return_items[];
 
 extern EnumPropertyItem brush_sculpt_tool_items[];
+extern EnumPropertyItem brush_vertexpaint_tool_items[];
+extern EnumPropertyItem brush_imagepaint_tool_items[];
 
 extern EnumPropertyItem texture_type_items[];
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_brush.c	2010-07-26 03:43:17 UTC (rev 30737)
+++ trunk/blender/source/blender/makesrna/intern/rna_brush.c	2010-07-26 04:00:09 UTC (rev 30738)
@@ -36,19 +36,77 @@
 
 #include "IMB_imbuf.h"
 
+
 #include "WM_types.h"
 
+EnumPropertyItem brush_sculpt_tool_items[] = {
+	{SCULPT_TOOL_BLOB, "BLOB", ICON_BRUSH_BLOB, "Blob", ""},
+	{SCULPT_TOOL_CLAY, "CLAY", ICON_BRUSH_CLAY, "Clay", ""},
+	{SCULPT_TOOL_CREASE, "CREASE",ICON_BRUSH_CREASE, "Crease", ""},
+	{SCULPT_TOOL_DRAW, "DRAW", ICON_BRUSH_SCULPT_DRAW, "Draw", ""},
+	{SCULPT_TOOL_FILL, "FILL", ICON_BRUSH_FILL, "Fill", ""},
+	{SCULPT_TOOL_FLATTEN, "FLATTEN", ICON_BRUSH_FLATTEN, "Flatten", ""},
+	{SCULPT_TOOL_GRAB, "GRAB", ICON_BRUSH_GRAB, "Grab", ""},
+	{SCULPT_TOOL_INFLATE, "INFLATE", ICON_BRUSH_INFLATE, "Inflate", ""},
+	{SCULPT_TOOL_LAYER, "LAYER", ICON_BRUSH_LAYER, "Layer", ""},
+	{SCULPT_TOOL_NUDGE, "NUDGE", ICON_BRUSH_NUDGE, "Nudge", ""},
+	{SCULPT_TOOL_PINCH, "PINCH", ICON_BRUSH_PINCH, "Pinch", ""},
+	{SCULPT_TOOL_ROTATE, "ROTATE", ICON_BRUSH_ROTATE, "Rotate", ""},

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list