[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60774] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: Final fix for #36905.

Antony Riakiotakis kalast at gmail.com
Tue Oct 15 15:45:27 CEST 2013


Revision: 60774
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60774
Author:   psy-fi
Date:     2013-10-15 13:45:27 +0000 (Tue, 15 Oct 2013)
Log Message:
-----------
Final fix for #36905. Enforce redraw of window once before sampling.
Thanks to Brecht for the solution!

Modified Paths:
--------------
    trunk/blender/source/blender/editors/sculpt_paint/paint_image.c

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2013-10-15 12:37:40 UTC (rev 60773)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2013-10-15 13:45:27 UTC (rev 60774)
@@ -936,11 +936,23 @@
 	Paint *paint = BKE_paint_get_active_from_context(C);
 	Brush *brush = BKE_paint_brush(paint);
 	ARegion *ar = CTX_wm_region(C);
+	wmWindow *win = CTX_wm_window(C);
+	bool show_cursor = ((paint->flags & PAINT_SHOW_BRUSH) != 0);
 	int location[2];
 
+	paint->flags &= ~PAINT_SHOW_BRUSH;
+
+	/* force redraw without cursor */
+	WM_paint_cursor_tag_redraw(win, ar);
+	WM_redraw_windows(C);
+
 	RNA_int_get_array(op->ptr, "location", location);
 	paint_sample_color(C, ar, location[0], location[1]);
 
+	if(show_cursor) {
+		paint->flags |= PAINT_SHOW_BRUSH;
+	}
+
 	WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush);
 	
 	return OPERATOR_FINISHED;
@@ -950,14 +962,20 @@
 {
 	Paint *paint = BKE_paint_get_active_from_context(C);
 	SampleColorData *data = MEM_mallocN(sizeof(SampleColorData), "sample color custom data");
+	ARegion *ar = CTX_wm_region(C);
+	wmWindow *win = CTX_wm_window(C);
 
 	data->event_type = event->type;
 	data->show_cursor = ((paint->flags & PAINT_SHOW_BRUSH) != 0);
 	op->customdata = data;
 	paint->flags &= ~PAINT_SHOW_BRUSH;
 
+	/* force redraw without cursor */
+	WM_paint_cursor_tag_redraw(win, ar);
+	WM_redraw_windows(C);
+
 	RNA_int_set_array(op->ptr, "location", event->mval);
-	sample_color_exec(C, op);
+	paint_sample_color(C, ar, event->mval[0], event->mval[1]);
 
 	WM_event_add_modal_handler(C, op);
 
@@ -967,10 +985,10 @@
 static int sample_color_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
 	SampleColorData *data = op->customdata;
+	Paint *paint = BKE_paint_get_active_from_context(C);
+	Brush *brush = BKE_paint_brush(paint);
 
 	if ((event->type == data->event_type) && (event->val == KM_RELEASE)) {
-		Paint *paint = BKE_paint_get_active_from_context(C);
-
 		if(data->show_cursor) {
 			paint->flags |= PAINT_SHOW_BRUSH;
 		}
@@ -981,9 +999,13 @@
 
 	switch (event->type) {
 		case MOUSEMOVE:
+		{
+			ARegion *ar = CTX_wm_region(C);
 			RNA_int_set_array(op->ptr, "location", event->mval);
-			sample_color_exec(C, op);
+			paint_sample_color(C, ar, event->mval[0], event->mval[1]);
+			WM_event_add_notifier(C, NC_BRUSH | NA_EDITED, brush);
 			break;
+		}
 	}
 
 	return OPERATOR_RUNNING_MODAL;




More information about the Bf-blender-cvs mailing list