Revision: 30531
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30531
Author:   jwilkins
Date:     2010-07-20 13:32:30 +0200 (Tue, 20 Jul 2010)

Log Message:
-----------
* Made the default sculpt icons an internal part of the executable
* Default icons can be selected from a menu
* Option to make a custom icon from a file is present but the UI is disabled 
because of a mysterious crash
* New startup.blend that has the appropriate icons selected

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/space_view3d_toolbar.py
    trunk/blender/source/blender/blenkernel/BKE_brush.h
    trunk/blender/source/blender/blenkernel/intern/brush.c
    trunk/blender/source/blender/blenkernel/intern/icons.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/datafiles/startup.blend.c
    trunk/blender/source/blender/editors/interface/interface_icons.c
    trunk/blender/source/blender/editors/render/render_preview.c
    trunk/blender/source/blender/makesdna/DNA_brush_types.h
    trunk/blender/source/blender/makesrna/intern/rna_brush.c

Added Paths:
-----------
    trunk/blender/source/blender/editors/datafiles/blob.png.c
    trunk/blender/source/blender/editors/datafiles/clay.png.c
    trunk/blender/source/blender/editors/datafiles/crease.png.c
    trunk/blender/source/blender/editors/datafiles/draw.png.c
    trunk/blender/source/blender/editors/datafiles/fill.png.c
    trunk/blender/source/blender/editors/datafiles/flatten.png.c
    trunk/blender/source/blender/editors/datafiles/grab.png.c
    trunk/blender/source/blender/editors/datafiles/inflate.png.c
    trunk/blender/source/blender/editors/datafiles/layer.png.c
    trunk/blender/source/blender/editors/datafiles/nudge.png.c
    trunk/blender/source/blender/editors/datafiles/pinch.png.c
    trunk/blender/source/blender/editors/datafiles/scrape.png.c
    trunk/blender/source/blender/editors/datafiles/smooth.png.c
    trunk/blender/source/blender/editors/datafiles/snake_hook.png.c
    trunk/blender/source/blender/editors/datafiles/thumb.png.c
    trunk/blender/source/blender/editors/datafiles/twist.png.c

Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py    2010-07-20 
11:18:29 UTC (rev 30530)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py    2010-07-20 
11:32:30 UTC (rev 30531)
@@ -1124,10 +1124,11 @@
         col.label(text="Icon:")
 
         row = col.row(align=True)
-        row.template_ID(brush, "image_icon")
-        row = col.row(align=True)
-        row.prop(brush, "image_icon_path", text="")
+        row.prop(brush, "icon", text="")
 
+        #row = col.row(align=True)
+        #row.prop(brush, "icon_filepath", text="")
+
 # ********** default tools for weightpaint ****************
 
 

Modified: trunk/blender/source/blender/blenkernel/BKE_brush.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_brush.h 2010-07-20 11:18:29 UTC 
(rev 30530)
+++ trunk/blender/source/blender/blenkernel/BKE_brush.h 2010-07-20 11:32:30 UTC 
(rev 30531)
@@ -45,7 +45,7 @@
 void free_brush(struct Brush *brush);
 
 /* image icon function */
-struct Image *get_brush_icon(struct Brush *brush);
+struct ImBuf *get_brush_icon(struct Brush *brush);
 
 /* brush library operations used by different paint panels */
 int brush_set_nr(struct Brush **current_brush, int nr, const char *name);

Modified: trunk/blender/source/blender/blenkernel/intern/brush.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/brush.c      2010-07-20 
11:18:29 UTC (rev 30530)
+++ trunk/blender/source/blender/blenkernel/intern/brush.c      2010-07-20 
11:32:30 UTC (rev 30531)
@@ -104,7 +104,7 @@
 
        /* brush appearance  */
 
-       brush->image_icon= NULL;
+       brush->icon_imbuf= get_brush_icon(brush);
 
        brush->add_col[0]= 1.00; /* add mode color is light red */
        brush->add_col[1]= 0.39;
@@ -132,6 +132,8 @@
 
        if(brush->mtex.tex) id_us_plus((ID*)brush->mtex.tex);
 
+       IMB_refImBuf(brushn->icon_imbuf);
+
        brushn->curve= curvemapping_copy(brush->curve);
 
        /* enable fake user by default */
@@ -146,8 +148,14 @@
 /* not brush itself */
 void free_brush(Brush *brush)
 {
-       if(brush->mtex.tex) brush->mtex.tex->id.us--;
+       if (brush->mtex.tex)
+               brush->mtex.tex->id.us--;
 
+       if (brush->icon==BRUSH_ICON_FILE && brush->icon_imbuf)
+               IMB_freeImBuf(brush->icon_imbuf);
+
+       BKE_previewimg_free(&(brush->preview));
+
        curvemapping_free(brush->curve);
 }
 
@@ -176,7 +184,7 @@
                        if(scene->id.lib) lib= 1;
                        else local= 1;
                }
-       
+
        if(local && lib==0) {
                brush->id.lib= 0;
                brush->id.flag= LIB_LOCAL;
@@ -204,34 +212,137 @@
 }
 
 /* image icon function */
-Image* get_brush_icon(Brush *brush)
+ImBuf* get_brush_icon(Brush *brush)
 {
+       extern char datatoc_blob_png;
+       extern char datatoc_clay_png;
+       extern char datatoc_crease_png;
+       extern char datatoc_draw_png;
+       extern char datatoc_fill_png;
+       extern char datatoc_flatten_png;
+       extern char datatoc_grab_png;
+       extern char datatoc_inflate_png;
+       extern char datatoc_layer_png;
+       extern char datatoc_nudge_png;
+       extern char datatoc_pinch_png;
+       extern char datatoc_scrape_png;
+       extern char datatoc_smooth_png;
+       extern char datatoc_snake_hook_png;
+       extern char datatoc_thumb_png;
+       extern char datatoc_twist_png;
 
-       if (!(brush->image_icon) && brush->image_icon_path[0]) {
-               // first use the path directly to try and load the file
-               brush->image_icon= BKE_add_image_file(brush->image_icon_path, 
1);
+       extern int datatoc_blob_png_size;
+       extern int datatoc_clay_png_size;
+       extern int datatoc_crease_png_size;
+       extern int datatoc_draw_png_size;
+       extern int datatoc_fill_png_size;
+       extern int datatoc_flatten_png_size;
+       extern int datatoc_grab_png_size;
+       extern int datatoc_inflate_png_size;
+       extern int datatoc_layer_png_size;
+       extern int datatoc_nudge_png_size;
+       extern int datatoc_pinch_png_size;
+       extern int datatoc_scrape_png_size;
+       extern int datatoc_smooth_png_size;
+       extern int datatoc_snake_hook_png_size;
+       extern int datatoc_thumb_png_size;
+       extern int datatoc_twist_png_size;
 
-               // otherwise lets try to find it in other directories
-               if (!(brush->image_icon)) {
-                       char path[240];
-                       char *folder;
-                       
-                       folder= BLI_get_folder(BLENDER_DATAFILES, "brushicons");
+       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,
+       };
 
-                       path[0] = 0;
+       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,
+       };
 
-                       BLI_make_file_string(G.sce, path, folder, 
brush->image_icon_path);
+       static ImBuf  *icon_imbuf[BRUSH_ICON_COUNT]= { 0 };
 
-                       if (path[0])
-                               brush->image_icon= BKE_add_image_file(path, 1);
+       static const int flags = IB_rect|IB_multilayer|IB_metadata;
+
+       static const int default_icon = BRUSH_ICON_DRAW;
+
+       char path[240];
+       char *folder;
+
+       if (!(brush->icon_imbuf)) {
+               if (brush->icon==BRUSH_ICON_FILE) {
+
+                       if (brush->icon_filepath[0]) {
+                               // first use the path directly to try and load 
the file
+
+                               BLI_strncpy(path, brush->icon_filepath, 
sizeof(brush->icon_filepath));
+                               BLI_path_abs(path, G.sce);
+
+                               brush->icon_imbuf= IMB_loadiffname(path, flags);
+
+                               // otherwise lets try to find it in other 
directories
+                               if (!(brush->icon_imbuf)) {
+                                       folder= 
BLI_get_folder(BLENDER_DATAFILES, "brushicons");
+
+                                       path[0]= 0;
+
+                                       BLI_make_file_string(G.sce, path, 
folder, brush->icon_filepath);
+
+                                       if (path[0])
+                                               brush->icon_imbuf= 
IMB_loadiffname(path, flags);
+                               }
+                       }
+
+                       // if all else fails use a default image
+                       if (!(brush->icon_imbuf)) {
+                               if (!icon_imbuf[default_icon])
+                                       icon_imbuf[default_icon]= 
IMB_ibImageFromMemory(icon_data[default_icon], icon_size[default_icon], flags);
+
+                               brush->icon_imbuf= icon_imbuf[default_icon];
+                       }
                }
+               else {
+                       if (!icon_imbuf[brush->icon])
+                               icon_imbuf[brush->icon]= 
IMB_ibImageFromMemory(icon_data[brush->icon], icon_size[brush->icon], flags);
 
-               // remove user count so image isn't saved on exit
-               if (brush->image_icon)
-                       id_us_min((ID*)(brush->image_icon));
+                       brush->icon_imbuf= icon_imbuf[brush->icon];
+               }
+
+               BKE_icon_changed(BKE_icon_getid(&(brush->id)));
        }
 
-       return brush->image_icon;
+       if (!(brush->icon_imbuf))
+               printf("get_brush_icon: unable to resolve brush icon imbuf\n");
+
+       return brush->icon_imbuf;
 }
 
 /* Library Operations */

Modified: trunk/blender/source/blender/blenkernel/intern/icons.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/icons.c      2010-07-20 
11:18:29 UTC (rev 30530)
+++ trunk/blender/source/blender/blenkernel/intern/icons.c      2010-07-20 
11:32:30 UTC (rev 30531)
@@ -177,6 +177,9 @@
        } 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*)br;
+               BKE_previewimg_free(&br->preview);
        }
 }
 
@@ -204,6 +207,10 @@
                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->preview) br->preview = BKE_previewimg_create();
+               prv_img = br->preview;
        }
 
        return prv_img;

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2010-07-20 
11:18:29 UTC (rev 30530)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2010-07-20 
11:32:30 UTC (rev 30531)
@@ -1541,9 +1541,8 @@
                        brush->mtex.tex= newlibadr_us(fd, brush->id.lib, 
brush->mtex.tex);
                        brush->clone.image= newlibadr_us(fd, brush->id.lib, 
brush->clone.image);
 
-                       // Image icons not saved if only used as an icon,
-                       // but if it used elsewhere in the file it will have 
been saved
-                       brush->image_icon= newlibadr_us(fd, brush->id.lib, 
brush->image_icon);
+                       brush->preview=0;
+                       brush->icon_imbuf=0;
                }
        }
 }
@@ -10984,10 +10983,6 @@
                for (brush= main->brush.first; brush; brush= brush->id.next) {
                        /* Sanity Check */
 
-                       // brush icon loaded but not the path
-                       //if (brush->image_icon && !(brush->image_icon_path[0]))
-                       //      BLI_strncpy(brush->image_icon_path, 
brush->image_icon->name, sizeof(brush->image_icon_path));
-
                        // infinite number of dabs
                        if (brush->spacing == 0)
                                brush->spacing = 10;

Added: trunk/blender/source/blender/editors/datafiles/blob.png.c
===================================================================
--- trunk/blender/source/blender/editors/datafiles/blob.png.c                   
        (rev 0)
+++ trunk/blender/source/blender/editors/datafiles/blob.png.c   2010-07-20 
11:32:30 UTC (rev 30531)
@@ -0,0 +1,341 @@
+/* DataToC output of file <blob_png> */
+
+int datatoc_blob_png_size= 10703;
+char datatoc_blob_png[]= {
+137, 80, 78, 71, 13, 10, 26, 10,  0,  0,  0, 13, 73, 72, 68,
+ 82,  0,  0,  0, 96,  0,  0,  0, 96,  8,  2,  0,  0,  1, 26,253,208,249,  0,  
0,  0,  4,103, 65, 77, 65,  0,  0,177,143, 11,252,
+ 97,  5,  0,  0,  0,  6, 98, 75, 71, 68,  0,  0,  0,  0,  0,  0,249, 
67,187,127,  0,  0,  0,  9,112, 72, 89,115,  0,  0, 13,215,
+  0,  0, 13,215,  1, 66, 40,155,120,  0,  0,  0,  7,116, 73, 77, 69,  7,218,  
7, 20,  5, 32, 44,179,189,  3,155,  0,  0, 32,  0,
+ 73, 68, 65, 84,120,218,237,125,121,152,101, 87, 85,239, 
90,251,156,123,111,221,174,121,234,185,134,158,170,186,186,122,202, 64,
+ 63, 50,116, 39,129,  4, 18,201,128, 33,  6,  8,248, 16,240,  1, 65,  
1,101,242,227,201,167, 79, 68, 69,248,228, 41, 40,  2, 15,
+ 21,103,209, 39,  2, 79,145, 48, 42, 36, 16, 50, 66, 72, 39,157, 
30,211,115,117,141,119, 58,227,222,123,173,247,199,222,251,156,

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to