Skip to content

Commit a1436a5

Browse files
committed
Cleanup stepper widget
1 parent 5731f1c commit a1436a5

File tree

2 files changed

+34
-37
lines changed

2 files changed

+34
-37
lines changed

druid/examples/switch.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,15 @@ fn build_widget() -> impl Widget<DemoState> {
3030
row.add_child(Padding::new(5.0, switch_label), 0.0);
3131
row.add_child(Padding::new(5.0, switch), 0.0);
3232

33-
3433
let label_stepper = LensWrap::new(
35-
Stepper::new(0.0, 10.0, 1.0, true, |_ctx, _data, _env| {}),
34+
Stepper::new(0.0, 10.0, 0.25, true, |_ctx, _data, _env| {}),
3635
lenses::demo_state::stepper_value,
3736
);
3837

3938
let mut stepper_row = Row::new();
4039

4140
let label = DynLabel::new(|data: &DemoState, _env| {
42-
format!("Stepper value: {0:.0}", data.stepper_value)
41+
format!("Stepper value: {0:.2}", data.stepper_value)
4342
});
4443

4544
stepper_row.add_child(Padding::new(5.0, label), 0.0);

druid/src/widget/stepper.rs

Lines changed: 32 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,19 @@
1515
//! A stepper widget.
1616
1717
use crate::{
18-
BaseState, BoxConstraints, Data, Env, Event, EventCtx, LayoutCtx, PaintCtx, Size, TimerToken,
18+
BaseState, BoxConstraints, Env, Event, EventCtx, LayoutCtx, PaintCtx, Size, TimerToken,
1919
UpdateCtx, Widget,
2020
};
2121
use std::time::{Duration, Instant};
2222

2323
use crate::kurbo::{BezPath, Rect, RoundedRect};
24-
use crate::piet::{
25-
FontBuilder, LinearGradient, RenderContext, Text, TextLayout, TextLayoutBuilder, UnitPoint,
26-
};
24+
use crate::piet::{LinearGradient, RenderContext, UnitPoint};
2725

2826
use crate::theme;
29-
use crate::widget::{Align, Label, LabelText, SizedBox};
27+
use crate::widget::Align;
3028
use crate::Point;
3129

32-
/// A stepper.
30+
/// A stepper widget for step-wise increasing and decreasing a value.
3331
pub struct Stepper {
3432
max: f64,
3533
min: f64,
@@ -67,6 +65,7 @@ impl Stepper {
6765
}
6866

6967
fn change_value(&mut self, ctx: &mut EventCtx, data: &mut f64, env: &Env) {
68+
// increase/decrease value depending on which button is currently active
7069
let delta = if self.increase_active {
7170
self.step
7271
} else if self.decrease_active {
@@ -79,21 +78,20 @@ impl Stepper {
7978
*data = (*data + delta).min(self.min).max(self.max);
8079

8180
if old_data != *data {
81+
// callback
8282
(self.value_changed)(ctx, data, env);
83-
} else {
84-
if self.wrap {
85-
if *data == self.min {
86-
*data = self.max
87-
} else {
88-
*data = self.min
89-
}
83+
} else if self.wrap {
84+
if *data == self.min {
85+
*data = self.max
86+
} else {
87+
*data = self.min
9088
}
9189
}
9290
}
9391
}
9492

9593
impl Widget<f64> for Stepper {
96-
fn paint(&mut self, paint_ctx: &mut PaintCtx, base_state: &BaseState, data: &f64, env: &Env) {
94+
fn paint(&mut self, paint_ctx: &mut PaintCtx, base_state: &BaseState, _data: &f64, env: &Env) {
9795
let rounded_rect =
9896
RoundedRect::from_origin_size(Point::ORIGIN, base_state.size().to_vec2(), 4.);
9997

@@ -105,12 +103,12 @@ impl Widget<f64> for Stepper {
105103
paint_ctx.clip(rounded_rect);
106104

107105
// draw buttons for increase/decrease
108-
let mut increase_button_origin = Point::ORIGIN;
106+
let increase_button_origin = Point::ORIGIN;
109107
let mut decrease_button_origin = Point::ORIGIN;
110108
decrease_button_origin.y += height / 2.;
111109

112-
let increase_rect = Rect::from_origin_size(increase_button_origin, button_size);
113-
let decrease_rect = Rect::from_origin_size(decrease_button_origin, button_size);
110+
let increase_button_rect = Rect::from_origin_size(increase_button_origin, button_size);
111+
let decrease_button_rect = Rect::from_origin_size(decrease_button_origin, button_size);
114112

115113
let active_gradient = LinearGradient::new(
116114
UnitPoint::TOP,
@@ -126,31 +124,31 @@ impl Widget<f64> for Stepper {
126124

127125
// draw buttons that are currently triggered as active
128126
if self.increase_active {
129-
paint_ctx.fill(increase_rect, &active_gradient);
127+
paint_ctx.fill(increase_button_rect, &active_gradient);
130128
} else {
131-
paint_ctx.fill(increase_rect, &inactive_gradient);
129+
paint_ctx.fill(increase_button_rect, &inactive_gradient);
132130
};
133131

134132
if self.decrease_active {
135-
paint_ctx.fill(decrease_rect, &active_gradient);
133+
paint_ctx.fill(decrease_button_rect, &active_gradient);
136134
} else {
137-
paint_ctx.fill(decrease_rect, &inactive_gradient);
135+
paint_ctx.fill(decrease_button_rect, &inactive_gradient);
138136
};
139137

140138
// draw up and down triangles
141-
let mut increase_arrow = BezPath::new();
142-
increase_arrow.move_to(Point::new(4., height / 2. - 4.));
143-
increase_arrow.line_to(Point::new(width - 4., height / 2. - 4.));
144-
increase_arrow.line_to(Point::new(width / 2., 4.));
145-
increase_arrow.close_path();
146-
paint_ctx.fill(increase_arrow, &env.get(theme::LABEL_COLOR));
147-
148-
let mut decrease_arrow = BezPath::new();
149-
decrease_arrow.move_to(Point::new(4., height / 2. + 4.));
150-
decrease_arrow.line_to(Point::new(width - 4., height / 2. + 4.));
151-
decrease_arrow.line_to(Point::new(width / 2., height - 4.));
152-
decrease_arrow.close_path();
153-
paint_ctx.fill(decrease_arrow, &env.get(theme::LABEL_COLOR));
139+
let mut increase_button_arrow = BezPath::new();
140+
increase_button_arrow.move_to(Point::new(4., height / 2. - 4.));
141+
increase_button_arrow.line_to(Point::new(width - 4., height / 2. - 4.));
142+
increase_button_arrow.line_to(Point::new(width / 2., 4.));
143+
increase_button_arrow.close_path();
144+
paint_ctx.fill(increase_button_arrow, &env.get(theme::LABEL_COLOR));
145+
146+
let mut decrease_button_arrow = BezPath::new();
147+
decrease_button_arrow.move_to(Point::new(4., height / 2. + 4.));
148+
decrease_button_arrow.line_to(Point::new(width - 4., height / 2. + 4.));
149+
decrease_button_arrow.line_to(Point::new(width / 2., height - 4.));
150+
decrease_button_arrow.close_path();
151+
paint_ctx.fill(decrease_button_arrow, &env.get(theme::LABEL_COLOR));
154152
}
155153

156154
fn layout(

0 commit comments

Comments
 (0)