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 /source/blender/editors/space_node | |
parent | 176e45f88ec1b6e4068c4ed11a3f3821a0d7d794 (diff) |
Color info in node editor backdrop now supports color management.
Diffstat (limited to 'source/blender/editors/space_node')
-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 |
3 files changed, 34 insertions, 16 deletions
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); |