Revision: 47938
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47938
Author: campbellbarton
Date: 2012-06-15 08:33:33 +0000 (Fri, 15 Jun 2012)
Log Message:
-----------
fix for own mistake - sampling was adjusting alpha when it shouldn't, also make
spacebar reset the accumulated color while eyedropping.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_ops.c
Modified: trunk/blender/source/blender/editors/interface/interface_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_ops.c
2012-06-15 08:26:49 UTC (rev 47937)
+++ trunk/blender/source/blender/editors/interface/interface_ops.c
2012-06-15 08:33:33 UTC (rev 47938)
@@ -77,7 +77,7 @@
int index;
int accum_start; /* has mouse been presed */
- float accum_col[4];
+ float accum_col[3];
int accum_tot;
} Eyedropper;
@@ -122,55 +122,58 @@
}
/* *** eyedropper_color_ helper functions *** */
-static void eyedropper_color_sample_fl(Eyedropper *UNUSED(eye), int mx, int my,
- float r_col[4])
+
+/* simply get the color from the screen */
+static void eyedropper_color_sample_fl(Eyedropper *UNUSED(eye), int mx, int
my, float r_col[3])
{
glReadBuffer(GL_FRONT);
glReadPixels(mx, my, 1, 1, GL_RGB, GL_FLOAT, r_col);
glReadBuffer(GL_BACK);
}
-static void eyedropper_color_set(bContext *C, Eyedropper *eye, const float
col[4])
+/* sets the sample color RGB, maintaining A */
+static void eyedropper_color_set(bContext *C, Eyedropper *eye, const float
col[3])
{
- float col_linear[4];
+ float col_conv[4];
+
+ /* to maintain alpha */
+ RNA_property_float_get_array(&eye->ptr, eye->prop, col_conv);
+
/* convert from screen (srgb) space to linear rgb space */
if (eye->do_color_management) {
- srgb_to_linearrgb_v3_v3(col_linear, col);
+ srgb_to_linearrgb_v3_v3(col_conv, col);
}
else {
- copy_v3_v3(col_linear, col);
+ copy_v3_v3(col_conv, col);
}
- col_linear[3] = col[3];
- RNA_property_float_set_array(&eye->ptr, eye->prop, col_linear);
+ RNA_property_float_set_array(&eye->ptr, eye->prop, col_conv);
RNA_property_update(C, &eye->ptr, eye->prop);
}
+/* set sample from accumulated values */
static void eyedropper_color_set_accum(bContext *C, Eyedropper *eye)
{
float col[4];
- mul_v4_v4fl(col, eye->accum_col, 1.0f / (float)eye->accum_tot);
+ mul_v3_v3fl(col, eye->accum_col, 1.0f / (float)eye->accum_tot);
eyedropper_color_set(C, eye, col);
}
+/* single point sample & set */
static void eyedropper_color_sample(bContext *C, Eyedropper *eye, int mx, int
my)
{
- float col[4];
-
- RNA_property_float_get_array(&eye->ptr, eye->prop, col);
-
+ float col[3];
eyedropper_color_sample_fl(eye, mx, my, col);
-
eyedropper_color_set(C, eye, col);
}
static void eyedropper_color_sample_accum(Eyedropper *eye, int mx, int my)
{
- float col[4];
+ float col[3];
eyedropper_color_sample_fl(eye, mx, my, col);
/* delay linear conversion */
- add_v4_v4(eye->accum_col, col);
+ add_v3_v3(eye->accum_col, col);
eye->accum_tot++;
}
@@ -207,6 +210,14 @@
eyedropper_color_set_accum(C, eye);
}
break;
+ case SPACEKEY:
+ if (event->val == KM_RELEASE) {
+ eye->accum_tot = 0;
+ zero_v3(eye->accum_col);
+ eyedropper_color_sample_accum(eye, event->x,
event->y);
+ eyedropper_color_set_accum(C, eye);
+ }
+ break;
}
return OPERATOR_RUNNING_MODAL;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs