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:
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
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue