[Bf-blender-cvs] [acd076a] asset-experiments: Merge branch 'master' into asset-experiments
Bastien Montagne
noreply at git.blender.org
Mon May 11 17:10:11 CEST 2015
Commit: acd076a9f341f83fb0a3b88372416b349bbff37f
Author: Bastien Montagne
Date: Mon May 11 17:05:01 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rBacd076a9f341f83fb0a3b88372416b349bbff37f
Merge branch 'master' into asset-experiments
Conflicts:
source/blender/blenkernel/BKE_icons.h
source/blender/blenkernel/intern/icons.c
source/blender/editors/include/UI_interface_icons.h
source/blender/editors/interface/interface_icons.c
source/blender/makesrna/intern/rna_ID.c
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/icons.c
index 44de962,450c138..c09a785
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@@ -193,43 -217,27 +220,30 @@@ PreviewImage *BKE_previewimg_copy(Previ
return prv_img;
}
- void BKE_previewimg_free_id(ID *id)
+ PreviewImage **BKE_previewimg_id_get_p(ID *id)
{
- if (GS(id->name) == ID_MA) {
- Material *mat = (Material *)id;
- BKE_previewimg_free(&mat->preview);
- }
- else if (GS(id->name) == ID_TE) {
- Tex *tex = (Tex *)id;
- BKE_previewimg_free(&tex->preview);
- }
- else if (GS(id->name) == ID_WO) {
- World *wo = (World *)id;
- BKE_previewimg_free(&wo->preview);
- }
- else if (GS(id->name) == ID_LA) {
- Lamp *la = (Lamp *)id;
- BKE_previewimg_free(&la->preview);
- }
- 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;
- BKE_previewimg_free(&br->preview);
- }
- else if (GS(id->name) == ID_OB) {
- Object *ob = (Object *)id;
- BKE_previewimg_free(&ob->preview);
+ switch (GS(id->name)) {
+ #define ID_PRV_CASE(id_code, id_struct) case id_code: { return &((id_struct *)id)->preview; }
+ ID_PRV_CASE(ID_MA, Material);
+ ID_PRV_CASE(ID_TE, Tex);
+ ID_PRV_CASE(ID_WO, World);
+ ID_PRV_CASE(ID_LA, Lamp);
+ ID_PRV_CASE(ID_IM, Image);
+ ID_PRV_CASE(ID_BR, Brush);
++ ID_PRV_CASE(ID_OB, Object);
++ ID_PRV_CASE(ID_GR, Group);
++ ID_PRV_CASE(ID_SCE, Scene);
+ #undef ID_PRV_CASE
}
- else if (GS(id->name) == ID_GR) {
- Group *group = (Group *)id;
- BKE_previewimg_free(&group->preview);
- }
- else if (GS(id->name) == ID_SCE) {
- Scene *scene = (Scene *)id;
- BKE_previewimg_free(&scene->preview);
+
+ return NULL;
+ }
+
+ void BKE_previewimg_id_free(ID *id)
+ {
+ PreviewImage **prv_p = BKE_previewimg_id_get_p(id);
+ if (prv_p) {
+ BKE_previewimg_free(prv_p);
}
}
diff --cc source/blender/editors/interface/interface_icons.c
index 0398084,7c05d5f..0f33ab3
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@@ -901,13 -902,16 +902,16 @@@ void UI_icons_init(int first_dyn_id
/* Render size for preview images and icons
*/
-static int preview_render_size(enum eIconSizes size)
+int UI_preview_render_size(enum eIconSizes size)
{
switch (size) {
- case ICON_SIZE_ICON: return ICON_RENDER_DEFAULT_HEIGHT;
- case ICON_SIZE_PREVIEW: return PREVIEW_RENDER_DEFAULT_HEIGHT;
+ case ICON_SIZE_ICON:
+ return ICON_RENDER_DEFAULT_HEIGHT;
+ case ICON_SIZE_PREVIEW:
+ return PREVIEW_RENDER_DEFAULT_HEIGHT;
+ default:
+ return 0;
}
- return 0;
}
/* Create rect for the icon
diff --cc source/blender/makesrna/intern/rna_ID.c
index 69d6223,b87b455..c2e3d7f
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@@ -480,85 -499,92 +499,101 @@@ static void rna_ImagePreview_pixels_get
memcpy(values, prv_img->rect[size], prv_img->w[size] * prv_img->h[size] * sizeof(unsigned int));
}
- static void rna_Preview_pixels_set(PointerRNA *ptr, const int *values, enum eIconSizes size)
+ static void rna_ImagePreview_pixels_set(PointerRNA *ptr, const int *values, enum eIconSizes size)
{
- ID *id = (ID *)ptr->id.data;
+ ID *id = ptr->id.data;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
- BLI_assert(prv_img == BKE_previewimg_get(id));
- UNUSED_VARS_NDEBUG(id);
+ if (id != NULL) {
+ BLI_assert(prv_img == BKE_previewimg_id_ensure(id));
+ }
memcpy(prv_img->rect[size], values, prv_img->w[size] * prv_img->h[size] * sizeof(unsigned int));
- prv_img->user_edited[size] = true;
+ prv_img->flag[size] |= PRV_USER_EDITED;
+ }
+
+ static void rna_ImagePreview_is_image_custom_set(PointerRNA *ptr, int value)
+ {
+ rna_ImagePreview_is_custom_set(ptr, value, ICON_SIZE_PREVIEW);
+ }
+
+ static void rna_ImagePreview_image_size_get(PointerRNA *ptr, int *values)
+ {
+ rna_ImagePreview_size_get(ptr, values, ICON_SIZE_PREVIEW);
}
- static void rna_Preview_image_is_custom_set(PointerRNA *ptr, int value) {
- rna_Preview_is_custom_set(ptr, value, ICON_SIZE_PREVIEW);
+ static void rna_ImagePreview_image_size_set(PointerRNA *ptr, const int *values)
+ {
+ rna_ImagePreview_size_set(ptr, values, ICON_SIZE_PREVIEW);
}
- static void rna_Preview_image_size_get(PointerRNA *ptr, int *values)
+ static int rna_ImagePreview_image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- rna_Preview_size_get(ptr, values, ICON_SIZE_PREVIEW);
+ return rna_ImagePreview_pixels_get_length(ptr, length, ICON_SIZE_PREVIEW);
}
- static void rna_Preview_image_size_set(PointerRNA *ptr, const int *values)
+ static void rna_ImagePreview_image_pixels_get(PointerRNA *ptr, int *values)
{
- rna_Preview_size_set(ptr, values, ICON_SIZE_PREVIEW);
+ rna_ImagePreview_pixels_get(ptr, values, ICON_SIZE_PREVIEW);
}
- static int rna_Preview_image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
+ static void rna_ImagePreview_image_pixels_set(PointerRNA *ptr, const int *values)
{
- return rna_Preview_pixels_get_length(ptr, length, ICON_SIZE_PREVIEW);
+ rna_ImagePreview_pixels_set(ptr, values, ICON_SIZE_PREVIEW);
}
- static void rna_Preview_image_pixels_get(PointerRNA *ptr, int *values)
+ static void rna_ImagePreview_is_icon_custom_set(PointerRNA *ptr, int value)
{
- rna_Preview_pixels_get(ptr, values, ICON_SIZE_PREVIEW);
+ rna_ImagePreview_is_custom_set(ptr, value, ICON_SIZE_ICON);
}
- static void rna_Preview_image_pixels_set(PointerRNA *ptr, const int *values)
+ static void rna_ImagePreview_icon_size_get(PointerRNA *ptr, int *values)
{
- rna_Preview_pixels_set(ptr, values, ICON_SIZE_PREVIEW);
+ rna_ImagePreview_size_get(ptr, values, ICON_SIZE_ICON);
}
- static void rna_Preview_icon_is_custom_set(PointerRNA *ptr, int value)
+ static void rna_ImagePreview_icon_size_set(PointerRNA *ptr, const int *values)
{
- rna_Preview_is_custom_set(ptr, value, ICON_SIZE_ICON);
+ rna_ImagePreview_size_set(ptr, values, ICON_SIZE_ICON);
}
- static void rna_Preview_icon_size_get(PointerRNA *ptr, int *values)
+ static int rna_ImagePreview_icon_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- rna_Preview_size_get(ptr, values, ICON_SIZE_ICON);
+ return rna_ImagePreview_pixels_get_length(ptr, length, ICON_SIZE_ICON);
}
- static void rna_Preview_icon_size_set(PointerRNA *ptr, const int *values)
+ static void rna_ImagePreview_icon_pixels_get(PointerRNA *ptr, int *values)
{
- rna_Preview_size_set(ptr, values, ICON_SIZE_ICON);
+ rna_ImagePreview_pixels_get(ptr, values, ICON_SIZE_ICON);
}
- static int rna_Preview_icon_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
+ static void rna_ImagePreview_icon_pixels_set(PointerRNA *ptr, const int *values)
{
- return rna_Preview_pixels_get_length(ptr, length, ICON_SIZE_ICON);
+ rna_ImagePreview_pixels_set(ptr, values, ICON_SIZE_ICON);
}
- static void rna_Preview_icon_pixels_get(PointerRNA *ptr, int *values)
+ static int rna_ImagePreview_icon_id_get(PointerRNA *ptr)
{
- rna_Preview_pixels_get(ptr, values, ICON_SIZE_ICON);
+ /* Using a callback here allows us to only generate icon matching that preview when icon_id is requested. */
+ return BKE_icon_preview_ensure((PreviewImage *)(ptr->data));
}
+
- static void rna_Preview_icon_pixels_set(PointerRNA *ptr, const int *values)
+ static void rna_ImagePreview_icon_reload(PreviewImage *prv)
{
- rna_Preview_pixels_set(ptr, values, ICON_SIZE_ICON);
+ /* will lazy load on next use, but only in case icon is not user-modified! */
+ if (!(prv->flag[ICON_SIZE_ICON] & PRV_USER_EDITED) && !(prv->flag[ICON_SIZE_PREVIEW] & PRV_USER_EDITED)) {
+ BKE_previewimg_clear(prv);
+ }
}
+static PointerRNA rna_IDPreview_get(PointerRNA *ptr)
+{
+ ID *id = (ID *)ptr->data;
- PreviewImage *prv_img = BKE_previewimg_get(id);
++ PreviewImage *prv_img = BKE_previewimg_id_ensure(id);
+
- return rna_pointer_inherit_refine(ptr, &RNA_Preview, prv_img);
++ return rna_pointer_inherit_refine(ptr, &RNA_ImagePreview, prv_img);
+}
+
#else
static void rna_def_ID_properties(BlenderRNA *brna)
@@@ -788,11 -825,6 +834,11 @@@ static void rna_def_ID(BlenderRNA *brna
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "Library", "Library file the datablock is linked from");
- prop = RNA_def_pointer(srna, "preview", "Preview", "Preview",
++ prop = RNA_def_pointer(srna, "preview", "ImagePreview", "Preview",
+ "Preview image and icon of this datablock (None if not supported for this type of data)");
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, "rna_IDPreview_get", NULL, NULL, NULL);
+
/* functions */
func = RNA_def_function(srna, "copy", "rna_ID_copy");
RNA_def_function_ui_description(func, "Create a copy of this datablock (not supported for all datablocks)");
diff --cc source/blender/windowmanager/intern/wm_operators.c
index b1c002f,07d0bd0..5239b73
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@@ -4925,78 -4833,6 +4925,72 @@@ static void WM_OT_previews_ensure(wmOpe
ot->exec = previews_ensure_exec;
}
+/* *************************** Datablocks previews clear ************* */
+
+/* Only types supporting previews currently. */
+static EnumPropertyItem preview_id_type_items[] = {
+ {FILTER_ID_SCE, "SCENE", 0, "Scenes", ""},
+ {FILTER_ID_GR, "GROUP", 0, "Groups", ""},
+ {FILTER_ID_OB, "OBJECT", 0, "Objects", ""},
+ {FILTER_ID_MA, "MATERIAL", 0, "Materials", ""},
+ {FILTER_ID_LA, "LAMP", 0, "Lamps", ""},
+ {FILTER_ID_WO, "WORLD", 0, "Worlds", ""},
+ {FILTER_ID_TE, "TEXTURE", 0, "Textures", ""},
+ {FILTER_ID_IM, "IMAGE", 0, "Images", ""},
+#if 0 /* XXX TODO */
+ {FILTER_ID_BR, "BRUSH", 0, "Brushes", ""},
+#endif
+ {0, NULL, 0, NULL, NULL}
+};
+
+static int previews_clear_exec(bContext *C, wmOperator *op)
+{
+ Main *bmain = CTX_dat
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list