[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