diff options
author | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-04-23 12:30:28 +0400 |
---|---|---|
committer | Lukas Toenne <lukas.toenne@googlemail.com> | 2011-04-23 12:30:28 +0400 |
commit | f69825e8e87dbb57f620c551f9fd4ff18a4585c6 (patch) | |
tree | 57f8dcb994f8f7672f74177d9fb6f0ca22e210be | |
parent | 176e45f88ec1b6e4068c4ed11a3f3821a0d7d794 (diff) |
Color info in node editor backdrop now supports color management.
-rw-r--r-- | source/blender/editors/space_image/image_draw.c | 45 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_intern.h | 2 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_ops.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 43 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_edit.c | 5 | ||||
-rw-r--r-- | source/blender/editors/space_node/node_intern.h | 2 |
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); |