[Bf-committers] [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

Ton Roosendaal ton at blender.org
Fri Jul 2 11:23:47 CEST 2010


Hi,

I forgot: original idea was to configure Blender WM or Ghost to add  
mouse-trail custom data to mousemove events. That would balance the  
the queues nice too.

-Ton-

------------------------------------------------------------------------
Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The Netherlands

On 2 Jul, 2010, at 10:34, Ton Roosendaal wrote:

> Hi,
>
> It might be more clearly solved by keeping a general mousemove event,
> and give it a value type (event->val) when it's an 'inbetween event'.
>
> A lot of event code depends on detecting mousemoves, and needing to
> adapt all code with this case is not very nice. It's not really clear
> either, platform depending, etc.
>
> -Ton-
>
> ------------------------------------------------------------------------
> Ton Roosendaal  Blender Foundation   ton at blender.org     
> www.blender.org
> Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The  
> Netherlands
>
> On 1 Jul, 2010, at 8:24, Daniel Salazar - 3Developer.com wrote:
>
>> Hi Nick, I reported a similar bug related to this here
>>
>> http://projects.blender.org/tracker/index.php?func=detail&aid=22690&group_id=9&atid=498
>> <http://projects.blender.org/tracker/index.php?func=detail&aid=22690&group_id=9&atid=498
>>>
>> Daniel Salazar
>>
>> On Thu, Jul 1, 2010 at 12:10 AM, Nicholas Bishop
>> <nicholasbishop at gmail.com>wrote:
>>
>>> Hi Brecht,
>>>
>>> Something here seems to break tweak events. For example, clicking  
>>> and
>>> dragging in the file selector to do a box select, no longer works
>>> after r29659. Noticed this because mesh hiding in my branch is set  
>>> up
>>> as a tweak event.
>>>
>>> -Nicholas
>>>
>>> On Wed, Jun 23, 2010 at 2:47 PM, Brecht Van Lommel <brecht at blender.org
>>>>
>>> wrote:
>>>> 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 */
>>>>
>>>>
>>>> _______________________________________________
>>>> Bf-blender-cvs mailing list
>>>> Bf-blender-cvs at blender.org
>>>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>>>
>>> _______________________________________________
>>> Bf-committers mailing list
>>> Bf-committers at blender.org
>>> http://lists.blender.org/mailman/listinfo/bf-committers
>>>
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers



More information about the Bf-committers mailing list