[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29741] branches/soc-2010-jwilkins: == Large Icons for Brushes ==

Jason Wilkins Jason.A.Wilkins at gmail.com
Sun Jun 27 20:05:30 CEST 2010


Revision: 29741
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29741
Author:   jwilkins
Date:     2010-06-27 20:05:29 +0200 (Sun, 27 Jun 2010)

Log Message:
-----------
== Large Icons for Brushes ==
* brushes can now use images for icons
* if no image is selected but brush has a texture, the texture is used as its icon
* bug fix: overlay + on-surface brush was broken

Modified Paths:
--------------
    branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py
    branches/soc-2010-jwilkins/source/blender/blenkernel/intern/brush.c
    branches/soc-2010-jwilkins/source/blender/blenkernel/intern/icons.c
    branches/soc-2010-jwilkins/source/blender/editors/gpencil/gpencil_buttons.c
    branches/soc-2010-jwilkins/source/blender/editors/include/UI_interface.h
    branches/soc-2010-jwilkins/source/blender/editors/interface/interface_icons.c
    branches/soc-2010-jwilkins/source/blender/editors/interface/interface_templates.c
    branches/soc-2010-jwilkins/source/blender/editors/render/render_preview.c
    branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_ops.c
    branches/soc-2010-jwilkins/source/blender/editors/sculpt_paint/paint_stroke.c
    branches/soc-2010-jwilkins/source/blender/editors/space_image/image_buttons.c
    branches/soc-2010-jwilkins/source/blender/editors/space_logic/logic_window.c
    branches/soc-2010-jwilkins/source/blender/editors/space_nla/nla_buttons.c
    branches/soc-2010-jwilkins/source/blender/editors/space_node/drawnode.c
    branches/soc-2010-jwilkins/source/blender/makesdna/DNA_brush_types.h
    branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_brush.c
    branches/soc-2010-jwilkins/source/blender/makesrna/intern/rna_ui_api.c

Modified: branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/release/scripts/ui/space_view3d_toolbar.py	2010-06-27 18:05:29 UTC (rev 29741)
@@ -509,12 +509,11 @@
             else:
                 defaultbrushes = 7
 
-            #row.template_list(settings, "brushes", settings, "active_brush_index", rows=2, maxrows=defaultbrushes)
+            if not context.sculpt_object:
+                row.template_list(settings, "brushes", settings, "active_brush_index", rows=2, maxrows=defaultbrushes)
+            else:
+                col.template_ID_preview(settings, "brush", new="brush.add", filter="is_sculpt_brush", rows=3, cols=4)
 
-            #col.template_ID(settings, "brush", new="brush.add")
-            #col.template_ID_preview(brush, "texture", new="texture.new", rows=2, cols=4)
-            col.template_ID_preview(settings, "brush", new="brush.add", rows=5, cols=5)
-
         # Particle Mode #
 
         # XXX This needs a check if psys is editable.
@@ -868,6 +867,7 @@
         col.prop(sculpt, "fast_navigate")
         col.prop(sculpt, "use_openmp")
 
+        col.separator()
         if brush.sculpt_tool in ('DRAW', 'INFLATE', 'CLAY', 'WAX', 'PINCH', 'FLATTEN'):
             sub = col.column()
             sub.label(text="Color:")
@@ -877,7 +877,11 @@
             sub = col.column()
             sub.prop(brush, "add_col", text="Color")
 
+        col.separator()
+        col.label(text="Icon:")
+        col.template_ID_preview(brush, "image_icon", open="image.open", rows=3, cols=4)
 
+        col.separator()
         split = self.layout.split()
 
         col = split.column()

Modified: branches/soc-2010-jwilkins/source/blender/blenkernel/intern/brush.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/blenkernel/intern/brush.c	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/blenkernel/intern/brush.c	2010-06-27 18:05:29 UTC (rev 29741)
@@ -53,6 +53,7 @@
 #include "BKE_main.h"
 #include "BKE_paint.h"
 #include "BKE_texture.h"
+#include "BKE_icons.h"
 
 
 
@@ -155,7 +156,9 @@
 void free_brush(Brush *brush)
 {
 	if(brush->mtex.tex) brush->mtex.tex->id.us--;
-	
+
+	BKE_previewimg_free(&brush->preview);
+
 	curvemapping_free(brush->curve);
 }
 

Modified: branches/soc-2010-jwilkins/source/blender/blenkernel/intern/icons.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/blenkernel/intern/icons.c	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/blenkernel/intern/icons.c	2010-06-27 18:05:29 UTC (rev 29741)
@@ -38,6 +38,7 @@
 #include "DNA_material_types.h"
 #include "DNA_texture_types.h"
 #include "DNA_world_types.h"
+#include "DNA_brush_types.h"
 
 #include "BLI_ghash.h"
 
@@ -175,6 +176,15 @@
 	} else if (GS(id->name) == ID_IM) {
 		Image *img  = (Image*)id;
 		BKE_previewimg_free(&img->preview);
+	} else if (GS(id->name) == ID_BR) {
+		Brush *br = (Brush*)id;
+		if (br->image_icon) {
+			BKE_previewimg_free(&br->preview);
+		}
+		else {
+			if (br->mtex.tex)
+				BKE_previewimg_free(&br->mtex.tex->preview);
+		}
 	}
 }
 
@@ -202,8 +212,22 @@
 		Image *img  = (Image*)id;
 		if (!img->preview) img->preview = BKE_previewimg_create();
 		prv_img = img->preview;
-	} 
+	} else if (GS(id->name) == ID_BR) {
+		Brush *br = (Brush*)id;
+		if (br->image_icon) {
+			if (!br->preview)
+				br->preview = BKE_previewimg_create();
 
+			prv_img = br->preview;
+		}
+		else {
+			if (br->mtex.tex && !br->mtex.tex->preview)
+				br->mtex.tex->preview = BKE_previewimg_create();
+
+			prv_img = br->mtex.tex ? br->mtex.tex->preview : NULL;
+		}
+	}
+
 	return prv_img;
 }
 

Modified: branches/soc-2010-jwilkins/source/blender/editors/gpencil/gpencil_buttons.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/gpencil/gpencil_buttons.c	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/editors/gpencil/gpencil_buttons.c	2010-06-27 18:05:29 UTC (rev 29741)
@@ -243,11 +243,11 @@
 	col= uiLayoutColumn(layout, 0);
 		/* current Grease Pencil block */
 		// TODO: show some info about who owns this?
-		uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink"); 
-		
+		uiTemplateID(col, C, ctx_ptr, "grease_pencil", "GPENCIL_OT_data_add", NULL, "GPENCIL_OT_data_unlink", NULL); 
+
 		/* add new layer button - can be used even when no data, since it can add a new block too */
 		uiItemO(col, NULL, 0, "GPENCIL_OT_layer_add");
-	
+
 	/* sanity checks... */
 	if (gpd == NULL)
 		return;

Modified: branches/soc-2010-jwilkins/source/blender/editors/include/UI_interface.h
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/include/UI_interface.h	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/editors/include/UI_interface.h	2010-06-27 18:05:29 UTC (rev 29741)
@@ -666,11 +666,11 @@
 void uiTemplateHeader(uiLayout *layout, struct bContext *C, int menus);
 void uiTemplateDopeSheetFilter(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr);
 void uiTemplateID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
-	char *newop, char *openop, char *unlinkop);
+	char *newop, char *openop, char *unlinkop, char *filterop);
 void uiTemplateIDBrowse(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
-				  char *newop, char *openop, char *unlinkop);
+				  char *newop, char *openop, char *unlinkop, char *filterop);
 void uiTemplateIDPreview(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname,
-	char *newop, char *openop, char *unlinkop, int rows, int cols);
+	char *newop, char *openop, char *unlinkop, char *filterop, int rows, int cols);
 void uiTemplateAnyID(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, 
 	char *proptypename, char *text);
 void uiTemplatePathBuilder(uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, char *propname, 

Modified: branches/soc-2010-jwilkins/source/blender/editors/interface/interface_icons.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/interface/interface_icons.c	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/editors/interface/interface_icons.c	2010-06-27 18:05:29 UTC (rev 29741)
@@ -977,6 +977,7 @@
 		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: branches/soc-2010-jwilkins/source/blender/editors/interface/interface_templates.c
===================================================================
--- branches/soc-2010-jwilkins/source/blender/editors/interface/interface_templates.c	2010-06-27 16:36:42 UTC (rev 29740)
+++ branches/soc-2010-jwilkins/source/blender/editors/interface/interface_templates.c	2010-06-27 18:05:29 UTC (rev 29741)
@@ -42,6 +42,7 @@
 #include "BKE_main.h"
 #include "BKE_texture.h"
 #include "BKE_utildefines.h"
+#include "BKE_report.h"
 
 #include "ED_screen.h"
 #include "ED_render.h"
@@ -137,6 +138,8 @@
 
 	ListBase *idlb;
 	int prv_rows, prv_cols;
+
+	char filterop[64];
 } TemplateID;
 
 /* Search browse menu, assign  */
@@ -172,9 +175,40 @@
 				if ((id->name[2]=='.') && (str[0] != '.'))
 					continue;
 
+			if (template->filterop[0] != 0) {
+				PointerRNA ptr;
+				ReportList reports;
+				FunctionRNA *func;
+				ParameterList parms;
+
+				RNA_id_pointer_create(id, &ptr);
+
+				BKE_reports_init(&reports, RPT_PRINT);
+
+				func= RNA_struct_find_function(&ptr, template->filterop);
+
+				if (func) {
+					RNA_parameter_list_create(&parms, &ptr, func);
+
+					RNA_parameter_set_lookup(&parms, "context", &C);
+
+					if (RNA_function_call(C, &reports, &ptr, func, &parms) == 0) {
+						int* ret;
+						RNA_parameter_get_lookup(&parms, "ret", &ret);
+
+						if (!(*ret)) {
+							RNA_parameter_list_free(&parms);
+							continue;
+						}
+					}
+
+					RNA_parameter_list_free(&parms);
+				}
+			}
+
 			if(BLI_strcasestr(id->name+2, str)) {
 				iconid= ui_id_icon_get((bContext*)C, id, 1);
-                
+
 				if(!uiSearchItemAdd(items, id->name+2, id, iconid))
 					break;
 			}
@@ -336,7 +370,7 @@
 	}
 }
 
-static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, StructRNA *type, int flag, char *newop, char *openop, char *unlinkop)
+static void template_ID(bContext *C, uiLayout *layout, TemplateID *template, StructRNA *type, int flag, char *newop, char *openop, char *unlinkop, char *filterop)
 {
 	uiBut *but;
 	uiBlock *block;
@@ -476,7 +510,7 @@
 	uiBlockEndAlign(block);
 }
 
-static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, int flag, int prv_rows, int prv_cols)
+static void ui_template_id(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char* filterop, int flag, int prv_rows, int prv_cols)
 {
 	TemplateID *template;
 	PropertyRNA *prop;
@@ -494,7 +528,12 @@
 	template->prop= prop;
 	template->prv_rows = prv_rows;
 	template->prv_cols = prv_cols;
-	
+
+	if (filterop) 
+		BLI_strncpy(template->filterop, filterop, sizeof(template->filterop));
+	else
+		template->filterop[0] = 0;
+
 	if(newop)
 		flag |= UI_ID_ADD_NEW;
 	if(openop)
@@ -508,26 +547,25 @@
 	 */
 	if(template->idlb) {
 		uiLayoutRow(layout, 1);
-		template_ID(C, layout, template, type, flag, newop, openop, unlinkop);
+		template_ID(C, layout, template, type, flag, newop, openop, unlinkop, filterop);
 	}
 
 	MEM_freeN(template);
-	
 }
 
-void uiTemplateID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop)
+void uiTemplateID(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop, char *filterop)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list