[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27508] trunk/blender/source/blender/ editors/interface/interface_regions.c: Make Hex field in colour picker work in gamma corrected space - means that copying Hex values to
Matt Ebb
matt at mke3.net
Mon Mar 15 03:30:54 CET 2010
Revision: 27508
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27508
Author: broken
Date: 2010-03-15 03:30:53 +0100 (Mon, 15 Mar 2010)
Log Message:
-----------
Make Hex field in colour picker work in gamma corrected space - means that copying Hex values to
and from other apps like Photoshop works as expected.
Modified Paths:
--------------
trunk/blender/source/blender/editors/interface/interface_regions.c
Modified: trunk/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_regions.c 2010-03-15 01:12:41 UTC (rev 27507)
+++ trunk/blender/source/blender/editors/interface/interface_regions.c 2010-03-15 02:30:53 UTC (rev 27508)
@@ -1568,10 +1568,20 @@
}
else if(strcmp(bt->str, "Hex: ")==0) {
+ float rgb_gamma[3];
char col[16];
- sprintf(col, "%02X%02X%02X", (unsigned int)(rgb[0]*255.0), (unsigned int)(rgb[1]*255.0), (unsigned int)(rgb[2]*255.0));
+ /* Hex code is assumed to be in sRGB space (coming from other applications, web, etc) */
+ if (block->color_profile == BLI_PR_NONE) {
+ copy_v3_v3(rgb_gamma, rgb);
+ } else {
+ /* make an sRGB version, for Hex code */
+ linearrgb_to_srgb_v3_v3(rgb_gamma, rgb);
+ }
+
+ sprintf(col, "%02X%02X%02X", (unsigned int)(rgb_gamma[0]*255.0), (unsigned int)(rgb_gamma[1]*255.0), (unsigned int)(rgb_gamma[2]*255.0));
+
strcpy(bt->poin, col);
}
else if(bt->str[1]==' ') {
@@ -1640,6 +1650,12 @@
hex_to_rgb(hexcol, rgb, rgb+1, rgb+2);
+ /* Hex code is assumed to be in sRGB space (coming from other applications, web, etc) */
+ if (but->block->color_profile != BLI_PR_NONE) {
+ /* so we need to linearise it for Blender */
+ srgb_to_linearrgb_v3_v3(rgb, rgb);
+ }
+
ui_update_block_buts_rgb(but->block, rgb);
if(popup)
@@ -1662,6 +1678,13 @@
/* tag buttons */
for(bt= block->buttons.first; bt; bt= bt->next) {
+ if (bt->type == LABEL) {
+ if( bt->str[1]=='G') {
+ if(colormode==2) bt->flag &= ~UI_HIDDEN;
+ else bt->flag |= UI_HIDDEN;
+ }
+ }
+
if(bt->type==NUMSLI || bt->type==TEX) {
if( bt->str[1]=='e') {
if(colormode==2) bt->flag &= ~UI_HIDDEN;
@@ -1735,16 +1758,21 @@
static char tip[50];
static float hsv[3];
static char hexcol[128];
+ float rgb_gamma[3];
const char *propname = RNA_property_identifier(prop);
width= PICKER_TOTAL_W;
butwidth = width - UI_UNIT_X - 10;
/* existence of profile means storage is in linear colour space, with display correction */
- if (block->color_profile == BLI_PR_NONE)
+ if (block->color_profile == BLI_PR_NONE) {
sprintf(tip, "Value in Display Color Space");
- else
+ copy_v3_v3(rgb_gamma, rgb);
+ } else {
sprintf(tip, "Value in Linear RGB Color Space");
+ /* make an sRGB version, for Hex code */
+ linearrgb_to_srgb_v3_v3(rgb_gamma, rgb);
+ }
RNA_property_float_get_array(ptr, prop, rgb);
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
@@ -1799,10 +1827,12 @@
uiBlockEndAlign(block);
rgb_to_hsv(rgb[0], rgb[1], rgb[2], hsv, hsv+1, hsv+2);
- sprintf(hexcol, "%02X%02X%02X", (unsigned int)(rgb[0]*255.0), (unsigned int)(rgb[1]*255.0), (unsigned int)(rgb[2]*255.0));
+
+ 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));
bt= uiDefBut(block, TEX, 0, "Hex: ", 0, -60, butwidth, UI_UNIT_Y, hexcol, 0, 8, 0, 0, "Hex triplet for color (#RRGGBB)");
uiButSetFunc(bt, do_hex_rna_cb, bt, hexcol);
+ uiDefBut(block, LABEL, 0, "(Gamma Corrected)", 0, -80, butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
picker_new_hide_reveal(block, colormode);
}
More information about the Bf-blender-cvs
mailing list