[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29715] trunk/blender/source/blender: alpha drawing for color picker, move alpha button into the picker.

Campbell Barton ideasman42 at gmail.com
Sat Jun 26 19:12:55 CEST 2010


Revision: 29715
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29715
Author:   campbellbarton
Date:     2010-06-26 19:12:55 +0200 (Sat, 26 Jun 2010)

Log Message:
-----------
alpha drawing for color picker, move alpha button into the picker.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_layout.c
    trunk/blender/source/blender/editors/interface/interface_regions.c
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c
    trunk/blender/source/blender/makesdna/DNA_userdef_types.h

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2010-06-26 17:06:55 UTC (rev 29714)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2010-06-26 17:12:55 UTC (rev 29715)
@@ -431,11 +431,6 @@
 					but->type= TOG;
 			}
 		}
-		else if(ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) && len == 4) {
-			but= uiDefAutoButR(block, ptr, prop, 3, "A:", 0, 0, 0, w, UI_UNIT_Y);
-			if(slider && but->type==NUM)
-				but->type= NUMSLI;
-		}
 	}
 
 	uiBlockSetCurLayout(block, layout);

Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c	2010-06-26 17:06:55 UTC (rev 29714)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c	2010-06-26 17:12:55 UTC (rev 29715)
@@ -1795,6 +1795,9 @@
 		linearrgb_to_srgb_v3_v3(rgb_gamma, rgb);
 	}
 	
+	/* sneaky way to check for alpha */
+	rgb[3]= FLT_MAX;
+
 	RNA_property_float_ui_range(ptr, prop, &min, &max, &step, &precision);
 	RNA_property_float_get_array(ptr, prop, rgb);
 	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
@@ -1835,6 +1838,7 @@
 	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
 	bt= uiDefButR(block, NUMSLI, 0, "B ",	0, -100, butwidth, UI_UNIT_Y, ptr, propname, 2, 0.0, 0.0, 0, 0, "");
 	uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+
 	// could use uiItemFullR(col, ptr, prop, -1, 0, UI_ITEM_R_EXPAND|UI_ITEM_R_SLIDER, "", 0);
 	// but need to use uiButSetFunc for updating other fake buttons
 	
@@ -1847,7 +1851,15 @@
 	bt= uiDefButF(block, NUMSLI, 0, "V ",	0, -100, butwidth, UI_UNIT_Y, hsv+2, 0.0, max, 10, 3, "");
 	uiButSetFunc(bt, do_hsv_rna_cb, bt, hsv);
 	uiBlockEndAlign(block);
-	
+
+	if(rgb[3] != FLT_MAX) {
+		bt= uiDefButR(block, NUMSLI, 0, "A ",	0, -120, butwidth, UI_UNIT_Y, ptr, propname, 3, 0.0, 0.0, 0, 0, "");
+		uiButSetFunc(bt, do_picker_rna_cb, bt, NULL);
+	}
+	else {
+		rgb[3]= 1.0f;
+	}
+
 	rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
 	
 	sprintf(hexcol, "%02X%02X%02X", (unsigned int)(rgb_gamma[0]*255.0), (unsigned int)(rgb_gamma[1]*255.0), (unsigned int)(rgb_gamma[2]*255.0));	

Modified: trunk/blender/source/blender/editors/interface/interface_templates.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_templates.c	2010-06-26 17:06:55 UTC (rev 29714)
+++ trunk/blender/source/blender/editors/interface/interface_templates.c	2010-06-26 17:12:55 UTC (rev 29715)
@@ -1929,14 +1929,6 @@
 	
 	if (value_slider)
 		uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, "");
-
-	/* maybe a switch for this?
-	row= uiLayoutRow(col, 0);
-	if(ELEM(RNA_property_subtype(prop), PROP_COLOR, PROP_COLOR_GAMMA) && RNA_property_array_length(ptr, prop) == 4) {
-		but= uiDefAutoButR(block, ptr, prop, 3, "A:", 0, 0, 0, WHEEL_SIZE+20, UI_UNIT_Y);
-	}
-	*/
-	
 }
 
 

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-06-26 17:06:55 UTC (rev 29714)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2010-06-26 17:12:55 UTC (rev 29715)
@@ -608,14 +608,67 @@
 	/* backdrop non AA */
 	if(wtb->inner) {
 		if(wcol->shaded==0) {
-			
-			/* filled center, solid */
-			glColor4ubv((unsigned char*)wcol->inner);
-			glBegin(GL_POLYGON);
-			for(a=0; a<wtb->totvert; a++)
-				glVertex2fv(wtb->inner_v[a]);
-			glEnd();
+			if (wcol->alpha_check) {
+				GLubyte checker_stipple_sml[32*32/8] =
+				{
+					255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+					255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+					0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+					0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+					255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+					255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0, \
+					0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+					0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255, \
+				};
 
+				float x_mid= 0.0f; /* used for dumb clamping of values */
+
+				/* dark checkers */
+				glColor4ub(100, 100, 100, 255);
+				glBegin(GL_POLYGON);
+				for(a=0; a<wtb->totvert; a++) {
+					glVertex2fv(wtb->inner_v[a]);
+				}
+				glEnd();
+
+				/* light checkers */
+				glEnable(GL_POLYGON_STIPPLE);
+				glColor4ub(160, 160, 160, 255);
+				glPolygonStipple(checker_stipple_sml);
+				glBegin(GL_POLYGON);
+				for(a=0; a<wtb->totvert; a++) {
+					glVertex2fv(wtb->inner_v[a]);
+				}
+				glEnd();
+				glDisable(GL_POLYGON_STIPPLE);
+
+				/* alpha fill */
+				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+				glColor4ubv((unsigned char*)wcol->inner);
+				glBegin(GL_POLYGON);
+				for(a=0; a<wtb->totvert; a++) {
+					glVertex2fv(wtb->inner_v[a]);
+					x_mid += wtb->inner_v[a][0];
+				}
+				x_mid /= wtb->totvert;
+				glEnd();
+
+				/* 1/2 solid color */
+				glColor4ub(wcol->inner[0], wcol->inner[1], wcol->inner[2], 255);
+				glBegin(GL_POLYGON);
+				for(a=0; a<wtb->totvert; a++)
+					glVertex2f(MIN2(wtb->inner_v[a][0], x_mid), wtb->inner_v[a][1]);
+				glEnd();
+			}
+			else {
+				/* simple fill */
+				glColor4ubv((unsigned char*)wcol->inner);
+				glBegin(GL_POLYGON);
+				for(a=0; a<wtb->totvert; a++)
+					glVertex2fv(wtb->inner_v[a]);
+				glEnd();
+			}
 		}
 		else {
 			char col1[4], col2[4];
@@ -2208,9 +2261,15 @@
 	float col[4];
 	int color_profile = but->block->color_profile;
 	
+	col[3]= 1.0f;
+
 	if (but->rnaprop) {
 		if (RNA_property_subtype(but->rnaprop) == PROP_COLOR_GAMMA)
 			color_profile = BLI_PR_NONE;
+
+		if(RNA_property_array_length(&but->rnapoin, but->rnaprop)==4) {
+			col[3]= RNA_property_float_get_index(&but->rnapoin, but->rnaprop, 3);
+		}
 	}
 	
 	widget_init(&wtb);
@@ -2226,8 +2285,10 @@
 	wcol->inner[0]= FTOCHAR(col[0]);
 	wcol->inner[1]= FTOCHAR(col[1]);
 	wcol->inner[2]= FTOCHAR(col[2]);
+	wcol->inner[3]= FTOCHAR(col[3]);
 	wcol->shaded = 0;
-	
+	wcol->alpha_check = (wcol->inner[3] < 255);
+
 	widgetbase_draw(&wtb, wcol);
 	
 }

Modified: trunk/blender/source/blender/makesdna/DNA_userdef_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2010-06-26 17:06:55 UTC (rev 29714)
+++ trunk/blender/source/blender/makesdna/DNA_userdef_types.h	2010-06-26 17:12:55 UTC (rev 29715)
@@ -119,7 +119,7 @@
 	char text_sel[4];
 	short shaded;
 	short shadetop, shadedown;
-	short pad;
+	short alpha_check;
 } uiWidgetColors;
 
 typedef struct uiWidgetStateColors {





More information about the Bf-blender-cvs mailing list