Fix #36981, Removing Sample line fails during render.
authorLukas Toenne <lukas.toenne@googlemail.com>
Mon, 7 Oct 2013 09:25:39 +0000 (09:25 +0000)
committerLukas Toenne <lukas.toenne@googlemail.com>
Mon, 7 Oct 2013 09:25:39 +0000 (09:25 +0000)
The SAMPLELINE flag in histogram was set during the BKE_histogram_update_sample_line function. That function in turn is called during every scope update in area draw function, meaning that during render
it constantly gets set. OTOH the operator tries to disable the flag on invoke, which "cancels" the sample line by default. So during render the operator un-setting of the flag has no effect, because the
render job immediatly triggers a redraw, which updates scopes and sets it again.

Moved the flag out of the actual sample line update function into the operator execute. Now only the operator enables/disables overall sample line drawing, while the rest of the update works as before.

source/blender/blenkernel/intern/colortools.c
source/blender/editors/space_image/image_ops.c

index 7f94f365925fd59f03d4feb56afea82ee6e5206c..578fa5d348d45c1ef7a6562538fe8a9d34371fdf 100644 (file)
@@ -972,9 +972,6 @@ void BKE_histogram_update_sample_line(Histogram *hist, ImBuf *ibuf, const ColorM
        if (ibuf->rect_float)
                cm_processor = IMB_colormanagement_display_processor_new(view_settings, display_settings);
 
-       /* persistent draw */
-       hist->flag |= HISTO_FLAG_SAMPLELINE; /* keep drawing the flag after */
-
        for (i = 0; i < 256; i++) {
                x = (int)(0.5f + x1 + (float)i * (x2 - x1) / 255.0f);
                y = (int)(0.5f + y1 + (float)i * (y2 - y1) / 255.0f);
index a7dee3fab93e42c64f5daea8deb9256006767e38..710d5c8cd81cefe383202e07419b10ce84d9bd73 100644 (file)
@@ -2417,6 +2417,9 @@ static int image_sample_line_exec(bContext *C, wmOperator *op)
        hist->co[1][0] = x2f;
        hist->co[1][1] = y2f;
 
+       /* enable line drawing */
+       hist->flag |= HISTO_FLAG_SAMPLELINE;
+
        BKE_histogram_update_sample_line(hist, ibuf, &scene->view_settings, &scene->display_settings);
        
        /* reset y zoom */