Skip to content

Commit d180edd

Browse files
committed
simplify barrel rotation. We need to do some
massaging on the gui side anyway, so lets just assume the input is 0.0-1.0 and does not require any calibration/tweaking. Do not send -1 anymore to disable; instead just send 0.0 if you don't have rotation data.
1 parent 860bcf3 commit d180edd

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed

mypaint-brush.c

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ mypaint_brush_set_state(MyPaintBrush *self, MyPaintBrushState i, float value)
550550
inputs[MYPAINT_BRUSH_INPUT_ATTACK_ANGLE] = smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_ASCENSION], mod_arith(atan2f(self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DY], self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DX]) / (2 * M_PI) * 360 + 90 + self->states[MYPAINT_BRUSH_STATE_VIEWROTATION], 360));
551551

552552
inputs[MYPAINT_BRUSH_INPUT_CUSTOM] = self->states[MYPAINT_BRUSH_STATE_CUSTOM_INPUT];
553-
inputs[MYPAINT_BRUSH_INPUT_BARREL_ROTATION] = (mod_arith(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION], 360) - 180.0);
553+
inputs[MYPAINT_BRUSH_INPUT_BARREL_ROTATION] = mod_arith(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION], 360);
554554

555555
if (self->print_inputs) {
556556
printf("press=% 4.3f, speed1=% 4.4f\tspeed2=% 4.4f\tstroke=% 4.3f\tcustom=% 4.3f\tviewzoom=% 4.3f\tviewrotation=% 4.3f\tasc=% 4.3f\tdir=% 4.3f\tdec=% 4.3f\tdabang=% 4.3f\txtilt=% 4.3f\tytilt=% 4.3fattack=% 4.3f\n", (double)inputs[MYPAINT_BRUSH_INPUT_PRESSURE], (double)inputs[MYPAINT_BRUSH_INPUT_SPEED1], (double)inputs[MYPAINT_BRUSH_INPUT_SPEED2], (double)inputs[MYPAINT_BRUSH_INPUT_STROKE], (double)inputs[MYPAINT_BRUSH_INPUT_CUSTOM], (double)inputs[MYPAINT_BRUSH_INPUT_VIEWZOOM], (double)self->states[MYPAINT_BRUSH_STATE_VIEWROTATION], (double)inputs[MYPAINT_BRUSH_INPUT_TILT_ASCENSION], (double)inputs[MYPAINT_BRUSH_INPUT_DIRECTION], (double)inputs[MYPAINT_BRUSH_INPUT_TILT_DECLINATION], (double)self->states[MYPAINT_BRUSH_STATE_ACTUAL_ELLIPTICAL_DAB_ANGLE], (double)inputs[MYPAINT_BRUSH_INPUT_TILT_DECLINATIONX], (double)inputs[MYPAINT_BRUSH_INPUT_TILT_DECLINATIONY], (double)inputs[MYPAINT_BRUSH_INPUT_ATTACK_ANGLE]);
@@ -607,8 +607,8 @@ mypaint_brush_set_state(MyPaintBrush *self, MyPaintBrushState i, float value)
607607
float dy_old = self->states[MYPAINT_BRUSH_STATE_DIRECTION_DY];
608608

609609
// 360 Direction
610-
self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DX] += (dx - self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DX]) * fac;
611-
self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DY] += (dy - self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DY]) * fac;
610+
self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DX] += (dx - self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DX]) * fac;
611+
self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DY] += (dy - self->states[MYPAINT_BRUSH_STATE_DIRECTION_ANGLE_DY]) * fac;
612612

613613
// use the opposite speed vector if it is closer (we don't care about 180 degree turns)
614614
if (SQR(dx_old-dx) + SQR(dy_old-dy) > SQR(dx_old-(-dx)) + SQR(dy_old-(-dy))) {
@@ -841,14 +841,14 @@ mypaint_brush_set_state(MyPaintBrush *self, MyPaintBrushState i, float value)
841841
return FALSE;
842842
}
843843
//avoid color noise from low alpha
844-
if (a > WGM_EPSILON * 10) {
844+
if (a > WGM_EPSILON * 10) {
845845
smudge_buckets[bucket][4] = r;
846846
smudge_buckets[bucket][5] = g;
847847
smudge_buckets[bucket][6] = b;
848848
smudge_buckets[bucket][7] = a;
849-
} else {
850-
fac = 1.0;
851-
}
849+
} else {
850+
fac = 1.0;
851+
}
852852
} else {
853853
r = smudge_buckets[bucket][4];
854854
g = smudge_buckets[bucket][5];
@@ -1247,15 +1247,14 @@ mypaint_brush_set_state(MyPaintBrush *self, MyPaintBrushState i, float value)
12471247
step_ascension = frac * smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_ASCENSION], tilt_ascension);
12481248
step_viewzoom = viewzoom;
12491249
step_viewrotation = viewrotation;
1250-
// ignore input w/ -1.0
1251-
if (barrel_rotation == -1.0) {
1252-
step_barrel_rotation = 0;
1253-
self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION] = 180;
1254-
} else {
1255-
//converts barrel_ration to degrees, offsets it 90 degrees to make the button at the top be zero. Subtract ascension because it directly affects the rotation values.
1256-
step_barrel_rotation = frac * smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION],barrel_rotation * 360 - self->states[MYPAINT_BRUSH_STATE_ASCENSION]);
1257-
}
1258-
update_states_and_setting_values (self, step_ddab, step_dx, step_dy, step_dpressure, step_declination, step_ascension, step_dtime, step_viewzoom, step_viewrotation, step_declinationx, step_declinationy, step_barrel_rotation);
1250+
//converts barrel_ration to degrees,
1251+
step_barrel_rotation = frac * smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION],barrel_rotation * 360);
1252+
1253+
update_states_and_setting_values (self, step_ddab, step_dx, step_dy,
1254+
step_dpressure, step_declination,
1255+
step_ascension, step_dtime, step_viewzoom,
1256+
step_viewrotation, step_declinationx,
1257+
step_declinationy, step_barrel_rotation);
12591258
}
12601259

12611260
gboolean painted_now = prepare_and_draw_dab (self, surface);
@@ -1289,14 +1288,8 @@ mypaint_brush_set_state(MyPaintBrush *self, MyPaintBrushState i, float value)
12891288
step_dtime = dtime_left;
12901289
step_viewzoom = viewzoom;
12911290
step_viewrotation = viewrotation;
1292-
step_barrel_rotation = smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION], barrel_rotation * 360 - self->states[MYPAINT_BRUSH_STATE_ASCENSION]);
1293-
if (barrel_rotation == -1.0) {
1294-
step_barrel_rotation = 0;
1295-
self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION] = 180;
1296-
}
1297-
else {
1298-
step_barrel_rotation = smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION],barrel_rotation * 360 - self->states[MYPAINT_BRUSH_STATE_ASCENSION]);
1299-
}
1291+
step_barrel_rotation = smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION], barrel_rotation * 360);
1292+
step_barrel_rotation = smallest_angular_difference(self->states[MYPAINT_BRUSH_STATE_BARREL_ROTATION],barrel_rotation * 360);
13001293

13011294
//dtime_left = 0; but that value is not used any more
13021295

0 commit comments

Comments
 (0)