[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