Revision: 53870
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53870
Author:   campbellbarton
Date:     2013-01-17 03:41:23 +0000 (Thu, 17 Jan 2013)
Log Message:
-----------
fix airbrush + tablet pressure bug.

Timer events used by the airbrush would always give a pressure of 1.0, ignoring 
the tablets real pressure in all paint modes.

Move tablet data into its own struct-member so it can be used with timer events.

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/windowmanager/WM_types.h
    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        
2013-01-17 02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/editors/gpencil/gpencil_paint.c        
2013-01-17 03:41:23 UTC (rev 53870)
@@ -1564,8 +1564,8 @@
        p->curtime = PIL_check_seconds_timer();
        
        /* handle pressure sensitivity (which is supplied by tablets) */
-       if (event->custom == EVT_DATA_TABLET) {
-               wmTabletData *wmtab = event->customdata;
+       if (event->tablet_data) {
+               wmTabletData *wmtab = event->tablet_data;
                
                tablet = (wmtab->Active != EVT_TABLET_NONE);
                p->pressure = wmtab->Pressure;

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_image.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_image.c     
2013-01-17 02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_image.c     
2013-01-17 03:41:23 UTC (rev 53870)
@@ -5295,7 +5295,6 @@
 {
        const Scene *scene = CTX_data_scene(C);
        PaintOperation *pop = op->customdata;
-       wmTabletData *wmtab;
        PointerRNA itemptr;
        float pressure, mousef[2];
        double time;
@@ -5306,8 +5305,8 @@
        tablet = 0;
        pop->s.blend = pop->s.brush->blend;
 
-       if (event->custom == EVT_DATA_TABLET) {
-               wmtab = event->customdata;
+       if (event->tablet_data) {
+               wmTabletData *wmtab = event->tablet_data;
 
                tablet = (wmtab->Active != EVT_TABLET_NONE);
                pressure = wmtab->Pressure;

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c    
2013-01-17 02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c    
2013-01-17 03:41:23 UTC (rev 53870)
@@ -125,8 +125,8 @@
        int erasor = 0;
        float pressure = 1;
 
-       if (event->custom == EVT_DATA_TABLET) {
-               wmTabletData *wmtab = event->customdata;
+       if (event->tablet_data) {
+               wmTabletData *wmtab = event->tablet_data;
 
                erasor = (wmtab->Active == EVT_TABLET_ERASER);
                pressure = (wmtab->Active != EVT_TABLET_NONE) ? wmtab->Pressure 
: 1;

Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h       2013-01-17 
02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/windowmanager/WM_types.h       2013-01-17 
03:41:23 UTC (rev 53870)
@@ -445,7 +445,10 @@
        
        /* keymap item, set by handler (weak?) */
        const char *keymap_idname;
-       
+
+       /* tablet info, only use when the tablet is active */
+       struct wmTabletData *tablet_data;
+
        /* custom data */
        short custom;           /* custom data type, stylus, 6dof, see 
wm_event_types.h */
        short customdatafree;

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 
2013-01-17 02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 
2013-01-17 03:41:23 UTC (rev 53870)
@@ -84,6 +84,8 @@
 #  include "RNA_enum_types.h"
 #endif
 
+static void update_tablet_data(wmWindow *win, wmEvent *event);
+
 static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, 
PointerRNA *properties, ReportList *reports,
                                      short context, short poll_only);
 
@@ -94,6 +96,9 @@
        wmEvent *event = MEM_callocN(sizeof(wmEvent), "wmEvent");
        
        *event = *event_to_add;
+
+       update_tablet_data(win, event);
+
        BLI_addtail(&win->queue, event);
 }
 
@@ -108,6 +113,11 @@
                                MEM_freeN(event->customdata);
                }
        }
+
+       if (event->tablet_data) {
+               MEM_freeN(event->tablet_data);
+       }
+
        MEM_freeN(event);
 }
 
@@ -2652,12 +2662,11 @@
                wmtab->Xtilt = td->Xtilt;
                wmtab->Ytilt = td->Ytilt;
                
-               event->custom = EVT_DATA_TABLET;
-               event->customdata = wmtab;
-               event->customdatafree = 1;
+               event->tablet_data = wmtab;
                // printf("%s: using tablet %.5f\n", __func__, wmtab->Pressure);
        }
        else {
+               event->tablet_data = NULL;
                // printf("%s: not using tablet\n", __func__);
        }
 }
@@ -2800,7 +2809,6 @@
                        if (lastevent && lastevent->type == MOUSEMOVE)
                                lastevent->type = INBETWEEN_MOUSEMOVE;
 
-                       update_tablet_data(win, &event);
                        wm_event_add(win, &event);
                        
                        /* also add to other window if event is there, this 
makes overdraws disappear nicely */
@@ -2813,7 +2821,6 @@
                                oevent.y = owin->eventstate->y = event.y;
                                oevent.type = MOUSEMOVE;
                                
-                               update_tablet_data(owin, &oevent);
                                wm_event_add(owin, &oevent);
                        }
                                
@@ -2845,7 +2852,6 @@
                        event.prevx = event.x - pd->deltaX;
                        event.prevy = event.y - (-pd->deltaY);
                        
-                       update_tablet_data(win, &event);
                        wm_event_add(win, &event);
                        break;
                }
@@ -2911,11 +2917,9 @@
                                oevent.type = event.type;
                                oevent.val = event.val;
                                
-                               update_tablet_data(owin, &oevent);
                                wm_event_add(owin, &oevent);
                        }
                        else {
-                               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 2013-01-17 
02:06:54 UTC (rev 53869)
+++ trunk/blender/source/blender/windowmanager/wm_event_types.h 2013-01-17 
03:41:23 UTC (rev 53870)
@@ -39,11 +39,10 @@
 #define __WM_EVENT_TYPES_H__
 
 /* customdata type */
-#define EVT_DATA_TABLET                1
-#define EVT_DATA_GESTURE       2
-#define EVT_DATA_TIMER         3
-#define EVT_DATA_LISTBASE      4
-#define EVT_DATA_NDOF_MOTION 5
+#define EVT_DATA_GESTURE        1
+#define EVT_DATA_TIMER          2
+#define EVT_DATA_LISTBASE       3
+#define EVT_DATA_NDOF_MOTION    4
 
 /* tablet active, matches GHOST_TTabletMode */
 #define EVT_TABLET_NONE                0

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to