Fix T74074: Strokes with timer events don't get pressure values

When processing a timer event WM_event_tablet_data returns 0 instead of
the last valid pressure value from the tablet. This always stores the
last pressure value and uses it in case a timer event is being
processed.

Reviewed By: brecht

Maniphest Tasks: T74074

Differential Revision: https://developer.blender.org/D6950
This commit is contained in:
Pablo Dobarro 2020-03-01 19:31:28 +01:00 committed by Pablo Dobarro
parent c04c5ac4f6
commit a489d77c5b
Notes: blender-bot 2023-10-18 15:23:11 +02:00
Referenced by issue #74074, Sculpt Mode: Airbrush stroke type stops after initialization
1 changed files with 11 additions and 0 deletions

View File

@ -118,6 +118,8 @@ typedef struct PaintStroke {
float last_pressure;
int stroke_mode;
float last_tablet_event_pressure;
float zoom_2d;
int pen_flip;
@ -1355,6 +1357,15 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event)
1.0f :
WM_event_tablet_data(event, &stroke->pen_flip, NULL));
/* When processing a timer event the pressure from the event is 0, so use the last valid
* pressure. */
if (event->type == TIMER) {
pressure = stroke->last_tablet_event_pressure;
}
else {
stroke->last_tablet_event_pressure = pressure;
}
paint_stroke_add_sample(p, stroke, event->mval[0], event->mval[1], pressure);
paint_stroke_sample_average(stroke, &sample_average);