diff options
Diffstat (limited to 'source/blender')
4 files changed, 18 insertions, 5 deletions
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h index 01040949a0a..4835d2118d9 100644 --- a/source/blender/editors/include/ED_image.h +++ b/source/blender/editors/include/ED_image.h @@ -58,7 +58,8 @@ void ED_space_image_set_mask(struct bContext *C, struct SpaceImage *sima, struct bool ED_space_image_color_sample(struct SpaceImage *sima, struct ARegion *region, int mval[2], - float r_col[3]); + float r_col[3], + bool *r_is_data); struct ImBuf *ED_space_image_acquire_buffer(struct SpaceImage *sima, void **r_lock, int tile); int ED_space_image_get_display_channel_mask(struct ImBuf *ibuf); void ED_space_image_release_buffer(struct SpaceImage *sima, struct ImBuf *ibuf, void *lock); diff --git a/source/blender/editors/interface/interface_eyedropper_color.c b/source/blender/editors/interface/interface_eyedropper_color.c index c86e35f91db..5af290db037 100644 --- a/source/blender/editors/interface/interface_eyedropper_color.c +++ b/source/blender/editors/interface/interface_eyedropper_color.c @@ -163,7 +163,7 @@ void eyedropper_color_sample_fl(bContext *C, int mx, int my, float r_col[3]) SpaceImage *sima = area->spacedata.first; int mval[2] = {mx - region->winrct.xmin, my - region->winrct.ymin}; - if (ED_space_image_color_sample(sima, region, mval, r_col)) { + if (ED_space_image_color_sample(sima, region, mval, r_col, NULL)) { return; } } diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c index 9855f8e9d40..7be84a5e191 100644 --- a/source/blender/editors/sculpt_paint/paint_utils.c +++ b/source/blender/editors/sculpt_paint/paint_utils.c @@ -581,8 +581,12 @@ void paint_sample_color( /* Sample from the active image buffer. The sampled color is in * Linear Scene Reference Space. */ float rgba_f[3]; - if (ED_space_image_color_sample(sima, region, (int[2]){x, y}, rgba_f)) { - linearrgb_to_srgb_v3_v3(rgba_f, rgba_f); + bool is_data; + if (ED_space_image_color_sample(sima, region, (int[2]){x, y}, rgba_f, &is_data)) { + if (!is_data) { + linearrgb_to_srgb_v3_v3(rgba_f, rgba_f); + } + if (use_palette) { copy_v3_v3(color->rgb, rgba_f); } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index e36c7d6b6e7..d95f643d7f9 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -3057,8 +3057,12 @@ void IMAGE_OT_unpack(wmOperatorType *ot) * \{ */ /* Returns color in linear space, matching ED_space_node_color_sample(). */ -bool ED_space_image_color_sample(SpaceImage *sima, ARegion *region, int mval[2], float r_col[3]) +bool ED_space_image_color_sample( + SpaceImage *sima, ARegion *region, int mval[2], float r_col[3], bool *r_is_data) { + if (r_is_data) { + *r_is_data = false; + } if (sima->image == NULL) { return false; } @@ -3096,6 +3100,10 @@ bool ED_space_image_color_sample(SpaceImage *sima, ARegion *region, int mval[2], } } + if (r_is_data) { + *r_is_data = (ibuf->colormanage_flag & IMB_COLORMANAGE_IS_DATA) != 0; + } + ED_space_image_release_buffer(sima, ibuf, lock); return ret; } |