1use crate::styles::colors::*;
2use fltk::{enums::*, prelude::*, *};
3
4#[derive(Debug, Clone)]
5pub struct FancyHorSlider {
6 p: group::Pack,
7 s: valuator::Slider,
8}
9
10impl Default for FancyHorSlider {
11 fn default() -> Self {
12 Self::new(0, 0, 0, 0, "")
13 }
14}
15
16impl FancyHorSlider {
17 pub fn new(x: i32, y: i32, width: i32, height: i32, label: &str) -> Self {
18 let p = group::Pack::new(x, y, width, height, None).with_label(label);
19 frame::Frame::default().with_size(width, 5);
20 let mut s = valuator::Slider::new(x, y, width, 10, None);
21 s.set_type(valuator::SliderType::Horizontal);
22 s.set_frame(FrameType::RFlatBox);
23 s.set_color(SLIDER_PURPLE);
24 s.draw(|s| {
25 draw::set_draw_color(SEL_BLUE);
26 draw::draw_pie(
27 s.x() - 10 + (s.w() as f64 * s.value()) as i32,
28 s.y() - 10,
29 30,
30 30,
31 0.,
32 360.,
33 );
34 });
35 s.set_callback(|_| app::redraw());
36 p.end();
37 Self { p, s }
38 }
39
40 pub fn set_callback<F: 'static + FnMut(&mut Self)>(&mut self, mut cb: F) {
41 let mut s = self.clone();
42 self.s.set_callback(move |_| {
43 cb(&mut s);
44 app::redraw();
45 });
46 }
47 pub fn value(&self) -> f64 {
48 self.s.value()
49 }
50 pub fn set_value(&mut self, val: f64) {
51 self.s.set_value(val)
52 }
53}
54
55fltk::widget_extends!(FancyHorSlider, group::Pack, p);
56
57#[derive(Debug, Clone)]
58pub struct FancyVertSlider {
59 p: group::Pack,
60 s: valuator::Slider,
61}
62
63impl Default for FancyVertSlider {
64 fn default() -> Self {
65 Self::new(0, 0, 0, 0, "")
66 }
67}
68
69impl FancyVertSlider {
70 pub fn new(x: i32, y: i32, width: i32, height: i32, label: &str) -> Self {
71 let p = group::Pack::new(x, y, width, height, None)
72 .with_label(label)
73 .with_type(group::PackType::Horizontal)
74 .with_align(Align::Right);
75 frame::Frame::default().with_size(5, height);
76 let mut s = valuator::Slider::new(x, y, 10, height, None);
77 s.set_type(valuator::SliderType::Vertical);
78 s.set_frame(FrameType::RFlatBox);
79 s.set_color(SLIDER_PURPLE);
80 s.draw(|s| {
81 draw::set_draw_color(SEL_BLUE);
82 draw::draw_pie(
83 s.x() - 10,
84 s.y() - 10 + (s.h() as f64 * s.value()) as i32,
85 30,
86 30,
87 0.,
88 360.,
89 );
90 });
91 s.set_callback(|_| app::redraw());
92 p.end();
93 Self { p, s }
94 }
95
96 pub fn set_callback<F: 'static + FnMut(&mut Self)>(&mut self, mut cb: F) {
97 let mut s = self.clone();
98 self.s.set_callback(move |_| {
99 cb(&mut s);
100 app::redraw();
101 });
102 }
103 pub fn value(&self) -> f64 {
104 self.s.value()
105 }
106 pub fn set_value(&mut self, val: f64) {
107 self.s.set_value(val)
108 }
109}
110
111fltk::widget_extends!(FancyVertSlider, group::Pack, p);