[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53870] trunk/blender/source/blender: fix airbrush + tablet pressure bug.

Campbell Barton ideasman42 at gmail.com
Thu Jan 17 04:41:28 CET 2013


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




More information about the Bf-blender-cvs mailing list