[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29660] trunk/blender/source/blender: Fix #22553: dragging number buttons would run update functions more often than
Brecht Van Lommel
brecht at blender.org
Wed Jun 23 20:47:56 CEST 2010
Revision: 29660
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29660
Author: blendix
Date: 2010-06-23 20:47:56 +0200 (Wed, 23 Jun 2010)
Log Message:
-----------
Fix #22553: dragging number buttons would run update functions more often than
necessary due to the more accurate mouse move events that are useful for
sculpting and painting (at least on Linux/X11, not sure about other platforms).
If the update function takes a while to run, this in turn causes more mouse
move events to be accumulated, making things even slower, .. going into a spiral
of slower and slower redraws.
As a solution I've added a INBETWEEN_MOUSEMOVE event next to MOUSEMOVE. A
MOUSEMOVE event is automatically changed to INBETWEEN_MOUSEMOVE when a
MOUSEMOVE event is added after it. This new event type is only handled by
painting/sculpting operators, everything else can happily ignore it.
Modified Paths:
--------------
trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
trunk/blender/source/blender/makesrna/intern/rna_wm.c
trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
trunk/blender/source/blender/windowmanager/wm_event_types.h
Modified: trunk/blender/source/blender/editors/gpencil/gpencil_paint.c
===================================================================
--- trunk/blender/source/blender/editors/gpencil/gpencil_paint.c 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_paint.c 2010-06-23 18:47:56 UTC (rev 29660)
@@ -1481,6 +1481,7 @@
/* moving mouse - assumed that mouse button is down if in painting status */
case MOUSEMOVE:
+ case INBETWEEN_MOUSEMOVE:
/* check if we're currently painting */
if (p->status == GP_STATUS_PAINTING) {
/* handle drawing event */
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c 2010-06-23 18:47:56 UTC (rev 29660)
@@ -4872,6 +4872,7 @@
paint_exit(C, op);
return OPERATOR_FINISHED;
case MOUSEMOVE:
+ case INBETWEEN_MOUSEMOVE:
paint_apply_event(C, op, event);
break;
case TIMER:
Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c 2010-06-23 18:47:56 UTC (rev 29660)
@@ -275,7 +275,7 @@
MEM_freeN(stroke);
return OPERATOR_FINISHED;
}
- else if(first || event->type == MOUSEMOVE || (event->type == TIMER && (event->customdata == stroke->timer))) {
+ else if(first || ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE) || (event->type == TIMER && (event->customdata == stroke->timer))) {
if(stroke->stroke_started) {
if(paint_smooth_stroke(stroke, mouse, event)) {
if(paint_space_stroke_enabled(stroke->brush)) {
Modified: trunk/blender/source/blender/makesrna/intern/rna_wm.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_wm.c 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/makesrna/intern/rna_wm.c 2010-06-23 18:47:56 UTC (rev 29660)
@@ -114,6 +114,7 @@
{SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", ""},
{0, "", 0, NULL, NULL},
{MOUSEMOVE, "MOUSEMOVE", 0, "Mouse Move", ""},
+ {INBETWEEN_MOUSEMOVE, "INBETWEEN_MOUSEMOVE", 0, "Inbetween Move", ""},
{MOUSEPAN, "TRACKPADPAN", 0, "Mouse/Trackpad Pan", ""},
{MOUSEZOOM, "TRACKPADZOOM", 0, "Mouse/Trackpad Zoom", ""},
{MOUSEROTATE, "MOUSEROTATE", 0, "Mouse/Trackpad Rotate", ""},
Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2010-06-23 18:47:56 UTC (rev 29660)
@@ -1614,7 +1614,7 @@
while( (event= win->queue.first) ) {
int action = WM_HANDLER_CONTINUE;
- if((G.f & G_DEBUG) && event && event->type!=MOUSEMOVE)
+ if((G.f & G_DEBUG) && event && !ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE))
printf("pass on evt %d val %d\n", event->type, event->val);
wm_eventemulation(event);
@@ -2138,6 +2138,7 @@
case GHOST_kEventCursorMove: {
if(win->active) {
GHOST_TEventCursorData *cd= customdata;
+ wmEvent *lastevent= win->queue.last;
#if defined(__APPLE__) && defined(GHOST_COCOA)
//Cocoa already uses coordinates with y=0 at bottom, and returns inwindow coordinates on mouse moved event
@@ -2156,6 +2157,12 @@
event.type= MOUSEMOVE;
+ /* some painting operators want accurate mouse events, they can
+ handle inbetween mouse move moves, others can happily ignore
+ them for better performance */
+ if(lastevent && lastevent->type == MOUSEMOVE)
+ lastevent->type = INBETWEEN_MOUSEMOVE;
+
update_tablet_data(win, &event);
wm_event_add(win, &event);
Modified: trunk/blender/source/blender/windowmanager/wm_event_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm_event_types.h 2010-06-23 18:28:34 UTC (rev 29659)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h 2010-06-23 18:47:56 UTC (rev 29660)
@@ -70,6 +70,7 @@
/* mapped with userdef */
#define WHEELINMOUSE 0x00c
#define WHEELOUTMOUSE 0x00d
+#define INBETWEEN_MOUSEMOVE 0x011
/* SYSTEM : 0x01xx */
More information about the Bf-blender-cvs
mailing list