Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorLukas Toenne <lukas.toenne@googlemail.com>2011-04-23 12:30:28 +0400
committerLukas Toenne <lukas.toenne@googlemail.com>2011-04-23 12:30:28 +0400
commitf69825e8e87dbb57f620c551f9fd4ff18a4585c6 (patch)
tree57f8dcb994f8f7672f74177d9fb6f0ca22e210be /source
parent176e45f88ec1b6e4068c4ed11a3f3821a0d7d794 (diff)
Color info in node editor backdrop now supports color management.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_image/image_draw.c45
-rw-r--r--source/blender/editors/space_image/image_intern.h2
-rw-r--r--source/blender/editors/space_image/image_ops.c3
-rw-r--r--source/blender/editors/space_node/drawnode.c43
-rw-r--r--source/blender/editors/space_node/node_edit.c5
-rw-r--r--source/blender/editors/space_node/node_intern.h2
6 files changed, 68 insertions, 32 deletions
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 85d36ea9b29..b866a21d027 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -45,7 +45,7 @@
#include "PIL_time.h"
-#include "BLI_math_color.h"
+#include "BLI_math.h"
#include "BLI_threads.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
@@ -133,7 +133,7 @@ static void draw_render_info(Scene *scene, Image *ima, ARegion *ar)
BKE_image_release_renderresult(scene, ima);
}
-void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf)
+void draw_image_info(ARegion *ar, int color_manage, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf)
{
char str[256];
float dx= 6;
@@ -149,6 +149,7 @@ void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *f
unsigned char blue[3] = {255, 255, 255};
#endif
float hue=0, sat=0, val=0, lum=0, u=0, v=0;
+ float col[4], finalcol[4];
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
@@ -230,31 +231,47 @@ void draw_image_info(ARegion *ar, int channels, int x, int y, char *cp, float *f
}
}
- glDisable(GL_BLEND);
+ /* color rectangle */
if (channels==1) {
if (fp)
- glColor3f(fp[0], fp[0], fp[0]);
+ col[0] = col[1] = col[2] = fp[0];
else if (cp)
- glColor3ub(cp[0], cp[0], cp[0]);
+ col[0] = col[1] = col[2] = (float)cp[0]/255.0f;
else
- glColor3ub(0, 0, 0);
+ col[0] = col[1] = col[2] = 0.0f;
}
else if (channels==3) {
if (fp)
- glColor3fv(fp);
- else if (cp)
- glColor3ub(cp[0], cp[1], cp[2]);
+ copy_v3_v3(col, fp);
+ else if (cp) {
+ col[0] = (float)cp[0]/255.0f;
+ col[1] = (float)cp[1]/255.0f;
+ col[2] = (float)cp[2]/255.0f;
+ }
else
- glColor3ub(0, 0, 0);
+ zero_v3(col);
}
else if (channels==4) {
if (fp)
- glColor4fv(fp);
- else if (cp)
- glColor4ub(cp[0], cp[1], cp[2], cp[3]);
+ copy_v4_v4(col, fp);
+ else if (cp) {
+ col[0] = (float)cp[0]/255.0f;
+ col[1] = (float)cp[1]/255.0f;
+ col[2] = (float)cp[2]/255.0f;
+ col[3] = (float)cp[3]/255.0f;
+ }
else
- glColor3ub(0, 0, 0);
+ zero_v4(col);
+ }
+ if (color_manage) {
+ linearrgb_to_srgb_v3_v3(finalcol, col);
+ finalcol[3] = col[3];
}
+ else {
+ copy_v4_v4(finalcol, col);
+ }
+ glDisable(GL_BLEND);
+ glColor3fv(finalcol);
dx += 5;
glBegin(GL_QUADS);
glVertex2f(dx, 3);
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index 5857e62e78a..e9e77ddf430 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -60,7 +60,7 @@ void IMAGE_OT_toolbox(struct wmOperatorType *ot);
/* image_draw.c */
void draw_image_main(struct SpaceImage *sima, struct ARegion *ar, struct Scene *scene);
-void draw_image_info(struct ARegion *ar, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf);
+void draw_image_info(struct ARegion *ar, int color_manage, int channels, int x, int y, char *cp, float *fp, int *zp, float *zpf);
void draw_image_grease_pencil(struct bContext *C, short onlyv2d);
/* image_ops.c */
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 61c999f51ab..ab435395d62 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1632,7 +1632,8 @@ static void sample_draw(const bContext *UNUSED(C), ARegion *ar, void *arg_info)
{
ImageSampleInfo *info= arg_info;
if(info->draw) {
- draw_image_info(ar, info->channels, info->x, info->y, info->colp, info->colfp, info->zp, info->zfp);
+ /* no color management needed for images (color_manage=0) */
+ draw_image_info(ar, 0, info->channels, info->x, info->y, info->colp, info->colfp, info->zp, info->zfp);
}
}
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index db9a052fdbd..68b9170b837 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -1442,7 +1442,7 @@ void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage)
}
}
-void draw_nodespace_color_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp)
+void draw_nodespace_color_info(ARegion *ar, int color_manage, int channels, int x, int y, char *cp, float *fp)
{
char str[256];
float dx= 6;
@@ -1458,6 +1458,7 @@ void draw_nodespace_color_info(ARegion *ar, int channels, int x, int y, char *cp
unsigned char blue[3] = {255, 255, 255};
#endif
float hue=0, sat=0, val=0, lum=0, u=0, v=0;
+ float col[4], finalcol[4];
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
@@ -1541,31 +1542,47 @@ void draw_nodespace_color_info(ARegion *ar, int channels, int x, int y, char *cp
}
}
- glDisable(GL_BLEND);
+ /* color rectangle */
if (channels==1) {
if (fp)
- glColor3f(fp[0], fp[0], fp[0]);
+ col[0] = col[1] = col[2] = fp[0];
else if (cp)
- glColor3ub(cp[0], cp[0], cp[0]);
+ col[0] = col[1] = col[2] = (float)cp[0]/255.0f;
else
- glColor3ub(0, 0, 0);
+ col[0] = col[1] = col[2] = 0.0f;
}
else if (channels==3) {
if (fp)
- glColor3fv(fp);
- else if (cp)
- glColor3ub(cp[0], cp[1], cp[2]);
+ copy_v3_v3(col, fp);
+ else if (cp) {
+ col[0] = (float)cp[0]/255.0f;
+ col[1] = (float)cp[1]/255.0f;
+ col[2] = (float)cp[2]/255.0f;
+ }
else
- glColor3ub(0, 0, 0);
+ zero_v3(col);
}
else if (channels==4) {
if (fp)
- glColor4fv(fp);
- else if (cp)
- glColor4ub(cp[0], cp[1], cp[2], cp[3]);
+ copy_v4_v4(col, fp);
+ else if (cp) {
+ col[0] = (float)cp[0]/255.0f;
+ col[1] = (float)cp[1]/255.0f;
+ col[2] = (float)cp[2]/255.0f;
+ col[3] = (float)cp[3]/255.0f;
+ }
else
- glColor3ub(0, 0, 0);
+ zero_v4(col);
+ }
+ if (color_manage) {
+ linearrgb_to_srgb_v3_v3(finalcol, col);
+ finalcol[3] = col[3];
}
+ else {
+ copy_v4_v4(finalcol, col);
+ }
+ glDisable(GL_BLEND);
+ glColor3fv(finalcol);
dx += 5;
glBegin(GL_QUADS);
glVertex2f(dx, 3);
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index ed70e2b05f1..22bbd93de00 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -1142,11 +1142,12 @@ typedef struct ImageSampleInfo {
int draw;
} ImageSampleInfo;
-static void sample_draw(const bContext *UNUSED(C), ARegion *ar, void *arg_info)
+static void sample_draw(const bContext *C, ARegion *ar, void *arg_info)
{
ImageSampleInfo *info= arg_info;
- draw_nodespace_color_info(ar, info->channels, info->x, info->y, info->col, info->colf);
+ draw_nodespace_color_info(ar, (CTX_data_scene(C)->r.color_mgt_flag & R_COLOR_MANAGEMENT), info->channels,
+ info->x, info->y, info->col, info->colf);
}
static void sample_apply(bContext *C, wmOperator *op, wmEvent *event)
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index 205cf099776..fc1b579d1e1 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -90,7 +90,7 @@ void node_draw_link(View2D *v2d, SpaceNode *snode, bNodeLink *link);
void node_draw_link_bezier(View2D *v2d, SpaceNode *snode, bNodeLink *link, int th_col1, int do_shaded, int th_col2, int do_triple, int th_col3 );
int node_link_bezier_points(View2D *v2d, SpaceNode *snode, bNodeLink *link, float coord_array[][2], int resol);
void draw_nodespace_back_pix(ARegion *ar, SpaceNode *snode, int color_manage);
-void draw_nodespace_color_info(ARegion *ar, int channels, int x, int y, char *cp, float *fp);
+void draw_nodespace_color_info(struct ARegion *ar, int color_manage, int channels, int x, int y, char *cp, float *fp);
/* node_edit.c */
void node_tree_from_ID(ID *id, bNodeTree **ntree, bNodeTree **edittree, int *treetype);