[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31974] trunk/blender/source/blender/ editors/sculpt_paint/paint_image.c: Fix #23652: texture paint RMB would translate the object after sampling

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Sep 16 23:03:08 CEST 2010


Revision: 31974
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31974
Author:   blendix
Date:     2010-09-16 23:03:07 +0200 (Thu, 16 Sep 2010)

Log Message:
-----------
Fix #23652: texture paint RMB would translate the object after sampling
color, made sample a modal operator now to solve this. It's an indirect
solution, but couldn't think of anything better, and it's useful to have
anyway.

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	2010-09-16 20:33:46 UTC (rev 31973)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c	2010-09-16 21:03:07 UTC (rev 31974)
@@ -5135,13 +5135,42 @@
 	ARegion *ar= CTX_wm_region(C);
 	int location[2];
 
-	location[0]= event->x - ar->winrct.xmin;
-	location[1]= event->y - ar->winrct.ymin;
-	RNA_int_set_array(op->ptr, "location", location);
+	if(ar) {
+		location[0]= event->x - ar->winrct.xmin;
+		location[1]= event->y - ar->winrct.ymin;
+		RNA_int_set_array(op->ptr, "location", location);
 
-	return sample_color_exec(C, op);
+		sample_color_exec(C, op);
+	}
+
+	WM_event_add_modal_handler(C, op);
+
+	return OPERATOR_RUNNING_MODAL;
 }
 
+static int sample_color_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+	ARegion *ar= CTX_wm_region(C);
+	int location[2];
+
+	switch(event->type) {
+		case LEFTMOUSE:
+		case RIGHTMOUSE: // XXX hardcoded
+			return OPERATOR_FINISHED;
+		case MOUSEMOVE:
+			if(ar) {
+				location[0]= event->x - ar->winrct.xmin;
+				location[1]= event->y - ar->winrct.ymin;
+				RNA_int_set_array(op->ptr, "location", location);
+
+				sample_color_exec(C, op);
+			}
+			break;
+	}
+
+	return OPERATOR_RUNNING_MODAL;
+}
+
 void PAINT_OT_sample_color(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -5151,6 +5180,7 @@
 	/* api callbacks */
 	ot->exec= sample_color_exec;
 	ot->invoke= sample_color_invoke;
+	ot->modal= sample_color_modal;
 	ot->poll= image_paint_poll;
 
 	/* flags */





More information about the Bf-blender-cvs mailing list