[Bf-blender-cvs] [ec364df] ui-preview-buttons: minor tweaks/rename API calls

Campbell Barton noreply at git.blender.org
Mon May 11 04:50:48 CEST 2015


Commit: ec364df6d4e8d40f049b6b5b12e2542378392dcd
Author: Campbell Barton
Date:   Mon May 11 12:49:03 2015 +1000
Branches: ui-preview-buttons
https://developer.blender.org/rBec364df6d4e8d40f049b6b5b12e2542378392dcd

minor tweaks/rename API calls

===================================================================

M	source/blender/blenkernel/BKE_icons.h
M	source/blender/blenkernel/intern/icons.c
M	source/blender/makesrna/intern/rna_ID.c
M	source/blender/python/intern/bpy_app_previews.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h
index 729406d..9dc0d2d 100644
--- a/source/blender/blenkernel/BKE_icons.h
+++ b/source/blender/blenkernel/BKE_icons.h
@@ -82,7 +82,10 @@ void BKE_previewimg_freefunc(void *link);
 void BKE_previewimg_free(struct PreviewImage **prv);
 
 /* clear the preview image or icon, but does not free it */
-void BKE_previewimg_clear(struct PreviewImage *prv, enum eIconSizes size);
+void BKE_previewimg_clear(struct PreviewImage *prv);
+
+/* clear the preview image or icon at a specific size */
+void BKE_previewimg_clear_single(struct PreviewImage *prv, enum eIconSizes size);
 
 /* free the preview image belonging to the id */
 void BKE_previewimg_id_free(struct ID *id);
@@ -100,7 +103,9 @@ void BKE_previewimg_ensure(struct PreviewImage *prv, const int size);
 
 struct PreviewImage *BKE_previewimg_cached_get(const char *name);
 
-struct PreviewImage *BKE_previewimg_cached_thumbnail_get(
+struct PreviewImage *BKE_previewimg_cached_ensure(const char *name);
+
+struct PreviewImage *BKE_previewimg_cached_thumbnail_read(
         const char *name, const char *path, const int source, bool force_update);
 
 void BKE_previewimg_cached_release(const char *name);
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index 9971afe..3110470 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -164,7 +164,6 @@ void BKE_previewimg_freefunc(void *link)
 		for (i = 0; i < NUM_ICON_SIZES; ++i) {
 			if (prv->rect[i]) {
 				MEM_freeN(prv->rect[i]);
-				prv->rect[i] = NULL;
 			}
 			if (prv->gputexture[i])
 				GPU_texture_free(prv->gputexture[i]);
@@ -182,12 +181,9 @@ void BKE_previewimg_free(PreviewImage **prv)
 	}
 }
 
-void BKE_previewimg_clear(struct PreviewImage *prv, enum eIconSizes size)
+void BKE_previewimg_clear_single(struct PreviewImage *prv, enum eIconSizes size)
 {
-	if (prv->rect[size]) {
-		MEM_freeN(prv->rect[size]);
-		prv->rect[size] = NULL;
-	}
+	MEM_SAFE_FREE(prv->rect[size]);
 	if (prv->gputexture[size]) {
 		GPU_texture_free(prv->gputexture[size]);
 	}
@@ -196,6 +192,14 @@ void BKE_previewimg_clear(struct PreviewImage *prv, enum eIconSizes size)
 	prv->changed_timestamp[size] = 0;
 }
 
+void BKE_previewimg_clear(struct PreviewImage *prv)
+{
+	int i;
+	for (i = 0; i < NUM_ICON_SIZES; ++i) {
+		BKE_previewimg_clear_single(prv, i);
+	}
+}
+
 PreviewImage *BKE_previewimg_copy(PreviewImage *prv)
 {
 	PreviewImage *prv_img = NULL;
@@ -279,31 +283,24 @@ PreviewImage *BKE_previewimg_id_get(ID *id)
 	return prv_img;
 }
 
+PreviewImage *BKE_previewimg_cached_get(const char *name)
+{
+	return BLI_ghash_lookup(gCachedPreviews, name);
+}
+
 /**
  * Generate an empty PreviewImage, if not yet existing.
  */
-PreviewImage *BKE_previewimg_cached_get(const char *name)
+PreviewImage *BKE_previewimg_cached_ensure(const char *name)
 {
 	PreviewImage *prv = NULL;
-	void **prv_v;
+	void **prv_p;
 
-	prv_v = BLI_ghash_lookup_p(gCachedPreviews, name);
-
-	if (prv_v) {
-		prv = *prv_v;
-		BLI_assert(prv);
-	}
-
-	if (!prv) {
-		prv = BKE_previewimg_create();
-	}
-
-	if (prv_v) {
-		*prv_v = prv;
-	}
-	else {
-		BLI_ghash_insert(gCachedPreviews, (void *)BLI_strdup(name), prv);
+	if (!BLI_ghash_ensure_p_ex(gCachedPreviews, name, &prv_p, (GHashKeyCopyFP)BLI_strdup)) {
+		*prv_p = BKE_previewimg_create();
 	}
+	prv = *prv_p;
+	BLI_assert(prv);
 
 	return prv;
 }
@@ -311,7 +308,7 @@ PreviewImage *BKE_previewimg_cached_get(const char *name)
 /**
  * Generate a PreviewImage from given file path, using thumbnails management, if not yet existing.
  */
-PreviewImage *BKE_previewimg_cached_thumbnail_get(
+PreviewImage *BKE_previewimg_cached_thumbnail_read(
         const char *name, const char *path, const int source, bool force_update)
 {
 	PreviewImage *prv = NULL;
@@ -328,8 +325,7 @@ PreviewImage *BKE_previewimg_cached_thumbnail_get(
 		const char *prv_deferred_data = PRV_DEFERRED_DATA(prv);
 		if (((int)prv_deferred_data[0] == source) && STREQ(&prv_deferred_data[1], path)) {
 			/* If same path, no need to re-allocate preview, just clear it up. */
-			BKE_previewimg_clear(prv, ICON_SIZE_ICON);
-			BKE_previewimg_clear(prv, ICON_SIZE_PREVIEW);
+			BKE_previewimg_clear(prv);
 		}
 		else {
 			BKE_previewimg_free(&prv);
@@ -354,7 +350,7 @@ PreviewImage *BKE_previewimg_cached_thumbnail_get(
 			*prv_v = prv;
 		}
 		else {
-			BLI_ghash_insert(gCachedPreviews, (void *)BLI_strdup(name), prv);
+			BLI_ghash_insert(gCachedPreviews, BLI_strdup(name), prv);
 		}
 	}
 
@@ -363,7 +359,7 @@ PreviewImage *BKE_previewimg_cached_thumbnail_get(
 
 void BKE_previewimg_cached_release(const char *name)
 {
-	PreviewImage *prv = BLI_ghash_popkey(gCachedPreviews, (void *)name, MEM_freeN);
+	PreviewImage *prv = BLI_ghash_popkey(gCachedPreviews, name, MEM_freeN);
 
 	if (prv) {
 		if (prv->icon_id) {
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 65677c8..cb58313 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -430,7 +430,7 @@ static void rna_Preview_is_custom_set(PointerRNA *ptr, int value, enum eIconSize
 
 	prv_img->flag[size] |= PRV_CHANGED;
 
-	BKE_previewimg_clear(prv_img, size);
+	BKE_previewimg_clear_single(prv_img, size);
 }
 
 static void rna_Preview_size_get(PointerRNA *ptr, int *values, enum eIconSizes size)
diff --git a/source/blender/python/intern/bpy_app_previews.c b/source/blender/python/intern/bpy_app_previews.c
index f0803dd..a1d85f4 100644
--- a/source/blender/python/intern/bpy_app_previews.c
+++ b/source/blender/python/intern/bpy_app_previews.c
@@ -77,7 +77,7 @@ static PyObject *app_previews_meth_new(PyObject *UNUSED(self), PyObject *args, P
 		return NULL;
 	}
 
-	prv = BKE_previewimg_cached_get(name);
+	prv = BKE_previewimg_cached_ensure(name);
 	RNA_pointer_create(NULL, &RNA_ImagePreview, prv, &ptr);
 
 	return pyrna_struct_CreatePyObject(&ptr);
@@ -134,7 +134,7 @@ static PyObject *app_previews_meth_load(PyObject *UNUSED(self), PyObject *args,
 		return NULL;
 	}
 
-	prv = BKE_previewimg_cached_thumbnail_get(name, path, path_type, force_reload);
+	prv = BKE_previewimg_cached_thumbnail_read(name, path, path_type, force_reload);
 	RNA_pointer_create(NULL, &RNA_ImagePreview, prv, &ptr);
 
 	return pyrna_struct_CreatePyObject(&ptr);




More information about the Bf-blender-cvs mailing list