[Bf-blender-cvs] [2a3e7ee] ui-preview-buttons: ImagePreview: merging changed and user_edited into a single flag

Ines Almeida noreply at git.blender.org
Fri Apr 17 11:17:46 CEST 2015


Commit: 2a3e7ee2641d4f33a707a69850e7ab456af67547
Author: Ines Almeida
Date:   Fri Apr 17 09:57:41 2015 +0100
Branches: ui-preview-buttons
https://developer.blender.org/rB2a3e7ee2641d4f33a707a69850e7ab456af67547

ImagePreview: merging changed and user_edited into a single flag

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

M	source/blender/blenkernel/intern/icons.c
M	source/blender/editors/interface/interface_icons.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/makesrna/intern/rna_ID.c

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

diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c
index dbf2935..dd85565 100644
--- a/source/blender/blenkernel/intern/icons.c
+++ b/source/blender/blenkernel/intern/icons.c
@@ -131,7 +131,7 @@ PreviewImage *BKE_previewimg_create(void)
 	prv_img = MEM_callocN(sizeof(PreviewImage), "img_prv");
 
 	for (i = 0; i < NUM_ICON_SIZES; ++i) {
-		prv_img->changed[i] = 1;
+		prv_img->flag[i] |= CHANGED;
 		prv_img->changed_timestamp[i] = 0;
 	}
 	return prv_img;
@@ -151,7 +151,7 @@ PreviewImage *BKE_previewimg_thumbnail_create(const char *path, int source)
 		prv->w[ICON_SIZE_PREVIEW] = thumb->x;
 		prv->h[ICON_SIZE_PREVIEW] = thumb->y;
 		prv->rect[ICON_SIZE_PREVIEW] = MEM_dupallocN(thumb->rect);
-		prv->changed[ICON_SIZE_PREVIEW] = 0;
+		prv->flag[ICON_SIZE_PREVIEW] &= ~CHANGED;
 
 		if (thumb->x > thumb->y) {
 			icon_w = ICON_RENDER_DEFAULT_HEIGHT;
@@ -169,7 +169,7 @@ PreviewImage *BKE_previewimg_thumbnail_create(const char *path, int source)
 		prv->w[ICON_SIZE_ICON] = icon_w;
 		prv->h[ICON_SIZE_ICON] = icon_h;
 		prv->rect[ICON_SIZE_ICON] = MEM_dupallocN(thumb->rect);
-		prv->changed[ICON_SIZE_ICON] = 0;
+		prv->flag[ICON_SIZE_ICON] &= ~CHANGED;
 
 		IMB_freeImBuf(thumb);
 	}
@@ -213,7 +213,7 @@ void BKE_previewimg_clear(struct PreviewImage *prv, enum eIconSizes size)
 		GPU_texture_free(prv->gputexture[size]);
 	}
 	prv->h[size] = prv->w[size] = 0;
-	prv->changed[size] = true;
+	prv->flag[size] |= CHANGED;
 	prv->changed_timestamp[size] = 0;
 }
 
@@ -318,7 +318,7 @@ void BKE_icon_changed(int id)
 		if (prv) {
 			int i;
 			for (i = 0; i < NUM_ICON_SIZES; ++i) {
-				prv->changed[i] = 1;
+				prv->flag[i] |= CHANGED;
 				prv->changed_timestamp[i]++;
 			}
 		}
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 6a12031..d63df03 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -923,7 +923,7 @@ static void icon_create_rect(struct PreviewImage *prv_img, enum eIconSizes size)
 	else if (!prv_img->rect[size]) {
 		prv_img->w[size] = render_size;
 		prv_img->h[size] = render_size;
-		prv_img->changed[size] = 1;
+		prv_img->flag[size] |= CHANGED;
 		prv_img->changed_timestamp[size] = 0;
 		prv_img->rect[size] = MEM_callocN(render_size * render_size * sizeof(unsigned int), "prv_rect");
 	}
@@ -940,7 +940,7 @@ static void icon_set_image(
 		return;
 	}
 
-	if (prv_img->user_edited[size]) {
+	if (prv_img->flag[size] & USER_EDITED) {
 		/* user-edited preview, do not auto-update! */
 		return;
 	}
@@ -1173,11 +1173,11 @@ static void icon_draw_size(float x, float y, int icon_id, float aspect, float al
 static void ui_id_preview_image_render_size(
         const bContext *C, Scene *scene, ID *id, PreviewImage *pi, int size, const bool use_job)
 {
-	if ((pi->changed[size] || !pi->rect[size])) { /* changed only ever set by dynamic icons */
+	if ((pi->flag[size] & CHANGED || !pi->rect[size])) { /* changed only ever set by dynamic icons */
 		/* create the rect if necessary */
 		icon_set_image(C, scene, id, pi, size, use_job);
 
-		pi->changed[size] = 0;
+		pi->flag[size] &= ~CHANGED;
 	}
 }
 
@@ -1204,9 +1204,9 @@ static void ui_id_brush_render(const bContext *C, ID *id)
 	for (i = 0; i < NUM_ICON_SIZES; i++) {
 		/* check if rect needs to be created; changed
 		 * only set by dynamic icons */
-		if ((pi->changed[i] || !pi->rect[i])) {
+		if ((pi->flag[i] & CHANGED || !pi->rect[i])) {
 			icon_set_image(C, NULL, id, pi, i, true);
-			pi->changed[i] = 0;
+			pi->flag[i] &= ~CHANGED;
 		}
 	}
 }
diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index d7fa961..666ebe8 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -159,14 +159,20 @@ enum eIconSizes {
 };
 #define NUM_ICON_SIZES (ICON_SIZE_PREVIEW + 1)
 
+/* for PreviewImage->flag */
+enum ePreviewImage_Flag {
+	CHANGED          = (1 << 0),
+	USER_EDITED      = (1 << 1),  /* if user-edited, do not auto-update this anymore! */
+};
+
 typedef struct PreviewImage {
 	/* All values of 2 are really NUM_ICON_SIZES */
 	unsigned int w[2];
 	unsigned int h[2];
-	short changed[2];
+	short flag[2];
 	short changed_timestamp[2];
-	short user_edited[2];  /* if user-edited, do not auto-update this anymore! */
 	int icon_id;  /* Used by previews outside of ID context. */
+	int pad;
 	unsigned int *rect[2];
 	struct GPUTexture *gputexture[2];
 } PreviewImage;
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index c8a7796..a101a76 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -417,8 +417,12 @@ static void rna_Preview_is_custom_set(PointerRNA *ptr, int value, enum eIconSize
 	BLI_assert(prv_img == BKE_previewimg_get(id));
 	UNUSED_VARS_NDEBUG(id);
 
-	prv_img->user_edited[size] = (short)value;
-	prv_img->changed[size] = true;
+	if(value)
+		prv_img->flag[size] |= USER_EDITED;
+	else
+		prv_img->flag[size] &= ~USER_EDITED;
+
+	prv_img->flag[size] |= CHANGED;
 
 	BKE_previewimg_clear(prv_img, size);
 }
@@ -452,8 +456,7 @@ static void rna_Preview_size_set(PointerRNA *ptr, const int *values, enum eIconS
 	prv_img->w[size] = values[0];
 	prv_img->h[size] = values[1];
 
-	prv_img->user_edited[size] = true;
-	prv_img->changed[size] = true;
+	prv_img->flag[size] |= (CHANGED | USER_EDITED);
 }
 
 static int rna_Preview_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION], enum eIconSizes size)
@@ -489,7 +492,7 @@ static void rna_Preview_pixels_set(PointerRNA *ptr, const int *values, enum eIco
 	UNUSED_VARS_NDEBUG(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] |= USER_EDITED;
 }
 
 static void rna_Preview_image_is_custom_set(PointerRNA *ptr, int value) {
@@ -679,9 +682,10 @@ static void rna_def_preview(BlenderRNA *brna)
 	RNA_def_struct_ui_text(srna, "Preview", "Preview image and icon");
 
 	prop = RNA_def_property(srna, "image_is_custom", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "user_edited[ICON_SIZE_PREVIEW]", 1);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag[ICON_SIZE_PREVIEW]", USER_EDITED);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Preview_image_is_custom_set");
-	RNA_def_property_ui_text(prop, "Custom Image", "True if this preview image has been modified by py script, and is no more auto-generated by Blender");
+	RNA_def_property_ui_text(prop, "Custom Image", "True if this preview image has been modified by py script,"
+	                         "and is no more auto-generated by Blender");
 
 	prop = RNA_def_int_vector(srna, "image_size", 2, NULL, 0, 0, "Image Size",
 	                          "Width and height in pixels", 0, 0);
@@ -697,9 +701,10 @@ static void rna_def_preview(BlenderRNA *brna)
 
 
 	prop = RNA_def_property(srna, "icon_is_custom", PROP_BOOLEAN, PROP_NONE);
-	RNA_def_property_boolean_sdna(prop, NULL, "user_edited[ICON_SIZE_ICON]", 1);
+	RNA_def_property_boolean_sdna(prop, NULL, "flag[ICON_SIZE_ICON]", USER_EDITED);
 	RNA_def_property_boolean_funcs(prop, NULL, "rna_Preview_icon_is_custom_set");
-	RNA_def_property_ui_text(prop, "Custom Icon", "True if this preview icon has been modified by py script, and is no more auto-generated by Blender");
+	RNA_def_property_ui_text(prop, "Custom Icon", "True if this preview icon has been modified by py script,"
+	                         "and is no more auto-generated by Blender");
 
 	prop = RNA_def_int_vector(srna, "icon_size", 2, NULL, 0, 0, "Icon Size",
 	                          "Width and height in pixels", 0, 0);




More information about the Bf-blender-cvs mailing list