From dcd70d033f65ae61c1b198946d3a0eede7aa801a Mon Sep 17 00:00:00 2001 From: Billy Messenger <60663878+BillyDM@users.noreply.github.com> Date: Sat, 20 Jun 2020 17:21:57 -0500 Subject: [PATCH] lots of renaming, refactoring, and optimizations --- Cargo.toml | 2 +- README.md | 2 +- examples/db_meter/src/main.rs | 12 +- examples/inputs_tour_steps/style.rs | 166 ++- examples/phase_meter/src/main.rs | 17 +- examples/reduction_meter/src/main.rs | 12 +- screenshots/DB_Meter.png | Bin 11303 -> 11024 bytes screenshots/HSliders.png | Bin 40079 -> 40467 bytes screenshots/Knobs.png | Bin 38512 -> 38560 bytes screenshots/Modulation_Ranges.png | Bin 45672 -> 46522 bytes screenshots/Phase_Meter.png | Bin 7497 -> 7281 bytes screenshots/Ramps.png | Bin 27841 -> 25972 bytes screenshots/Reduction_Meter.png | Bin 8266 -> 8126 bytes screenshots/Simple_Example.png | Bin 11180 -> 10303 bytes screenshots/VSliders.png | Bin 43358 -> 42231 bytes screenshots/XYPads.png | Bin 22730 -> 22027 bytes src/core/mod.rs | 31 + src/core/tick_marks.rs | 151 ++- src/lib.rs | 5 +- src/native/phase_meter.rs | 17 +- src/style/bar_tick_marks.rs | 78 ++ src/style/db_meter.rs | 84 +- src/style/default_colors.rs | 55 +- src/style/h_slider.rs | 93 +- src/style/knob.rs | 124 +-- src/style/mod.rs | 1 + src/style/phase_meter.rs | 16 +- src/style/ramp.rs | 14 +- src/style/reduction_meter.rs | 85 +- src/style/v_slider.rs | 103 +- src/wgpu/bar_tick_marks.rs | 694 ++++++++++++ src/wgpu/db_meter.rs | 263 +---- src/wgpu/h_slider.rs | 1341 ++++++++++++---------- src/wgpu/knob.rs | 1540 ++++++++++++++------------ src/wgpu/mod.rs | 2 + src/wgpu/phase_meter.rs | 134 ++- src/wgpu/ramp.rs | 13 +- src/wgpu/reduction_meter.rs | 243 +--- src/wgpu/v_slider.rs | 1359 +++++++++++++---------- src/wgpu/xy_pad.rs | 79 +- 40 files changed, 3865 insertions(+), 2871 deletions(-) create mode 100644 src/style/bar_tick_marks.rs create mode 100644 src/wgpu/bar_tick_marks.rs diff --git a/Cargo.toml b/Cargo.toml index 7855dd9..9bf5032 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "iced_audio" -version = "0.2.6" +version = "0.3.0" authors = ["Billy Messenger "] license = "MIT" edition = "2018" diff --git a/README.md b/README.md index d40ff0f..345c929 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ cargo run --package phase_meter --release Add `iced` and `iced_audio` as dependencies in your `Cargo.toml`: ``` iced = { version = "0.1", features = ["image"] } -iced_audio = "0.2" +iced_audio = "0.3" ``` __Both Iced Audio and [Iced] move fast and the `master` branch can contain breaking changes!__ If you want to learn about a specific release, check out [the release list]. diff --git a/examples/db_meter/src/main.rs b/examples/db_meter/src/main.rs index 744a3ed..b81cbdb 100644 --- a/examples/db_meter/src/main.rs +++ b/examples/db_meter/src/main.rs @@ -4,8 +4,8 @@ use iced::{ }; use iced_audio::{ - db_meter, knob, DBMeter, DBRange, Knob, TickMark, TickMarkGroup, - TickMarkTier, + bar_tick_marks, db_meter, knob, DBMeter, DBRange, Knob, TickMark, + TickMarkGroup, TickMarkTier, }; use std::time::Instant; @@ -101,7 +101,7 @@ impl Application for DBMeterApp { }, ), - tick_marks: TickMarkGroup::from_vec(vec![ + tick_marks: TickMarkGroup::new(vec![ TickMark { position: db_range.to_normal(0.0), tier: TickMarkTier::One, @@ -333,8 +333,8 @@ impl db_meter::StyleSheet for CustomDBMeterStyle { } } - fn tick_mark_style(&self) -> Option { - Some(db_meter::TickMarkStyle { + fn tick_mark_style(&self) -> Option { + Some(bar_tick_marks::Style { length_tier_1: 4, length_tier_2: 3, length_tier_3: 2, @@ -349,7 +349,7 @@ impl db_meter::StyleSheet for CustomDBMeterStyle { offset: 2, - placement: db_meter::TickMarkPlacement::Right, + placement: bar_tick_marks::Placement::RightOrBottom, }) } } diff --git a/examples/inputs_tour_steps/style.rs b/examples/inputs_tour_steps/style.rs index e808bce..8e475f7 100644 --- a/examples/inputs_tour_steps/style.rs +++ b/examples/inputs_tour_steps/style.rs @@ -95,11 +95,11 @@ pub struct HSliderRectStyle; impl h_slider::StyleSheet for HSliderRectStyle { fn active(&self) -> h_slider::Style { h_slider::Style::Rect(h_slider::RectStyle { - back_empty_color: EMPTY_COLOR, - back_filled_color: FILLED_COLOR, - border_color: BORDER_COLOR, - border_radius: 2, - border_width: 1, + back_color: EMPTY_COLOR, + back_border_width: 1, + back_border_radius: 2, + back_border_color: BORDER_COLOR, + filled_color: FILLED_COLOR, handle_width: 4, handle_color: HANDLE_COLOR, handle_filled_gap: 1, @@ -110,7 +110,7 @@ impl h_slider::StyleSheet for HSliderRectStyle { let active = self.active(); if let h_slider::Style::Rect(active) = active { h_slider::Style::Rect(h_slider::RectStyle { - back_filled_color: FILLED_HOVER_COLOR, + filled_color: FILLED_HOVER_COLOR, handle_width: 5, ..active }) @@ -128,9 +128,9 @@ impl h_slider::StyleSheet for HSliderRectStyle { width: 3, offset: 2, placement: h_slider::ModRangePlacement::Bottom, - color_empty: Some(KNOB_ARC_EMPTY_COLOR), - color: KNOB_ARC_COLOR, - color_inverse: KNOB_ARC_RIGHT_COLOR, + empty_color: Some(KNOB_ARC_EMPTY_COLOR), + filled_color: KNOB_ARC_COLOR, + filled_inverse_color: KNOB_ARC_RIGHT_COLOR, }) } } @@ -141,13 +141,13 @@ pub struct VSliderRectStyle; impl v_slider::StyleSheet for VSliderRectStyle { fn active(&self) -> v_slider::Style { v_slider::Style::Rect(v_slider::RectStyle { - back_empty_color: EMPTY_COLOR, - back_filled_color: FILLED_COLOR, - border_color: BORDER_COLOR, - border_radius: 2, - border_width: 1, - handle_height: 4, + back_color: EMPTY_COLOR, + back_border_width: 1, + back_border_radius: 2, + back_border_color: BORDER_COLOR, + filled_color: FILLED_COLOR, handle_color: HANDLE_COLOR, + handle_height: 4, handle_filled_gap: 1, }) } @@ -156,7 +156,7 @@ impl v_slider::StyleSheet for VSliderRectStyle { let active = self.active(); if let v_slider::Style::Rect(active) = active { v_slider::Style::Rect(v_slider::RectStyle { - back_filled_color: FILLED_HOVER_COLOR, + filled_color: FILLED_HOVER_COLOR, handle_height: 5, ..active }) @@ -174,14 +174,14 @@ impl v_slider::StyleSheet for VSliderRectStyle { width: 0, offset: 10, placement: v_slider::ModRangePlacement::Center, - color_empty: None, - color: Color { + empty_color: None, + filled_color: Color { r: 0.0, g: 0.7, b: 0.0, a: 0.3, }, - color_inverse: Color { + filled_inverse_color: Color { r: 0.0, g: 0.7, b: 0.0, @@ -197,13 +197,12 @@ pub struct HSliderRectBipolarStyle; impl h_slider::StyleSheet for HSliderRectBipolarStyle { fn active(&self) -> h_slider::Style { h_slider::Style::RectBipolar(h_slider::RectBipolarStyle { - back_left_empty_color: EMPTY_COLOR, - back_left_filled_color: FILLED_COLOR, - back_right_empty_color: EMPTY_COLOR, - back_right_filled_color: Color::from_rgb(0.0, 0.605, 0.0), - border_color: BORDER_COLOR, - border_radius: 2, - border_width: 1, + back_color: EMPTY_COLOR, + back_border_width: 1, + back_border_radius: 2, + back_border_color: BORDER_COLOR, + left_filled_color: FILLED_COLOR, + right_filled_color: Color::from_rgb(0.0, 0.605, 0.0), handle_width: 4, handle_left_color: HANDLE_COLOR, handle_right_color: Color::from_rgb(0.0, 0.9, 0.0), @@ -216,8 +215,8 @@ impl h_slider::StyleSheet for HSliderRectBipolarStyle { let active = self.active(); if let h_slider::Style::RectBipolar(active) = active { h_slider::Style::RectBipolar(h_slider::RectBipolarStyle { - back_left_filled_color: FILLED_HOVER_COLOR, - back_right_filled_color: Color::from_rgb(0.0, 0.64, 0.0), + left_filled_color: FILLED_HOVER_COLOR, + right_filled_color: Color::from_rgb(0.0, 0.64, 0.0), handle_width: 5, ..active }) @@ -237,17 +236,16 @@ pub struct VSliderRectBipolarStyle; impl v_slider::StyleSheet for VSliderRectBipolarStyle { fn active(&self) -> v_slider::Style { v_slider::Style::RectBipolar(v_slider::RectBipolarStyle { - back_bottom_empty_color: EMPTY_COLOR, - back_bottom_filled_color: FILLED_COLOR, - back_top_empty_color: EMPTY_COLOR, - back_top_filled_color: Color::from_rgb(0.0, 0.605, 0.0), - border_color: BORDER_COLOR, - border_radius: 2, - border_width: 1, - handle_height: 4, + back_color: EMPTY_COLOR, + back_border_width: 1, + back_border_radius: 2, + back_border_color: BORDER_COLOR, + bottom_filled_color: FILLED_COLOR, + top_filled_color: Color::from_rgb(0.0, 0.605, 0.0), handle_bottom_color: HANDLE_COLOR, handle_top_color: Color::from_rgb(0.0, 0.9, 0.0), handle_center_color: Color::from_rgb(0.7, 0.7, 0.7), + handle_height: 4, handle_filled_gap: 1, }) } @@ -256,8 +254,8 @@ impl v_slider::StyleSheet for VSliderRectBipolarStyle { let active = self.active(); if let v_slider::Style::RectBipolar(active) = active { v_slider::Style::RectBipolar(v_slider::RectBipolarStyle { - back_bottom_filled_color: FILLED_HOVER_COLOR, - back_top_filled_color: Color::from_rgb(0.0, 0.64, 0.0), + bottom_filled_color: FILLED_HOVER_COLOR, + top_filled_color: Color::from_rgb(0.0, 0.64, 0.0), handle_height: 5, ..active }) @@ -281,7 +279,7 @@ impl h_slider::StyleSheet for HSliderTextureStyle { [0.0, 0.0, 0.0, 0.9].into(), [0.36, 0.36, 0.36, 0.75].into(), ), - rail_heights: (1, 2), + rail_widths: (1, 2), texture: self.0.clone(), handle_width: 38, texture_padding: None, @@ -298,9 +296,9 @@ impl h_slider::StyleSheet for HSliderTextureStyle { fn tick_mark_style(&self) -> Option { Some(h_slider::TickMarkStyle { - scale_tier_1: 0.85, - scale_tier_2: 0.8, - scale_tier_3: 0.75, + length_scale_tier_1: 0.85, + length_scale_tier_2: 0.8, + length_scale_tier_3: 0.75, width_tier_1: 2, width_tier_2: 1, @@ -311,7 +309,6 @@ impl h_slider::StyleSheet for HSliderTextureStyle { color_tier_3: [0.56, 0.56, 0.56, 0.75].into(), center_offset: 5, - handle_offset: 19, }) } } @@ -343,20 +340,19 @@ impl v_slider::StyleSheet for VSliderTextureStyle { fn tick_mark_style(&self) -> Option { Some(v_slider::TickMarkStyle { - scale_tier_1: 0.85, - scale_tier_2: 0.8, - scale_tier_3: 0.75, + length_scale_tier_1: 0.85, + length_scale_tier_2: 0.8, + length_scale_tier_3: 0.75, - height_tier_1: 2, - height_tier_2: 1, - height_tier_3: 1, + width_tier_1: 2, + width_tier_2: 1, + width_tier_3: 1, color_tier_1: [0.56, 0.56, 0.56, 0.75].into(), color_tier_2: [0.56, 0.56, 0.56, 0.75].into(), color_tier_3: [0.56, 0.56, 0.56, 0.75].into(), center_offset: 5, - handle_offset: 19, }) } } @@ -366,10 +362,10 @@ impl v_slider::StyleSheet for VSliderTextureStyle { pub struct KnobCustomStyleCircle; impl knob::StyleSheet for KnobCustomStyleCircle { fn active(&self) -> knob::Style { - knob::Style::VectorCircle(knob::VectorCircleStyle { - knob_color: KNOB_COLOR, - knob_border_width: 3, - knob_border_color: KNOB_BORDER_COLOR, + knob::Style::ClassicCircle(knob::ClassicCircleStyle { + color: KNOB_COLOR, + border_width: 3, + border_color: KNOB_BORDER_COLOR, notch_color: HANDLE_COLOR, notch_border_width: 1, notch_border_color: FILLED_COLOR, @@ -381,8 +377,8 @@ impl knob::StyleSheet for KnobCustomStyleCircle { #[allow(irrefutable_let_patterns)] fn hovered(&self) -> knob::Style { let active = self.active(); - if let knob::Style::VectorCircle(active) = self.active() { - knob::Style::VectorCircle(knob::VectorCircleStyle { + if let knob::Style::ClassicCircle(active) = self.active() { + knob::Style::ClassicCircle(knob::ClassicCircleStyle { notch_color: HANDLE_HOVER_COLOR, notch_border_color: FILLED_HOVER_COLOR, ..active @@ -400,9 +396,9 @@ impl knob::StyleSheet for KnobCustomStyleCircle { Some(knob::ValueRingStyle { width: 3.0, offset: 1.5, - color_empty: KNOB_ARC_EMPTY_COLOR, - color_left: KNOB_ARC_COLOR, - color_right: None, + empty_color: KNOB_ARC_EMPTY_COLOR, + left_filled_color: KNOB_ARC_COLOR, + right_filled_color: None, }) } @@ -410,9 +406,9 @@ impl knob::StyleSheet for KnobCustomStyleCircle { Some(knob::ModRangeRingStyle { width: 3.0, offset: 6.0, - color_empty: Some(KNOB_ARC_EMPTY_COLOR), - color: KNOB_ARC_RIGHT_COLOR, - color_inverse: KNOB_ARC_RIGHT_COLOR, + empty_color: Some(KNOB_ARC_EMPTY_COLOR), + filled_color: KNOB_ARC_RIGHT_COLOR, + filled_inverse_color: KNOB_ARC_RIGHT_COLOR, }) } } @@ -422,10 +418,10 @@ impl knob::StyleSheet for KnobCustomStyleCircle { pub struct KnobCustomStyleLine; impl knob::StyleSheet for KnobCustomStyleLine { fn active(&self) -> knob::Style { - knob::Style::VectorLine(knob::VectorLineStyle { - knob_color: KNOB_COLOR, - knob_border_width: 0, - knob_border_color: KNOB_BORDER_COLOR, + knob::Style::ClassicLine(knob::ClassicLineStyle { + color: KNOB_COLOR, + border_width: 0, + border_color: KNOB_BORDER_COLOR, notch_color: Color::from_rgb(0.0, 0.82, 0.0), notch_width: 3.5, notch_scale: 0.35.into(), @@ -446,9 +442,9 @@ impl knob::StyleSheet for KnobCustomStyleLine { Some(knob::ValueRingStyle { width: 2.5, offset: 2.0, - color_empty: KNOB_ARC_EMPTY_COLOR, - color_left: KNOB_ARC_COLOR, - color_right: Some(KNOB_ARC_RIGHT_COLOR), + empty_color: KNOB_ARC_EMPTY_COLOR, + left_filled_color: KNOB_ARC_COLOR, + right_filled_color: Some(KNOB_ARC_RIGHT_COLOR), }) } } @@ -459,9 +455,9 @@ pub struct KnobCustomArc; impl knob::StyleSheet for KnobCustomArc { fn active(&self) -> knob::Style { knob::Style::Arc(knob::ArcStyle { - arc_width: 3.15, - arc_empty_color: KNOB_ARC_EMPTY_COLOR, - arc_filled_color: KNOB_ARC_COLOR, + width: 3.15, + empty_color: KNOB_ARC_EMPTY_COLOR, + filled_color: KNOB_ARC_COLOR, notch: Some(knob::ArcNotch { width: 3.15, length_scale: 0.55.into(), @@ -486,9 +482,9 @@ impl knob::StyleSheet for KnobCustomArc { Some(knob::ModRangeRingStyle { width: 3.0, offset: 1.5, - color_empty: Some(KNOB_ARC_EMPTY_COLOR), - color: KNOB_ARC_COLOR, - color_inverse: KNOB_ARC_RIGHT_COLOR, + empty_color: Some(KNOB_ARC_EMPTY_COLOR), + filled_color: KNOB_ARC_COLOR, + filled_inverse_color: KNOB_ARC_RIGHT_COLOR, }) } } @@ -499,16 +495,16 @@ pub struct KnobCustomArcBipolar; impl knob::StyleSheet for KnobCustomArcBipolar { fn active(&self) -> knob::Style { knob::Style::ArcBipolar(knob::ArcBipolarStyle { - arc_width: 3.15, - arc_empty_color: KNOB_ARC_EMPTY_COLOR, - arc_left_color: KNOB_ARC_COLOR, - arc_right_color: KNOB_ARC_RIGHT_COLOR, + width: 3.15, + empty_color: KNOB_ARC_EMPTY_COLOR, + left_filled_color: KNOB_ARC_COLOR, + right_filled_color: KNOB_ARC_RIGHT_COLOR, notch: Some(knob::ArcBipolarNotch { width: 3.15, length_scale: 0.55.into(), - color_center: EMPTY_COLOR, - color_left: KNOB_ARC_COLOR, - color_right: KNOB_ARC_RIGHT_COLOR, + center_color: EMPTY_COLOR, + left_color: KNOB_ARC_COLOR, + right_color: KNOB_ARC_RIGHT_COLOR, }), }) } @@ -617,9 +613,9 @@ pub struct RampCustomStyle; impl ramp::StyleSheet for RampCustomStyle { fn active(&self) -> ramp::Style { ramp::Style { - background_color: KNOB_COLOR, - border_width: 2, - border_color: KNOB_BORDER_COLOR, + back_color: KNOB_COLOR, + back_border_width: 2, + back_border_color: KNOB_BORDER_COLOR, line_width: 2.0, line_center_color: Color::from_rgb(0.7, 0.7, 0.7), line_up_color: Color::from_rgb(0.0, 0.9, 0.0), diff --git a/examples/phase_meter/src/main.rs b/examples/phase_meter/src/main.rs index 09e88fe..001a0b6 100644 --- a/examples/phase_meter/src/main.rs +++ b/examples/phase_meter/src/main.rs @@ -3,7 +3,10 @@ use iced::{ Row, Settings, Subscription, Text, }; -use iced_audio::{knob, phase_meter, FloatRange, Knob, PhaseMeter}; +use iced_audio::{ + knob, phase_meter, FloatRange, Knob, PhaseMeter, TickMarkGroup, + TickMarkTier, +}; use std::time::Instant; @@ -36,6 +39,8 @@ struct PhaseMeterApp { phase_meter_default_state: phase_meter::State, phase_meter_custom_state: phase_meter::State, + tick_marks: TickMarkGroup, + current: Instant, } @@ -71,6 +76,13 @@ impl Application for PhaseMeterApp { }, ), + tick_marks: TickMarkGroup::subdivided( + 1, + 1, + 0, + Some(TickMarkTier::Two), + ), + current: Instant::now(), }, Command::none(), @@ -111,7 +123,8 @@ impl Application for PhaseMeterApp { Knob::new(&mut self.phase_knob_state, Message::ParamMoved); let phase_meter_default = - PhaseMeter::new(&mut self.phase_meter_default_state); + PhaseMeter::new(&mut self.phase_meter_default_state) + .tick_marks(&self.tick_marks); let phase_meter_custom = PhaseMeter::new(&mut self.phase_meter_custom_state) diff --git a/examples/reduction_meter/src/main.rs b/examples/reduction_meter/src/main.rs index b8f64f7..5dc1a3c 100644 --- a/examples/reduction_meter/src/main.rs +++ b/examples/reduction_meter/src/main.rs @@ -4,8 +4,8 @@ use iced::{ }; use iced_audio::{ - knob, reduction_meter, DBRange, Knob, ReductionMeter, TickMark, - TickMarkGroup, TickMarkTier, + bar_tick_marks, knob, reduction_meter, DBRange, Knob, ReductionMeter, + TickMark, TickMarkGroup, TickMarkTier, }; use std::time::Instant; @@ -85,7 +85,7 @@ impl Application for ReductionMeterApp { Some(0.0.into()), ), - tick_marks: TickMarkGroup::from_vec(vec![ + tick_marks: TickMarkGroup::new(vec![ TickMark { position: db_range.to_normal(-1.0), tier: TickMarkTier::One, @@ -286,8 +286,8 @@ impl reduction_meter::StyleSheet for CustomReductionMeterStyle { } } - fn tick_mark_style(&self) -> Option { - Some(reduction_meter::TickMarkStyle { + fn tick_mark_style(&self) -> Option { + Some(bar_tick_marks::Style { length_tier_1: 4, length_tier_2: 3, length_tier_3: 2, @@ -302,7 +302,7 @@ impl reduction_meter::StyleSheet for CustomReductionMeterStyle { offset: 2, - placement: reduction_meter::TickMarkPlacement::Right, + placement: bar_tick_marks::Placement::RightOrBottom, }) } } diff --git a/screenshots/DB_Meter.png b/screenshots/DB_Meter.png index 9642c7892bd907ef17f9f4a5508a982bed3d9934..4be11efd8b296d3fe75782f07d1a5dc3024ba9d8 100644 GIT binary patch literal 11024 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 m%=Y&b`hR4o{NLVWbJq`X`O{EbtsDq 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 Ka-}jRLH`S%E0S~o diff --git a/screenshots/HSliders.png b/screenshots/HSliders.png index 38dc819dfd1c618f03deacc19ce783f2f37c1cc2..4bb7bb3e10cc8722b7bb63b07c6f09e96e2138d6 100644 GIT binary patch literal 40467 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 yh%{ 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 H?EOCgK@^1( literal 40079 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 z

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 diff --git a/screenshots/Modulation_Ranges.png b/screenshots/Modulation_Ranges.png index d09b101237edebc6e9e90d93ec27b87af367c544..4a62586a2bd19b4218119a4f2b2920b91261890a 100644 GIT binary patch literal 46522 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 F{{V@TdYu3O literal 45672 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 JmTq7h@GmMGBSZiI literal 27841 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 Kf9BqwuKoutuhMA% diff --git a/screenshots/Reduction_Meter.png b/screenshots/Reduction_Meter.png index 5720417ffff89c6a6114a148af5fa92cab852260..3c611336e1479119abfc7da3352d7fd9653aa781 100644 GIT binary patch literal 8126 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 literal 8266 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 literal 11180 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

gOk39Y~ZelToZJ9Q(w=v(09tK-<0MUg+Opz;0!m z9noBV&|>S`o;siLnmFkjv~ajwII?v>Te@~fX`jBRqvibc&`vuC{&}ocuG|R?)nEdj zFqd9DJg=&%3ZwX#k%>tYYAtb5S3A7fGshz-gSfF$lf{}sgCRDCh_)!G%ehX0JIu7S zNrP22mlqCf6S=h)8CD}*_o{LI(wKF=aB%c*iR#p}OtibMWsT^5BlyT8J*%vQfRFU6CMRFMs z+wU!*!EXJxurNE@EW27r7i!xNktWS?`2@!=&0hBc_8Hzcb+N7(3p~f0%7R&A(4^ZdwZ6u zvbIuE!HS2naGU<*T-ZjVMQ(2yL_U5bc64;Ktsb{rUKz+7caYFB)YVj1cLh*D@iK@C z9YrbVOsVE_&Sk&9lDuCjo&KFd{2D5pMM2u2i*TMp6d;~oe}6y5#2dpKE|=##CW0va z<{mQ(3lC+sm(QQ09G#r<9S)75$7@VfSnan8^7B*pk+3(HTP)h{>U2b-J2*JJqPwMB z>l~Z;f*-b#ySuyTOar=5u@bg`fIuXt-Yp&@4GlCB5|UrZ$utihq<8LC`}yGl`ktJ!xx}u;OPcz zn9dG4r`L41inVdFk3mT?M3&AR>Pjp+21dcoj(KrWd3kyJ&`<=ca#=87V!igqoSfgw zD=G?LY4f0Jq|G;yY5~(hJ`6cJrE9-_{ZedemG2vHq!bNSiQYh*RJbL^%3VK$=U`I!QO0|7h*!S;S zy|N!a7635b((nA-5#7|<+N$57RK6f$W;pF4XRoKHH_pKp_C`TppNW}~QQe>8OH*XpOb|*hvtk4$# zq!A#Vr2z z?Y}`Ks83+0@fmEvF|%9!9uo52V01A|)g8Z?ba#7u=A1M?KVPwSZgaEiv=fL?fA4sW zQ%uA{yvs#;p|3P;$X3Sc)2B~4FUlXKP&uO14Tf^GiHL~Y2g^BBjJ{$}!&O%8WGfcG zSr2+~JL+vSs8(Fg;Q)OW;{zY%%eNzV*Z3GZea2&_59rje*yJYVM#Fh-$ET--MMa$1 z15Kk#d`AR+O;uwzV2|fmRHh~;b3j)rw#s5X0$aqe$(KmE0`60d#A|Ej!;g)fzL4~WV)C~c`TpSWMPTlwqc*d(0f1Fg8 zS&tZ5SpH31J)4hED{_8${QC(2g5p?Jc&JI!pqF1CeGetc4%6Dmg)XDs3r^AWZF(&U zYDYM82a^t)+ZRhK9|Tn1Q)x9eG`P#%`<0On%XZ{)60OS3&22c4A-gtR@4>>!S=1R? z%TRGcfK9dP4|9C58Kq3F_bRqPLqmh@^6cDPaW0+K+Gw#s)l^!^nXE?;EHieiT6u}i z`e?Cx%};|267FIZ*M716aZ`X0e0_dRnxD0`o05mPF)+2bTuzFMd88-}s2#V^5U{TR zfFo9G{vQ7S$^y9TMZ*e836!AarKK@uYnNFp22M}U_56HUWr>D{=05nLI6%gzm^!1r zr8$6tf@m#}>REK#>TtdmUgx4ha%qedl+}8d%TqPulNM^1EQ|IakQUB>vySgMY*wcZ zKH?J)ph}gDUq}JA!kTuDXoj0qmEDQopbhsedCe_L!^zAozF3TRnPizSEG(Scn1Y*_ zB*i%4bUZQ@eeq)8cur6IPZdL+iCg2Qg zTCMlvor2s`XEI-DJuRoDK+f&D!00A;oa zIEL!f=2$6vZijDasZH!MG?6w3?{TKxgY|l0=^`!<4ZkCmmZN)`>h=3k%zNyps<2tk-p{do0N*)u6$yyh+ z?!zw^@%^8t>)ggqq2F-v#_NQsD%HLH!5iX04GPNE)|O&lhCsygVl#5oWFhaQ?Hr!v za_S>S5pd;k81qMw^lkdyBm6jv|`;^+WKaj!VN!ZjDmDELtN`0r9N8Hc9m zPl_X^&Bc+Ck$~1!gHS6#(-saOxsd?&n6zqUd)FPv?kEzFxn}ff7bBCkw`}gm= zuyfPX(;1nWKTv#nd90sVR3wu+pT-Ww7?)ar5}IZUvhjbVq|kD45kVp`CuFLEloaXo#P`SCgx_!)d^Acz}M2! zsydu>7=OJ8G^Hg&HnX4V2QdXj+v>^_t!CVS;|Fr_*`Oq4%HssVO+a&6 zphT{6VX2BBeLiLN@hhcD>-D0P_s>QKQvDK{1`70hYn&YFkE6g$hHH;}sBy)H8L^6n zpS`=wqAY{`EFkPm}H) z*Jz92pFi)x2IVlD6-AVrKV4lfMMbY!uMO8bM2&X&e$VpL1hu$G@CIoujt%C zMtb_}nHdyZ&UJ^O^4y3C<_WsR0$5vI1n! zSij?&stj-g_?iV7ViCi7XK(K}biSTkwOT&>gyCWNNz`Y_tB)T)My}r3*;#o6pOV)V z+^(g6t*LAor9>-_pT`ClWgJuUS-vvpP&EQoZaiUAPs_w42&AD|xC}8{TV7zd0SJqw zO2a@Yl^E8CvnrV`b<-e>gRh+ar(@;|j$hUy2swsEJK!%e~21H*PeC+afrR#4QIULYZ7tfc-1X$Eg42~F&wgxZ+?lFIXWy5Z38Zqe zZ;n!}*d-lKgYU)i3rnCgmfs7QP7Yd{e&$vMdF%fASVU#l($dm!!r+1A<9WeXDqOnQ zxVZl=ykmd-*n;kg#b+8f=nxGaz3pPGjjh`URaMncOzMo%Ef9Nb50h7=fwpa)O-xKs zI2IVcp$)fx7O>pw;krx^-WD*hyK9cFhJ=i z&Cj(2S?ofORM0tmK2JrAXQ#N)_s)(&wcPy0{X?S7@$$xMwQ}?1ggOz9Ye#)=_9Ydl ztFOt78TF^Or3W)x4RDi!obSGC@(w!I^RBpO98ffYzEVRGncv4fh6T4Qpqy8t*36gB zE=d-E-qlhqx6vf0tn3fBXda)fTwXA#VoxE=Wjfe$ku|DYS`sH1ja6={KUTuJIcTn^ z7`@fNbv0e4)j;xNd<)@I_GtQ}hmRl6J@fkKMeY1tL4l0wnf(`)N^3KK2=Qt<{5bQ| zT42XiaT7>hnO~Vn(S4cVD18G5=XO86G{wBbps-R_>aSm0`k8Uu8HZ6k#r2YOCMXm0f(xgv2j50tARmdBBi5ulcuW3zZTJJ5$u6V8xz&_ zmZ--%pm;5v$!MJRP^`EV?yNt(Zb3v|#f3vDl0?MhHRAU_gK%r;Bki5&+ z?V&Y3sobnFC_$?x7cXW`={_%D%cxh-%K0T*x_>z36128vxG`h#yn|O%xZ?YY`^wSl z6LQ+;$0dibXRgKWf||Jnuob7(rQyr<@l!a(++*tc!i+=j6y@dnPf+!X3Wey@)%N?d zcx)DXOYbKWUO^w|JCW&y)3ux9D{wS@m5z?Czmi2_fJ>%apNEf6aq&1NCT7l$y=FQ^ zE?2dq(x{i<;NW2V)YTQ0El1MR(<5KwX!kQb9q06L)1;gF6_gBc#eYk5#q!IU1T=on zT!pV%GE)Xb*&^oP9!P#%ez|_TOpvN+DQAEExSOy=%xPCt`t2CZyQ#YNUrm zi%-|!n(VZQs`m$#_E%VK0EHr#cDf<}Zo}oF%Vmp1WqJAXdWO>R-#Vb$b5^GVUpPEL z=D?!5IRb=N&S4J}_vo( ztO7Oaw^dWe-@o<9@dqh48#DVYL!$>K{ub0%p4aNAt;;`9A$_*COk?GU5MF8{S{fu)j>RX*doA_2Q%z^M6al+ zsZ||}8dM#NN3adF-PL+7(J>IsWl**ZqJwD=njC%TU!>5g=A{Qf6Wioofb+Nwy$w49 z4S;+-VqSWFuh@e}ItM+AnA284Rh7#5Xa>{R9%`+Akb*Abywf>A`~d7C5T>@4Q{&D1 z5T)jD5_BSPhtlPoLGxMy-4diWa6ZzkrUjzjdV-V)Xx3}UdA_hqpl{@$w;71|Q1g5T z&lKXAa>nhFYVo>UR5j-e7VClBz9~F|NG(X=@k0!uYv|}2AOrH18>I$-ICrS}N9v@D z{+Yl_F$q=GxMoa-f&GWf5@3M#Q`PNlRBjf4_m&SfPx$xmzro>=mysdd-QCp!@VxMh zj)j(1SgR%jKPY2!uBxrIwX7w9Srx?SPioG`^kZda_YQmabR7~Ui?y>B>WwobEuA*2 z4~LulNEE=N5`XvZGd{JzC(zsx_BgJU!o^xzRwkd_u2gEQ4K5)ID{BClf(2j~=WW)U z2A-Zl+4u~J!a2l-G+;IO@J!x#vdT^$Kjidmw`&A=UQ}(ZV5P<44IFH2P4K)l5QBMR zV?+OR0u-^#?febw3gZSRA?x7%BO-!?-|^@n^1$IKu`n`vAD^5QApO3R#5V$d3en>XE3*IY zi3^_~7UVYe^9rlgVZ=PzeW|W~*JSGbMEt6KMz%7W4zQ{BN<(-Q+z$Z-AYk`fXsCj) z@D)FAZ*>xO)lVQheY$buhVtkrm1FvudO3800YwZW@aJr`+rZ^DRqZPHj3+><1#Hzy zpT8HB8HG(pp!Hl-uEMGkM2-(X?tbd2hPdanHvo>%DgRoG5mnhswp?*KdwyI8x7A*xtxMdu7D_;(7X0Nu>lf zP~?H|Q52~}gFbU&ZfdFyMy7iNP5)%IL%DYU;orUtaH>E{D^wf-wyU&RRdceEDYo7P zYLBM2wzd`9&j*OiBrYjQ;>gAaPZW|(a~+w?@L3EfpcXy$s@dxU{q-%$;t^$zfL5ob z9pkJz1U{vvj4|Vpu@(Z|=e1rVg+|m^iT9oYWEaD!nme#Z-Q#M8r9dDQef0|K2DN}c zaEjc&=fsB|6h`c0h%4Kzxa=H2-3t@q0_Uy-d zMlgk{ju&EHy?KM^=GOu|Pl2_~00*ryu+tv7Q8sRm!noYNr!I@ z+VImuXFwVO`t73y+TxRa1#Z!p-?={No`Mubh)?yjZl=*|8{X>rNgy~W2#SYF06uZb zNT4{V7NB}w17#qGs{`zB0s;b8P!b3ET|!=c0b%SO9o;n`IJf$PZCbxS;DtR8wVh#^|5ON9D`NoVgJm_73Eq0w{ox4RDz@p#wG$oT7sy5LLdVg&O;uamtHsS zbOX|dIETV&f-uO~HjnfHn?~;g*`J-jgr+ThI`_d@_gj9xS@p))N3iaIG(ucMSVM#6 zm-K_T5)wT*D*Tq~qeO7*+$*O3&YOdJd-uVE>kuzd_pk5my#?F-EAacxyAYrMHyYJ1 zt2$sbN_hWDGbuFg;Mmvzh=ULk5hX%o9>6Fdby47E+YLDEAlz4|&apA#d&&&)fp4SQ z*m;tr_4zXc9F35O2+VTjKqT=7j%!|V@%(`th?5kRi8ZI%uU}sWQ!f}?u-REnFfSq_ zBNM!Mvr?+DMw;%U*{oDJWb|ml^$aDyaqH_;{raKKSE*{`_%;$TZ}zdLVSRw>pH6 zgh(pjLJ>K(evFBO<7QxB;44YQ{VQgZ`zb`Y=mx?|5}cj=3uib_kf7+Purd&8QHE3z zV(INF7U`lvjRo0^dqm*qY0}*J@wUu>BLsTXoBhdn?e`eZ&dzLe0q<5v=v-c$gCKJ2 zhrr{uR~c*`_n&wZetw!Z$cg(8@vs80yvO)=`J-e`xk3z35P`NTs;5*%hDq=twsWK=T(*Pg-ad zQ1*eHxx=G?@>j;`&jI&*myPWPXqezA!fahL;MkrN2@19ea5g}r_XhTec=|DdhQkj@ zNwIRJkg*Nu%V;PwGqbAcpJipF&}N^%d4mlL(^F!kgiHF+6-SxS+`?iTDk!4cK+Odo z;|7Q#-LSWC$sS!36FZA9herze#aHj%c_t^*kB^UcXUH;x%&QIpVb$0xh=4RV(?Zdt zr>9>UFMsTL4Nr{W{_V#`buSF#QOn&(2kuZ2JCb5J7 z0l`VX0gkl1g2I5}jb_qYw{9U}NwDH9*M@H*i8~zjDk+`g7ybDbiGmv80)ZEfndRCh%2a1bv->d z0o(%<^crPN10(W_m)9KNCtXl&z#a03Y+t@J#Yf2{TbGNcvZX5IKOwdQ{@!n3qeyHE z9FVHhjY|1^P4wK8VyKkBi9LY^!DuHEf;d^e|2CTQI*4V;6|h?15DE;%pGCD{3QI$6$%Do;fY5?NBhE|n1vuI@&VY`*jr0I_xwpYuJBv0 zO>M0bMtJ1)C<2NqNz!% zSYqe{h4nwzC%e)MpPCjFjL&^*VG5goeb5ifE;G zVqzGFl`IgC1<RKuY*{G}M)=SIdohgGXsYUi~5-zUm6aO5pO$0uDso@GvP* z21Z`E!6!i{pWTCk&rY zsx=J$JBV^$U=?=)UxJ+#%lFk726TCONs+aNBq3PWrr^KY=cWpDZ(mSqN`}B`hg=10 z>NOBGs)m5YmRrJaX`IwoC=d|bBLvvlgP`xKDw>#>Aa*Y{ z4o>+oXgM0FVV!uVW~h8+#|S?~$;0~bm_V;<9~p@PUT3xo8*=!+=xrPb{ZIJ$3nBYp z94Eu14aoBG?%v)fNP)NyRo6g)90rr;TB;x%qP`-27DV;8(rHBH* zTxPvcQsDT@`PAik{HV1&xRYa5c8_@^&Bl{cQ!RF(!$*R;jQXY0bzGyUcP?rRlSy|^7Ft1&MdxC6iOe(J+=$=At;0<$JtwZ=?Ozx2r_zQJ0 z@o+%^@lE11FM(;!F3>YDJVLEymriOzZ67}a> z29K^sxVvBZA?QK{((?=0k;qBy;*`B@v()XzlU=5xEGvtikn-jc3(MO%>!rc$n9%|V zT|czj`SgR&$~UHqbZ!TUFF1WvdI9g5K-Uvw1a~O@rumw zT>VON5NCLKdAC|AZ{9>Oe@5&*nX#dV&4}((R#|CqW(31-paBfH7Mt){Rv8FR#=nr% z-g>X*>yR3~p}|a^^q?1j9TJB?0=IBX+<`1N*43flBq}#{H`}il50#1i1ka`gq`$5B z%QMXT?|w{M&qAmTR3-u>F9AKeCs70wR0Bj*f#*q%Db>gQ*=@F_G{xhcRotvA%s(pU zC06|aq(frRM*p2<2;o7Av z2aYleIhkgNn@Y*beuc%DgKu+oe`gJY>Vu(wih)|2tfqiNn0r{UB>W*T?6LEit*Qyh z3&{wu8u!*lLSt&dx`p(a#{SBHe6c=}O@0BS<}mJ*LW(&p-N|QVlP;p|CZyfL?A1Rr zB4$_3+MfOSq-XoW(Vop6zlqu&1|mjvph#75A`1vMnD+}m;%)0d*o+JhV$#zefa{C) z^5skAGE+2A0T;q;z^jIk=nn02b3Zq7U%>RpTVDQYYnzi`E@=s-5#dzL<|;OuYu13s z2jKIMs}nzcX6wS+=BqrE`>qdncN4%7HMO#8LOu<)CNg&+c(!#F7~020b3zXrm>>BG zVpLVv&d!cHlt|m|Cn}F&bOJIa{t(m=Vj(ub6F{khtQQHpmiFE~7{Er(F)jsnR_A6U zOe}%U2U{Fst>HPomohhfM3LA!T#iS)^T~C=^S#^Pfy0|`fnR}8T~jl&nO+EsL`A{S z%@bbUyBr+vjcQh&bilQKNO_CUM^&ia80?Z$|DjNlYLyDhWp~iqAx{**^vIXJq_fccEjhcVu*w7S!X($w?Tx^MIHL z^ePY~^PNtu&lUwQg+L8PtYrA3CrH=|C|m>7q;9$~5e0}Wv#HhiLq-!JUC3-4EHpCn zhomf!P?-KRDB=$d23e3`G#Kr!KvE$MQfHv^P`i~7QEpHKckZyJ;Ue+|f|bGGnMEdE z;PI3jd&4wGMAgf-w?^Ug|57j$87Mt~DWB2nv>D!X0VXE~&qdh>9NIVBP>&2kxEeR{)h z<;^(e#SM|$zh0STF_Kaw$xE@MMP_k`Y6Z|Y-@5%iN#2J(pH93#fP-|19z&^Sg&c@BeJ|!@QfoSguBi(%I$FXshxGX#l{S7!~DEV{n(h2cR;{E zSsWxcVMfUyi}OJ%^xCgb;jp0!4j$Po59P)q$CLPk%JFC`5iDQEJ*YWb2M26LE6jp| zYET4fAHt7>#YNF)Tm)@g)I3?S+_z?%a5P{Cxr4G;fd_Zh&>9BAbLmF!yWC)1u;COn z05;%i&5&V&tElXjZi8}!4SE~_h%d~@wXnFjd@wgJ00hVimd>v~LtXKLx!apC;P*`9 zPcY3&?q8^AU*JGphZ;U0ulI4wNveNWy+7?ec^faf5CP!GuL!CJh2-%@9^j<+N-F@WT*_CRm)dU{<#}x&V!aq&{$K4L~|tHil>XVQ;EEtq$Jy;EgI0~5~b6pr>9+EqAwBtm7U;BdZcx97hdsxz}raxRJvC#4;=|^h6sVl z@?gi2Sp{5Vk21NhiZ;mMII#^|pdg9a4W=KQK0+9(p*Uc5klV*!R3JYW-8<6>;{Git` zoX`!+lcCSHjJp5h*3I`}z)8gbh5i@!Sn3vXdIplNR}MWS}f<>p_XQHOnb zMlCA(D*`&#Ly!a!@eKHt+@{Vg3JO1%_Cn&zDhD8pz%;8^;pYx0*?<=1q0}QShdhRf z7@UK8paR=#Bah|f*9aj35)VwLjh&r;F#NUK~=6d_aI>y#F|`y%lDd zR!fp6B~-kgaS7HL_P+zqnuRg@kARg(;@~}w)``>%uOsAHQTLOCMh4Ny+gu9XfCzX= zCfj!Q17jf72iFOs9&#qVs${fsbqPuXo7Rs}71z)F{X&=NEOc-*=?&?;h>1ME|3kc4)KcDyG->q?dxoPz}yc^H2>GfD9<~wUDHm5S^@4wUTtA z$ajZqndtKuh_`-m9fEHVqy2aNHcUHYiQ?lF!q5Fu{+8914D9Tm{V*XIXaP1?n_y z76Fi6#hfyZK086GB#=ywin_a_a%JJy+%i1Q4iFmHIihoEYJ|GNN)8)S5+bQWYQWvLoNQQ2^a9n82Rm8~|F*Nl{mnupe1Wqm9ABY0C311p6<@(-@N9SlhR!FguOp~gzxo4_f! z3hsu5(NHjQYMJfz0&PuG2ED9UQ-KYB9|ES5rg9@2*BlEcq0^!NgbR^PPC*%^v271ypC^=| zNY26r)bG?@E9=t<|m^W zRFrTScpN>@lx3+wsz@|M1kvst8M%hLm<8;rE4m77b%!UDZ7ByC5SA-(k$uC%0bov( z=@9Ck%b}s6XG<96XvtbN6hn4E+O z*mN`$fWaj9K7kTHWZ9FIfuypI{He#{+ie#0>_b}23VvmY;|&ayhwGF2jjHZzr$nT# zh*?TYrVLjw>-p3W6-07tVq!Vg16V25-M6p~QL*D%E1+6TE2et4akQh2gIe6e*4FsT zpn*8Q@M_$v1gd@qC#Ow0kx0ddK6V4trgd}s^J8nsylRacQpHM6H)M+1UJrCFe%pA2 z=c>oms8sql@7_I2jo5j-%#wTYACU*wBFf~q1Qmi|S1@l#r6iSV@bT%hXO55?Qg`hV z0^b9*`YzmX6Syo`p}Ul0gaLO!ZVN)iTi4THA_xwSox@8Mx*v^WWh~y1*O7t}1A-NH z2)&^i2bEzd@3u1mn5#MsHxe%2$Wzp%zL*2AV$$Tyy(fN+1V4ks`PrWb2&x3!pmqC* zC*s-kk2>;bQV-1tO{!4;`Pfg$i)9!m$@yqq1{RXK z;Dvw%M4pa9Tuwk#p`iec*Fa~An`=S_Q+Ecl61^b9sh$#Lv_V03TG*jz`w6fCP6~;w zfVMVtYkW)y@6+gHpaNpY3^p%AMo+G4XlK3U$&>zBSzAyo-EFTUS?NR3B@T+i{OqO4 zd@;Z-S}4O|xDkjusVFa38z@0N+7BCw>B%92MI?z~j>HJokX2RO$y`_!PJP@fO-Mo|^N-SQj zPRt165Xs2mMz!&<1b0C6la`?OZHO+%SamfJ%AS<3^ixH|HYNUg{X7dVMUt9o4r0^6&) z@S7F=ha=&QV!bpgkTECG6QJioKKIv7tU&ABBGSz@gyx#!4PqTkIMh5$*=W~q+_;1S z9w6Sy;qr@n=-Pi`wYw&u(>(R=(Q=j9aSbxPL9q|usVLzx=uc>$1U z9GtMbF6L*?N_w|hYQ*U#FVxl7`vK>`&*&v2(ykRtzb#vgb$h`%;MwjVh_#Yaa@G*8a2*hy70`(dI$PXFzO66y$`&1!jTE!rW9#VX_K}7O>S{pn{MXs&CW%`=yhBK!9Sg6GI_5ujrO~ zdSu(St-ySn*!7^6Y(5Sd0)bPgR4OUH0o?cYFJ+5K*^kAQ#lRmtr=Iz8HfG2`6tp&QKEL z9&!_^mA$=roPvQk=LImF!CAPY(3HKswY7DFWIfg?O73_YOR$PvCWhG|-$kL{z|X8) zvxB_J&CttR4AzF_IgfG~JwI#OQXjW6YsfbsAk`1A!_b*y_g?bIP_uuwd-DR}Mtk#5 zV2Rk~w~cZEY82RT0cSS6(S4QGZb>Dg#kyNBc_b0TSQ!0HNr`X3g0G>j7bitIqB#lF z?19(%@C^af#aK>_f7_Xui%Tii)at2RU;6pR$zz|h&1@z1rZXQ6K`I^2HhasrSktdW z8C6-^&V%RYWR!_*gnzx=x&MaF=!Py!+-C7AUfxv0e2n4Xs*~|5lt(%~zFvs$CVruk z3x!Z{-a37VP%j|g>$;~i7L_z31iYkByJ<|N7F3Xs@n2kPU5liN6-M+19-og-_pVfg zbHPXuc@zKkxjSYn3U%vSU0*32X>WOVIx17Y-|<^#pF+m1fPh!nKMyZD@hOR?=?Dpl z3;f$t`5bjv>^r@l2s`^7)*<&B-TBW>=o`vk4hRruuVnZfHSIblc&~FfTW61s!oFJ< z@dxth6@@pto1Dj!(-i^(lHGY0TdM!N=biX`uib$t1w)(rm>fZ>8{hmCM3h#;XLuRO zJ`>yAPjT>|m|X@2q66a2v7Ot$sN=@)f)FoKJFs?g#JM>+G0RUi{0+ApgY2W!hfDE- zABJZyX9^4qM1Q4@+FK%Dllo9%Eh)}~^rR8}*~60m>#O@`HCX*^5&!+iTrcLL zbo=^Vj?pJ}QW@#^qa9g$pBYJofQ9DT_EYa}_cC>)R>7(c1;|LO1iuNUUO z|JcO0GblDFAjq_&ntg08l{UT{8C}RsH5p=uAxIK&%cB-)&#%zwL4#5(44|3pXA&J=MPQMNe0$mjHUW zU7$6FW!ghcI$#ZbHxg((I&Z73q4?~pGQkQ$ks|#D7|R*2P98sA-qRz1@mS{IT|64S zqpPc~yo-!no8ikq0at~qb1!+HhIN7!WE&a^&`aY5SLK^iTNto0SJO7k38ku#mrj5A zd}%-`>%T3}|9R8?^K2YbHscrFAMG)xYIjkiT2F@`;ns=CX*?bE(D-kxO&IOfJL-J% z?C0Zev>=~o7=^I)iq6P-Y@BONb>rVp=#oxeWo9^msZE1QovD_5ayF5r@P_BRI#TM% zY5d8LzN2r?q%V-!kn_Nk!cnO^dD|1s+R`^EjAZO=PqXJxql zvxq9h{(Z;J#Q@m&ize)E5dC&$x54tozjkc*!wvo`xc|qm*`0aB_^A5LTaSObZrJfT zEB9&hrD8cY6#AhCHr)!^NeA>WCc`YBaVr38Vh!a?8_!2g)? zH)q0e%n}oRAT)Pc|6rZo@$K`S&5)Ue12L1{Xy}gp?vEp4TT>MG}rwYA&)FDU3Ka2@81G3Jo;R zXOL@Tf4Sc6K+{6WMMf9HozF98W+NCcm6WLXN}rwE4E0dw8@c<=g^q(F0B05uE7D;xLS zm(jG|un%&VEX?B4ji0aZ5j^$b=Sz{8WF!VMo5Oen6vVt;e3+tu83*7+^HL8#pjnG) z!D8V%+D& z@3`8R7lpgVcFY0(j6+ zo$4x(6Ja>yLoAk{FsQ;{Zycj0&K&{+*hr^Z(^sR1Z&~<7M-yAtl6H9StP*wyVa&kL zfZ&po&cI1fM5wdThVU;#w7}JY@>$u@anwT@cm-BT6{bK99$MlZ5pOP+rkNJz)=>LX zZ^y)h0x&&oB8#&+fam~#Vv?18CT_D@uSGU_JPi92=qhQ)k`HI{)2i)+5_Sb7o{!cYZ#y6@}6o9HiB_5OstQ%zPWOPai~84*pOdb_kdWk6it<0k<~- zjln#-7ji{k@F^af6<>p&=Kh3kTo|E&gPsCt&(}a)6Oae#3#F}VlI!yG@_Ip9Ax@Xz zxzYo>Mx#&xuLD9O0S<;9-y2QyIuQ|ug}E^=Y?8-@W6KQpm7gcgj^C$xKo7g^EBp~- zfwlAv3?z7}RK0kSR+J99k5b^p#U78O`Du{GY9O240_%viD(?5ZzKF$EMs zENmfYA+L|J6PgABT!)Mk5*E>fw z>S|3>e*|?kSmfaUR{ekdo3`5bt5Wx(oS@4MPL(}V}dKf8-7%pH|as`i@U{@4xOaW0x_9Dd)T0CAkY5=DFOAd*y z^7E7gH<}Q@k#56X#$(mvyz}#SfV~yZ4(<-<7i6LbpOdANQz8GWxzP0edN7#rd?n8q=57IA-;o-OR!;hrLKCA%mZZyDP_PlDF+sI0|+rzcr2KsejAN< zQK>}PMl_UwGaNp>UQK8c=wnF7u&V>abTTT!$7OG8Z$J&PQ71Bh)XIv%88Y|p-770E zr$Ol5aQzPV>uNDEmsQOtK`hhKdU1{})JFllJ-s9yK6+MVr~`tP-F{gBk0X%-zX&52 z8VY$vn7TF>z9f+!m{3{i!km4`hBh$a2}ARdP85@$`eoq2V9(G)3dVq%T@7p0NC3ZE$X$RsMV4MK2wBt66 zkmy9Dhe{ycBN1Sf_yT3Ww9~Mz^BdF4h&AP1U3?&dT*mwp39K<*lNolw&pwRZN#5;4 zlkYb5n6fj^b<*a^@%gcZ`2!Te^&%q7K7x!Ope~`1xqk&fxGPAl%ODJ8!}=0JKCuKF z$jIXxaL;AXlIGVy7O>S4^X7_JHQy^p0F#rLa`$0j@g7Gq^226aMy^xtu@_jAODKJa zyd$>wh6>Qxt^nvWOK3oDV@Bp)g^Hx5Ep+V;AqpG9Q>>#G3?lquV+EluJnR7u@Q@EY zT*>4vqgysiMcictF-qF*F_T^6wP(*BAHmtNp%Gwpyi*{SG7+`{z&$z7>$r7Vxb|U% z>v&*ecygfj-h_c9)nl`m*q-5*v~bE!C=?~0L;=sojRPj;Z4*#&7scIzrN4W?Ra^U7 z&3P&tEvZ%r7oz4T1R8o2L2!Bw0CG&6nL)~<{;sB#Qgi@^p=G+4@Dt;SZo1x0bswoHN zyY*9CbEdff@qh)FkEFWEKO5g_VfZh)^{_4GAuw-ept!@E#;@VeG7$bT>c==g@%wr3 zr+r`)ft1CAT;?yxcmy+?1mxuQvc20e`M}*Usgk7+0M_MjX z8u4@Wy%Xpu9KWht7F!uBd# znQPpG9&EC)vO?CvIMNRbgFC2{`TA?0bmDvKj?csGNEk6nI|Er-n=Xb-tF{^zj~327OD?3JOt9+Rud-{DKr_xCWQl55~~bZ{UnP%!J_e;%|< zIe|upFp!`c4Z9`0{0=HpWM}w91l!ciq6 zq@|VB5~#hgr{GTes8JU;a4t;w(R(CgeSw4HQx-Sx-lfksd90UD&~w#0K`-UCIMVS-ybG76R%3M%JjJM+VQM=n+EY zj8U$u;@S<2O9+tzOOPn3APPFw7)t}K+GWI+)FGB+1940af5h)SU=0#3%IoWwW495tTuWuO z{rnSBPMqn?&G_)=zKg4?6$r}HXv87MVxF9gzYy^CT@ouWVba0dzCOP$m4$w_3aU@i ze5y_dMq3;;Dn*n#2W^2ke(8}Mt%j{p>}~-BkeM7fd-8bU$JP? z926l;k_Ho&_*+7pv1X(>#TS$#OGKfOkDZX(9C>bwWQ2Njm@w?fP z754mWh=Aub4emyAYst|pTXc0Iju7ZmGKcoVchcg=;7f3Rn(j%Pt;JN+%Ksc>(Ty3# z@^F)9M0Njy@E?F1bx)+B7N2e_o%cif8-S%9uX24VUC&XM{`dBSnNY)NGHZrl&@!a$o+PNpuK^duSmMOQCXP}EJ)CEGO{z;?r3iyZd0Tj#@>>g zC;;IQmT)M}2?0SVc7KoG)vH$Mv}<3#Ze|n!JsDDGa`FTej!h5ua9}&9))l!gqZtwuf2%5~%39dxwRv_B9n1iPw4|s)~qJouAaF^r(AdJ`oeo*VXnq7H( zq1BzZ?GlbmFN#df$LB<`c^tuEfR5CHEZM#SjEdv2CkU#E1jRhpl4c-|hku>?Js9CG zP;P`(N+PMFLd4>sN1F%J&j2XEcm`K*&`w;5@i3@Pex9cnOv`n0=?Xt}BexQx4-=Ef zLurGr)PXdjWyC8&>6Ykee!C4pvoTg}sY&65jN0yCA3nd!ZMS~b6|$S3&Z|6KZ4Wdy9vKRpI`Lgg=zpSk#lp`{vM{|iH z2A%U_!X8T@^l{QCt=Yx`%bF24ASbj?OagEzZ*E>i{wj)J$|TPlbp}C6YhS%uGVaPe zCx1YM&g{+e?>~OLZI?d8t!T@YXkk46_O4=y>!kKv+bqtgX&L*7XPRu7#-#!}w$M~E z9--ufSvLk?S&jqfdR>U5o1ET(E!u>BL;nD4s}@9z#dUUjIG!FV*KLAnp>;=zli(7;@x{ec_GPaajzBG+0N=&S4m;??*0b0BsZw{a5s zXAq);&A#)tgRdMmh6P~P389> zM-j}>s&o6$-jK=$0_p&4b{dy14kAs19e6)>^@eC?bwg`xi}qqSd9bzCF)jg04T$|3 z`eRN7+iSZwu?Wyty?e(&Ksc-~K$=8{4~rmTApw%D9{i!L0V8d9`;}hv_y!_9p{>Bx zHh?4#&~1R+lSth=FyM>OFNBSa&Wmx`vXtzlzr>$DJK+e)#W)}<;w^fl#65rJN)J#C z661NcSa=`uiklx0SSUm8avW;l17DQJMS0aK9-aU^#M^mqlX_RR`t;HiMSBtaokR#C zct@j@Vz#iED^NXeiy8>b8?7@E7S6*Rq5LyDLI}vwaW0= z$^CY~_yDib0ox@x1y$NOq)ir}9VM2?Bdwsjj5ja!oQA*w8aZFs^Uz_jrkm*p&?MDcy#5921GX~_dkdxx=UJ9H7_N|Vym{1jh z_tUngGcfs6zYVv{_WcjGs-Zw+|TmDeo=p$xmPtBdD0U#ry4S&qtie+g%apd_du+L;%C6Ad_b!Gzz89E z6Eh7`V8X;6^Eih2@1b6TK-yu6sCDK{daIpeUBd%Sbnv`*%~w$Z#i5o&O2&AD3*h6T zb?#Kx#bo2>U|djo6W&r=%q(n2Vhh>Z5u#{FPWGQ-*gn?H?p z+6_1`Vwo?}(5bbrTTuU`n-+5QcuYmPo@_*O)rU}@hZBI{OotguX7ua#a1kNz{+_Cr z3P`>XCS6AXONwj1_lEBq9*|n1WcJ5i*tk@*wsK(+lmj8vo=faXKPn5_Bt6ji%^24; zuSv?lH^C)_VEF~La2r6W?5 zfj^5kpa~j2*h`@Z<{FaWhtoWc1tgzy^gk%$f(`{x&Iq5V#Hd9cpm$<-03$8+Bs$x| zXD9RkXu^F5s44jDkb}RH^QWd55X}VPfoEpg-yeI^(69?bLb!Y3=i+u9GKTga`m#Uu zXECo~UWD7iX#2(3~mO;*C#o^(>_a7s0q8Xd7!qsnnqGUzQohq9A! zISD!k>$9qlPYgbO8FUV_%IH+K`Z5^l_HYdIbDJA@-f=*$d1Q_;%0~+oH_kgW4e1*i z{6k&vT_J$M9|5E>_)04fqteHr1mx{ZILzR_f^9YbBANMrn=i9^VnvdHYzV*dBB7sR zfxTq-ffphUTuTRkA&HqQL>P zWf@?y%t0>puyzc}Q%nAjhVcL5<$V75YsBE$+U*XpRc$$4+l&uSf-w5gYC2XtDNVP` zLC*ucP%|jGADeI%?bv&dqg)f0zcKbi7qO{y7RvYdqc)Z@9x~ED1aFKT;mv z*6k3$f;GB>Bf)$O#9LBlakiBB`^xKrh5zCLz;Qz8Eln|tzFifEmaEu30IgAEW z6*W09xRb`wD5#|va2Z1~Ko1j18p`BC$sQQH;{dQL7^58D3Z9p^_j#4wnIPug=26N{ zG!XxeF(Y3#1`kdl7=FG&uyQ`shTP_Kh#OPo75=8XGnG7MRsnEUNRg0~)DgiG2s=xL zn|h+FAc1)OVT#(q4XPLcCn>~B&*Ip_ zh!kKEdq!LViH$qFRMwjW#mY6Vm-_{pD%1^5`lP7wT8Aqj{Co-A&~D5okD7v3=r!%M zvDgYII%!Co;o^{V%N4|m=R7LA$1pEA?92hm*h+GNPk@vG$8*x>4u8Lr{j&(3or%@q z^SCY)YHA|R@GBpA$d9MG`JbQQlobpsqM8%aHWcEUjIp|sKRty-6gqC_#peN9+*=9# zlvU7~0d?d|)e;JGXit2Q@3o);jkd{`6?u^SHBPsKZVtuesqUhDo_gVU88WMmHxLiQ zp&os%>sJOgY?Bb4%fieZc#>^b0vaJYI2b@6TznG~hvVd7Xxf|!=E^X=e9hS%<}(2i z!G^MkI>&jnapXsH#||}Ip1Z;=vnN?OFWhdGCXXM}0}I6H=3xaJFmXPw3}3oP@B+=l z@Nw_p(ca026@Q+vu2Z86@6`5w9vRVp^oz&j2FaHjh2FBV2pD{v=Vu~QKR}*`@^nZI zAh1FMIYGjNtO72)Jsiix1n>E%O*wM1vhVcL@W{jQ$TLOnXh%hTy$SNdE!Sk5Q*N)- zkB;<7GgD_SV=-tW5dpz@^sJ!Pp?LMGSB2&bOBurE!H6stVpR9@H(^528wHLNwIDIP z&o}9Ps|lF$GWYk1I1{eUZdJl$Ov#lyjDZb$ugA9vpySaQ0ei3OEm`%(fHep=2Amsm zEtoI}@7Qtlq%*d~;+NcviD3oy5Y?jDQl};0VbHQ)P>7GbjGMP_U%_YrKLBCDpIoV@ zXGz1|T43jYFK6);#OaoSrY_=)bGC;6E)??mafN6b6;guw5@y6kC6gkB)gQ*->!lDT zC}pFjdz|G=gcyAa%)ZfCAAzr-`DtgEpN^!T1uqhxXQu1xMH_&8?yoa4@#BZpu%OUe z4Hkiihf$?aI5=)Gu@=Kmarldq$x3s*Vh*SVo3Zc>a>yML!z34^^u3#8aoAST+^mnGfQAak`O9b3O&5;rKRkKE)26#<2lPZ{!>(YB`I`r_u>8Zq{qmax)6yfq z!=>26EEkmxh>jq0KMenG(K`FH)`ZdY{pFFp5_DA|Q(06X+=V4x*tWa^-05TXfA=AH zeKK1D#tGL2`wn7%{j?vr8ywFdb?yKK;WgC=v_k;f3C`mba)xxqMKzECg&bE?3G*|4 z1UL0R^T$4awBfe9xNXy3GBWL#?Uh*r8PwqrjZP-P-mb4le zaJuz)rfDI)8e4YBi?+7sMfE~Le3t)8c52jPJSZl1kKInZsE(}xE2F+!wcZXn|6K|n zJ-Z4>hJbw%oqvPxg)Zc<6=9kt7qM8ygu<~0z__r8h*sJUw1&XG(+3Y>HS1mCp-v-` zUJ4s3#A`c$o^W@UE(%5t+QHOC@Q!wl_!|wPPMPpE1KHbG{jZD!v5ydKA@b0zKlnB< zyI_0EU7D8hEQZ^Q1k2*sAcrz+ggwe#yzXaSepX)mIm zZc7N+G7o(J9RdA6CE5SKea-)i!1oV{TLu?@oA`7<$l?#sjnkMIbCZ~=muaS)F=8No z2jkj<&^Dc6f$0F$v7F)&IQkjcBIGG>4Dcl+Dhpk{szOQwOp@8yxKpOb*bI%hKSU5{ z3#or1tJ!I3h_o5~C8k3DM3jsk>&EW&iQN(4DZ-D5AV=umHSg}(zh86TJ{E8`f$00A z$+vBe0wD@|S0q+UM@t(=-?xK)0^5=$5Ci~M13})l=&YSx2vmBv^UV;J8e&~l%!*v% zzSotCg0-Ltp>nJ9iIXS6%vuc`W|yum8zIDzL*>E2hK!K+xD+5BSojg&LdQ@U^F^laFkI8M>IwXaa~T! zBaAW8tptSyd&13DE8Qo z>Ig?Vj4bqEuF!|vKGKF0Z_S3?cCG>D4xYH9!i&8E64vXf3iyh&>FtdcxiWrbo_W#w1TFw*lH1 z;f))24Hywh%NSA7f=n1nsH33y94U5{LrQGPlvu?CN6@s_US0CGt^2I=w1LdLc%e0C zcFpR1V92Vq>RBg>;3q|1l7jICgpfwfDIYIfB*_44v26=*)>iHLRtl(NeId(^h+*3 z1_Nu9@j`2m@i9du<~|S%qPt1X6kEkaMoIt?Aq2*xNOgO_cn^#b z{(*9sEK^*R8LBaQ#fq$kY{3y4YAA-Y+7-w?A(CHPxOX)3yf-Smuo;8A?_@#&egaxL zVps{Bhq6;LJOLXAT}?{kAK0~%clluJY5i{s7?ELtk$Z=uE*(Bq36csFkQtKJpn1VX zgU}c8IW<56@b3yhBZs5a^Vu z)A{@!4tBj9gBDY%;}BhJ0!Y6MARyQYoY)LE!ouP_mC^H1Vx_;F!>F$hkE^=%Xmi%y z%MioTcoXLs#)?r(Zom(K+f1PaB%268tT4=q?*1;GE&cUPN&K2b&(i7Vhacp0#B~^~ z;&c@5zowVKqv=o88aQUPb>qNx>07Vs>R#4Gz7A?wTYpew1**9ePd$@ z5KNija+PZb_Qs{*8}p$4_`&F^!>q@xpkuWvVflz;g2=@iONSOn+TrKP8@0`rci?ZmUygb|5dHx5qc{6j^J2T~ctfekD#Itq#|Yq$?@KR3u|=Jr+YUi}HcP%Du} zlGDy9JjZH8-$kGo~p zz=%8)5NcQJ(Yr7?#fdFAH(rUj9f3TEP`dQ1%GJjH>#RZ5J{W$&uAt+WEUtxgO*nDs z^!bQ$`5%70lQF@8d}K2Mwy6|YnASSA^}&U<&YQRwOhAlHRbXf%0GBZe@!5s=bSZ)` z1NhF!$Yd%FZ25V_f##cy4TTmDPUjdY%}u<65A#Qjp>8(z$!%R128Fk5VFSF8oRN_e z;yFC&3i|&A?LW(xFDKI>BR1s9#5T?tQe+HO``m1Elw*Fe~v z;DDz@jjuhn=;=i_ZOZOEgk!||c)@EiO1Ny6`2u0oj$;qa=tazDZHQI? zZ8)B>CcIr?EpR$w+SthG8V2x(_~sJ`L7Pn85E>z@Ad-J1gU+01=ZAEP7Uut4h^fQ8 z65JK|usRIXEGL;lQL*#a{J{gtewb(VVKRp;hD0QeNthp4zLcH+lu@|*SojUY$&K7D z;4JLd$a~eG!as9yW}#oHu7tJ z!^rlz=?QSGiKaOVSx{-}!+GSKDwyW6V7d&VR;LOF{CV+^@s;dR7Y5{?EmSq+w` zMV{6(pXxYG(mDK&NS?HaVqS^SF)ANrhs64ZZ8$y;u7AXD?LxR14138@KUT;>jiZyq zL518MK%e)&zE4g08)f7cN5gP$!c`e`o2$sAol|Y+Zd)VHB0-hoBvF6hArPesz<7B( zGCW<`3?HNr9XXwcGK+pNp{P6g+z!JEcx2OC@Hw8^k;ITCDR{`-oD~QGr3_d)8l7vX zWR_-KZzZn?gFFp9WBe*VILjF8g2dDgA6X)HX)|+M4mKo4>6(awP6}Nbwp}P|0J8$oQx?`;QZ=hMTLj7S)>if4euaMTOzbRg1FVJ%44v>;Lu;H~)4ld;Ydd z5C00({(tr{F+RseMa_$jpU#L&niR2k9Nn>rtDOC~lkK^D7EhIK9=UVyFIp2KXd0Wa z7wYM*ul+`|vc)`NI}B@6WGbq@C3M}EvAA)_@3e3BJzhTVMvDAP+Z!lJIx-~{hZx+m zof%SXM;x;!YjY|QhIZSBXR_+8Ylm};TkV&%h6uc+D=_xpEgg*Qovy5wcbdTt5LQB~?P0Yk$UlkMq25EiuAe{gbwbkR;asba9L#39;x%1AKCCj*(=t>U(I$+RKDDZ9={50Zo@>3N8KP^p;vvXeLouDrQ zRmGzNFH<UKXzOeNE3@7gS%kmLEu~5GWC2 z&!9KYVX^$C{ULc<+}n0ptqeDV>Bdvd0lYFi^u9FC&XW|%eG_{0bHQske4Cj+w-+yD z`KGNGihnGwJ`_C6xS3+H$5B|N_>5|YOlqivkNZ|i6|=xIA(JOAMmPgP-@90~Iq1S# ztr5MxgpT?m-oDw#IS=JF~YAO0vj8#U;1_94Rz-FA(X8*zCR-gDd%j`?qCDZ`_wWzU+7RvGes z?@&$<3rhIFHkeq`9c0MUo2c%jDo-hEXS_JU+DM_i{WH z?PmM5{ zYrpkuZ>ru-dW#9c&8^Cv3} z+_|%ZT{SWC9v1SinnVozk4s5XXD39)n{rE$z;0~17fwO;IgtCUEGOc*-5-CtPXF5{ zK+t^C5E1fX*NPV%=ee`S%JkS9ZU+QZS#WtjY}PMg@btOJd zzw3676ni3hv-OSPh$sLiAV>_(7+3k*b}%OrvYydZotIYfjL$7Z3GWeYL7AYT5Zj?%wR^ zV;Y8r5o!B)=bp@l+r86K8>J7#?H%Dfufp{0w#8J52K1%(ww%qj`{R@U{oYnbrEgr} zz2j{!+jHDhFL*v-{r&ulmi%pPThY^J&J3usEzbFkx}H65Vn^9;jsmql-ZeOAqKYD~ znKmUSKI+bPe;<9K`q`<2J;%yFM#wd`-TR{Q?o{@?qXgqlv(sbD{5x6se&@wJy{1ip z2rA94^G2;&o^v6k^TM}hofrG3r7vXK+St%gXy!}o3ie+d`X(hUZ@DpgzGELMYw7hh2FfwBmzM<@d6aFA zMO;6=h4=gO48^c;uQjScG1v264tQBjQmKQYFX=*ROALKq2xU85%w33>n+|d1+0RwA z%O=icdcU;8!P;@xq7__0-XU7o#{1+o9WLniPRV|?H#sG9^srn@vg=vyE@3Sdkjb{3 zys(z+zw)|w9PCRgEM+3Tf4!)xGry_C*k|0+gH8UD(&JBNTDq~Sj}Ao926eFH|9Fx4 z=}@2PF_VUh0870iGZjlB=Tw%rtI`BUtd=kgW$25WQZo~~##P+nQ{d!YWiS-V4xt5$urVo25z z+I<3_m$ROv3qC<}R5Jv-!lCDVK>|Og3b-Ln$9$5KxU63U+jIv!+PDSRx7D=-DbnBqywg^YD0j5>jbo9&DTI><-4W>|N_wS*q8MOUsP-bXs zZ@)6kt|9GWapkLvpPy!~$LkZa!5cXq2vAOKGai3=(k*K+KgRlPm1EYCP1|SQj8)C8 z#IU7u-wB#sx9Fx+YA4SG(tK`9-J~1Y9`sNci%8Qv9p&ky5ZL8 z+A)8hkvsUy*yXWj;#s3M8Fn$Hk!e+wDA|pyQ#HS5T_f|}U5VtC{S_r%!%jOv(iJ|3EYT0 zWBqHXBk%pc^>79U^7~A$c7z+#c_%TXN@t}EMtlCEkHazwU!(;%-6J`ZPi+~{&u8zN z%XeU|Tz*eA|3K1|fU?bCLc&?jY_qfhwcuR`(@6IkKoQJ%%~&>FJLg&$tr$VP9}3q0 zE$eTK_Gzp;`RKFuv8P%e7Bs2NnxfMShT%fopWD`HYd6~DSZ&?QH`t$UNm&+s5Cx{EoQx92r(kH;~yxJ>A*U!BpqlsBZN={Os^vVKlO5wYzx#EgW()q<&ZJYf{Zt54N zjlb+xW-PF6cF!xwYmd%Uzb@_Must%e8I;Jfgo_)6Mua|?7`WKR$0XDZw?s2-Q%_h) zMfq1Ovd!|>KHBL^L6;a^DF;~PSweZQ03t|kiB#61cGXEe^0Q99TeoeydfqcSjz4mN z@4W)%BTRGpH|OOm1bLu-Zqf8z{m!cI%a>prdZkdXRw#Z&$Bz+FTE!g&*Sa;6xW-3^ z>6`wr>hW*72o&(j#kM)Avpr($e{_q@9Ac$5?hm*OjjWZm^|~P+dunsY{e359zuBiu zmqb1<3)o!qF8E|TZ|~qkuHuCo>)k1>FWv}jzjq~JLCJ69Qh|bZ9g)rA`*@Vs7VPwb z_tiQDg$K+*?0TVsj7#RfPtv*HJE5K!xRB|*?LeaUkkEt1wioMNGTR2KI?{Ga z7zjR7zij2p!llLCviv0tZ89CpPZ{eg4UDSt&j#oG2m2C^;=mCA3c805(fgM72CQ_Y z%`sYzp$UcyWtEkcO&{6V1Fz3%4LKZJ=*wE{J&QR`3KPea|8JVe1=dqRZ#+dB!~H1u OZ;z%9^|88z&;JGQ`nfp( literal 43358 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 OVeoYIb6Mw<&;$UGZ(yPT diff --git a/src/core/mod.rs b/src/core/mod.rs index 9c3383f..63a3205 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -66,6 +66,21 @@ impl Normal { } } + /// Returns a `Normal` with the value `0.0`. + pub fn min() -> Self { + Self { value: 0.0 } + } + + /// Returns a `Normal` with the value `1.0`. + pub fn max() -> Self { + Self { value: 1.0 } + } + + /// Returns a `Normal` with the value `0.5`. + pub fn center() -> Self { + Self { value: 0.5 } + } + /// Set a value for the `Normal`. /// /// # Arguments @@ -93,6 +108,22 @@ impl Normal { pub fn value(&self) -> f32 { self.value } + + /// Returns the inverse value (`1.0 - value`) of the `Normal` + pub fn inv(&self) -> f32 { + 1.0 - self.value() + } + + /// Returns the value of the `Normal` times the `scalar` + pub fn scale(&self, scalar: f32) -> f32 { + self.value * scalar + } + + /// Returns the inverse value (`1.0 - value`) of the `Normal` + /// times the `scalar` + pub fn scale_inv(&self, scalar: f32) -> f32 { + (1.0 - self.value()) * scalar + } } impl From for Normal { diff --git a/src/core/tick_marks.rs b/src/core/tick_marks.rs index 474f7e1..d2fb7f3 100644 --- a/src/core/tick_marks.rs +++ b/src/core/tick_marks.rs @@ -11,40 +11,107 @@ use crate::core::Normal; /// [`TickMark`]: struct.TickMark.html #[derive(Debug, Clone)] pub struct TickMarkGroup { - /// A group of [`TickMark`]s. - /// - /// [`TickMark`]: struct.TickMark.html - pub group: Vec, + tier_1_positions: Vec, + tier_2_positions: Vec, + tier_3_positions: Vec, + len: usize, + has_tier_1: bool, + has_tier_2: bool, + has_tier_3: bool, } impl Default for TickMarkGroup { fn default() -> Self { - vec![TickMark::center(TickMarkTier::One)].into() + TickMarkGroup::center(TickMarkTier::One) } } impl TickMarkGroup { - /// Constructs an empty [`TickMarkGroup`]. + /// Constructs a new `TickMarkGroup` from a vector of [`TickMark`]s. /// /// [`TickMarkGroup`]: struct.TickMarkGroup.html - pub fn new() -> Self { - Self { group: Vec::new() } + /// [`TickMark`]: struct.TickMark.html + pub fn new(tick_marks: Vec) -> Self { + let len = tick_marks.len(); + + let mut tier_1_positions: Vec = Vec::new(); + let mut tier_2_positions: Vec = Vec::new(); + let mut tier_3_positions: Vec = Vec::new(); + + for tick_mark in tick_marks.iter() { + match tick_mark.tier { + TickMarkTier::One => { + tier_1_positions.push(tick_mark.position); + } + TickMarkTier::Two => { + tier_2_positions.push(tick_mark.position); + } + TickMarkTier::Three => { + tier_3_positions.push(tick_mark.position); + } + } + } + + let has_tier_1 = !tier_1_positions.is_empty(); + let has_tier_2 = !tier_2_positions.is_empty(); + let has_tier_3 = !tier_3_positions.is_empty(); + + Self { + tier_1_positions, + tier_2_positions, + tier_3_positions, + len, + has_tier_1, + has_tier_2, + has_tier_3, + } } - /// Constructs a new `TickMarkGroup` from a vector of [`TickMark`]s. + /// Returns a new [`TickMarkGroup`] with a single [`TickMark`] in + /// the center position. + /// + /// * `tier` - a [`TickMarkTier`] representing the size of the tick mark /// /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMarkTier`]: enum.TickMarkTier.html /// [`TickMark`]: struct.TickMark.html - pub fn from_vec(tick_marks: Vec) -> Self { - Self { group: tick_marks } + pub fn center(tier: TickMarkTier) -> Self { + let tick_marks = vec![TickMark::center(tier)]; + Self::new(tick_marks) } - /// Pushes a new [`TickMark`] into the [`TickMarkGroup`]. + /// Returns a new [`TickMarkGroup`] with a [`TickMark`] in + /// the min (`0.0`) position and max (`1.0`) position. + /// + /// * `tier` - a [`TickMarkTier`] representing the size of the tick mark /// /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMarkTier`]: enum.TickMarkTier.html /// [`TickMark`]: struct.TickMark.html - pub fn push(&mut self, tick_mark: TickMark) { - self.group.push(tick_mark); + pub fn min_max(tier: TickMarkTier) -> Self { + let tick_marks = vec![TickMark::min(tier), TickMark::max(tier)]; + Self::new(tick_marks) + } + + /// Returns a new [`TickMarkGroup`] with a [`TickMark`] in + /// the min (`0.0`), the max (`1.0`), and center (`0.5`) positions. + /// + /// * `min_max_tier` - a [`TickMarkTier`] representing the size of the `min` and `max` tick marks + /// * `center_tier` - a [`TickMarkTier`] representing the size of the `center` tick mark + /// + /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMarkTier`]: enum.TickMarkTier.html + /// [`TickMark`]: struct.TickMark.html + pub fn min_max_and_center( + min_max_tier: TickMarkTier, + center_tier: TickMarkTier, + ) -> Self { + let tick_marks = vec![ + TickMark::min(min_max_tier), + TickMark::max(min_max_tier), + TickMark::center(center_tier), + ]; + Self::new(tick_marks) } /// Creates a group of tick marks by subdividing the range. @@ -119,13 +186,57 @@ impl TickMarkGroup { }); } - vec.into() + Self::new(vec) + } + + /// Returns `true` if the `TickMarkGroup` contains a tier 1 `TickMark`. + /// + /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMark`]: struct.TickMark.html + pub fn has_tier_1(&self) -> bool { + self.has_tier_1 + } + + /// Returns `true` if the `TickMarkGroup` contains a tier 2 `TickMark`. + /// + /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMark`]: struct.TickMark.html + pub fn has_tier_2(&self) -> bool { + self.has_tier_2 + } + + /// Returns `true` if the `TickMarkGroup` contains a tier 3 `TickMark`. + /// + /// [`TickMarkGroup`]: struct.TickMarkGroup.html + /// [`TickMark`]: struct.TickMark.html + pub fn has_tier_3(&self) -> bool { + self.has_tier_3 + } + + /// Returns a vec with the positions of the tier 1 tick marks. + pub fn tier_1_positions(&self) -> &Vec { + &self.tier_1_positions + } + + /// Returns a vec with the positions of the tier 2 tick marks. + pub fn tier_2_positions(&self) -> &Vec { + &self.tier_2_positions + } + + /// Returns a vec with the positions of the tier 3 tick marks. + pub fn tier_3_positions(&self) -> &Vec { + &self.tier_3_positions + } + + /// Returns the total number of tick marks. + pub fn len(&self) -> usize { + self.len } } impl From> for TickMarkGroup { fn from(tick_marks: Vec) -> Self { - TickMarkGroup { group: tick_marks } + TickMarkGroup::new(tick_marks) } } @@ -136,7 +247,7 @@ impl From> for TickMarkGroup { /// * Small - small-sized tick mark /// /// [`TickMark`]: struct.TickMark.html -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq)] pub enum TickMarkTier { /// large-sized tick mark One, @@ -185,7 +296,7 @@ impl Default for TickMark { } impl TickMark { - /// Returns a tick mark at the center position. + /// Returns a tick mark at the center (`0.5`) position. /// /// * `tier` - a [`TickMarkTier`] representing the size of the tick mark /// @@ -197,7 +308,7 @@ impl TickMark { } } - /// Returns a tick mark at the minimum position. + /// Returns a tick mark at the minimum (`0.0`) position. /// /// * `tier` - a [`TickMarkTier`] representing the size of the tick mark /// @@ -209,7 +320,7 @@ impl TickMark { } } - /// Returns a tick mark at the maximum position. + /// Returns a tick mark at the maximum (`1.0`) position. /// /// * `tier` - a [`TickMarkTier`] representing the size of the tick mark /// diff --git a/src/lib.rs b/src/lib.rs index 0ea9365..9f0db85 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,7 +7,7 @@ //! //! ``` //! iced = { version = "0.1", features = ["image"] } -//! iced_audio = "0.2" +//! iced_audio = "0.3" //! ``` //! //! This crate is currently experimental and incomplete. Master branch moves @@ -250,6 +250,9 @@ mod platform { reduction_meter, v_slider, xy_pad, }; + #[doc(no_inline)] + pub use crate::style::bar_tick_marks; + #[doc(no_inline)] pub use { db_meter::DBMeter, h_slider::HSlider, knob::Knob, diff --git a/src/native/phase_meter.rs b/src/native/phase_meter.rs index c5ab64e..09860bc 100644 --- a/src/native/phase_meter.rs +++ b/src/native/phase_meter.rs @@ -9,7 +9,7 @@ use iced_native::{ use std::hash::Hash; -use crate::core::Normal; +use crate::core::{Normal, TickMarkGroup}; static DEFAULT_HEIGHT: u16 = 8; @@ -43,6 +43,7 @@ pub struct PhaseMeter<'a, Renderer: self::Renderer> { height: Length, style: Renderer::Style, orientation: Orientation, + tick_marks: Option<&'a TickMarkGroup>, } impl<'a, Renderer: self::Renderer> PhaseMeter<'a, Renderer> { @@ -60,6 +61,7 @@ impl<'a, Renderer: self::Renderer> PhaseMeter<'a, Renderer> { height: Length::from(Length::Units(DEFAULT_HEIGHT)), style: Renderer::Style::default(), orientation: Orientation::Horizontal, + tick_marks: None, } } @@ -100,6 +102,17 @@ impl<'a, Renderer: self::Renderer> PhaseMeter<'a, Renderer> { self.style = style.into(); self } + + /// Sets the [`TickMarkGroup`] to display. Note your [`StyleSheet`] must + /// also implement `tick_mark_style(&self) -> Option` for + /// them to display (which the default style does). + /// + /// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html + /// [`StyleSheet`]: ../../style/phase_meter/trait.StyleSheet.html + pub fn tick_marks(mut self, tick_marks: &'a TickMarkGroup) -> Self { + self.tick_marks = Some(tick_marks); + self + } } /// The [`Normal`] positions of each color tier of a [`PhaseMeter`] @@ -214,6 +227,7 @@ where self.state.normal, self.state.tier_positions, &self.orientation, + self.tick_marks, &self.style, ) } @@ -255,6 +269,7 @@ pub trait Renderer: iced_native::Renderer { normal: Normal, tier_positions: TierPositions, orientation: &Orientation, + tick_marks: Option<&TickMarkGroup>, style: &Self::Style, ) -> Self::Output; } diff --git a/src/style/bar_tick_marks.rs b/src/style/bar_tick_marks.rs new file mode 100644 index 0000000..16c04a1 --- /dev/null +++ b/src/style/bar_tick_marks.rs @@ -0,0 +1,78 @@ +//! Various styles for a [`TickMarkGroup`] in a bar meter widget +/// +/// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html +use iced::Color; + +use crate::style::default_colors; + +/// The placement of tick marks relative to the widget +#[derive(Debug, Copy, Clone, PartialEq)] +pub enum Placement { + /// Tick marks on both sides + BothSides, + /// Tick marks only on the left/top side + LeftOrTop, + /// Tick marks only on the right/bottom side + RightOrBottom, +} + +impl std::default::Default for Placement { + fn default() -> Self { + Placement::BothSides + } +} + +/// The style of a [`TickMarkGroup`] for a bar meter widget +/// +/// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html +#[derive(Debug, Copy, Clone)] +pub struct Style { + /// The length of a tier 1 tick mark + pub length_tier_1: u16, + /// The length of a tier 2 tick mark + pub length_tier_2: u16, + /// The length of a tier 3 tick mark + pub length_tier_3: u16, + + /// The width (thickness) of a tier 1 tick mark + pub width_tier_1: u16, + /// The width (thickness) of a tier 2 tick mark + pub width_tier_2: u16, + /// The width (thickness) of a tier 3 tick mark + pub width_tier_3: u16, + + /// The color of a tier 1 tick mark + pub color_tier_1: Color, + /// The color of a tier 2 tick mark + pub color_tier_2: Color, + /// The color of a tier 3 tick mark + pub color_tier_3: Color, + + /// The offset of the tick marks from the side of the widget + pub offset: u16, + + /// The placement of the tick marks + pub placement: Placement, +} + +impl std::default::Default for Style { + fn default() -> Self { + Self { + length_tier_1: 4, + length_tier_2: 3, + length_tier_3: 2, + + width_tier_1: 2, + width_tier_2: 2, + width_tier_3: 1, + + color_tier_1: default_colors::TICK_TIER_1, + color_tier_2: default_colors::TICK_TIER_2, + color_tier_3: default_colors::TICK_TIER_3, + + offset: 2, + + placement: Placement::default(), + } + } +} diff --git a/src/style/db_meter.rs b/src/style/db_meter.rs index d3dfa9d..af58a88 100644 --- a/src/style/db_meter.rs +++ b/src/style/db_meter.rs @@ -4,6 +4,7 @@ use iced::Color; +use crate::style::bar_tick_marks; use crate::style::default_colors; /// The appearance of a [`DBMeter`]. @@ -49,83 +50,6 @@ pub struct Style { pub inner_gap_color: Color, } -/// The placement of tick marks for a [`DBMeter`]. -/// -/// [`DBMeter`]: ../../native/db_meter/struct.DBMeter.html -#[derive(Debug, Copy, Clone, PartialEq)] -pub enum TickMarkPlacement { - /// Tick marks on both sides - LeftAndRight, - /// Tick marks only on the left/top side - Left, - /// Tick marks only on the right/bottom side - Right, -} - -impl std::default::Default for TickMarkPlacement { - fn default() -> Self { - TickMarkPlacement::LeftAndRight - } -} - -/// The style of a [`TickMarkGroup`] for a [`DBMeter`] -/// -/// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html -/// [`DBMeter`]: ../../native/db_meter/struct.DBMeter.html -#[derive(Debug, Copy, Clone)] -pub struct TickMarkStyle { - /// The length of a tier 1 tick mark - pub length_tier_1: u16, - /// The length of a tier 2 tick mark - pub length_tier_2: u16, - /// The length of a tier 3 tick mark - pub length_tier_3: u16, - - /// The width (thickness) of a tier 1 tick mark - pub width_tier_1: u16, - /// The width (thickness) of a tier 2 tick mark - pub width_tier_2: u16, - /// The width (thickness) of a tier 3 tick mark - pub width_tier_3: u16, - - /// The color of a tier 1 tick mark - pub color_tier_1: Color, - /// The color of a tier 2 tick mark - pub color_tier_2: Color, - /// The color of a tier 3 tick mark - pub color_tier_3: Color, - - /// The offset of the tick marks from the side of the [`DBMeter`] - /// - /// [`DBMeter`]: ../../native/db_meter/struct.DBMeter.html - pub offset: u16, - - /// The placement of the tick marks - pub placement: TickMarkPlacement, -} - -impl std::default::Default for TickMarkStyle { - fn default() -> Self { - Self { - length_tier_1: 4, - length_tier_2: 3, - length_tier_3: 2, - - width_tier_1: 2, - width_tier_2: 2, - width_tier_3: 1, - - color_tier_1: default_colors::DB_METER_TICK_TIER_1, - color_tier_2: default_colors::DB_METER_TICK_TIER_2, - color_tier_3: default_colors::DB_METER_TICK_TIER_3, - - offset: 2, - - placement: TickMarkPlacement::default(), - } - } -} - /// A set of rules that dictate the style of a [`DBMeter`]. /// /// [`DBMeter`]: ../../native/db_meter/struct.DBMeter.html @@ -141,7 +65,7 @@ pub trait StyleSheet { /// /// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html /// [`DBMeter`]: ../../native/db_meter/struct.DBMeter.html - fn tick_mark_style(&self) -> Option { + fn tick_mark_style(&self) -> Option { None } } @@ -168,8 +92,8 @@ impl StyleSheet for Default { } } - fn tick_mark_style(&self) -> Option { - Some(TickMarkStyle::default()) + fn tick_mark_style(&self) -> Option { + Some(bar_tick_marks::Style::default()) } } diff --git a/src/style/default_colors.rs b/src/style/default_colors.rs index 64fa158..7a887d7 100644 --- a/src/style/default_colors.rs +++ b/src/style/default_colors.rs @@ -2,7 +2,7 @@ use iced::Color; -pub static BORDER: Color = Color::from_rgb(0.35, 0.35, 0.35); +pub static BORDER: Color = Color::from_rgb(0.315, 0.315, 0.315); pub static LIGHT_BACK: Color = Color::from_rgb(0.97, 0.97, 0.97); pub static LIGHT_BACK_HOVER: Color = Color::from_rgb(0.93, 0.93, 0.93); pub static LIGHT_BACK_DRAG: Color = Color::from_rgb(0.92, 0.92, 0.92); @@ -21,44 +21,27 @@ pub static SLIDER_RAIL: (Color, Color) = ( a: 0.75, }, ); -pub static SLIDER_TICK_TIER_1: Color = Color { + +pub static TICK_TIER_1: Color = Color { r: 0.56, g: 0.56, b: 0.56, - a: 0.7, + a: 0.93, }; -pub static SLIDER_TICK_TIER_2: Color = Color { +pub static TICK_TIER_2: Color = Color { r: 0.56, g: 0.56, b: 0.56, - a: 0.43, + a: 0.83, }; -pub static SLIDER_TICK_TIER_3: Color = Color { +pub static TICK_TIER_3: Color = Color { r: 0.56, g: 0.56, b: 0.56, - a: 0.39, + a: 0.65, }; pub static KNOB_BACK_HOVER: Color = Color::from_rgb(0.96, 0.96, 0.96); -pub static KNOB_TICK_TIER_1: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.90, -}; -pub static KNOB_TICK_TIER_2: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.85, -}; -pub static KNOB_TICK_TIER_3: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.75, -}; pub static RAMP_BACK_HOVER: Color = Color::from_rgb(0.95, 0.95, 0.95); @@ -66,13 +49,13 @@ pub static XY_PAD_RAIL: Color = Color { r: 0.56, g: 0.56, b: 0.56, - a: 0.75, + a: 0.9, }; pub static XY_PAD_CENTER_LINE: Color = Color { r: 0.56, g: 0.56, b: 0.56, - a: 0.4, + a: 0.5, }; pub static DB_METER_BACK: Color = Color::from_rgb(0.45, 0.45, 0.45); @@ -88,22 +71,4 @@ pub static DB_METER_CLIP_MARKER: Color = Color { a: 0.28, }; pub static DB_METER_GAP: Color = Color::from_rgb(0.25, 0.25, 0.25); -pub static DB_METER_TICK_TIER_1: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.85, -}; -pub static DB_METER_TICK_TIER_2: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.75, -}; -pub static DB_METER_TICK_TIER_3: Color = Color { - r: 0.56, - g: 0.56, - b: 0.56, - a: 0.63, -}; pub static PHASE_METER_CENTER_LINE: Color = Color::from_rgb(0.92, 0.92, 0.92); diff --git a/src/style/h_slider.rs b/src/style/h_slider.rs index 6aac6b1..d338bb7 100644 --- a/src/style/h_slider.rs +++ b/src/style/h_slider.rs @@ -33,8 +33,8 @@ pub enum Style { pub struct TextureStyle { /// colors of the top and bottom of the rail pub rail_colors: (Color, Color), - /// height (thickness) of the top and bottom of the rail - pub rail_heights: (u16, u16), + /// width (thickness) of the top and bottom of the rail + pub rail_widths: (u16, u16), /// the [`Handle`] to the image texture pub texture: image::Handle, /// the width of the handle, not including padding @@ -54,8 +54,8 @@ pub struct TextureStyle { pub struct ClassicStyle { /// colors of the top and bottom of the rail pub rail_colors: (Color, Color), - /// height (thickness) of the top and bottom of the rail - pub rail_heights: (u16, u16), + /// width (thickness) of the top and bottom of the rail + pub rail_widths: (u16, u16), /// a `ClassicHandle` defining the style of the handle pub handle: ClassicHandle, } @@ -70,7 +70,7 @@ pub struct ClassicHandle { pub color: Color, /// width of the handle pub width: u16, - /// width of the middle notch + /// the width (thickness) of the middle notch pub notch_width: u16, /// color of the middle notch pub notch_color: Color, @@ -89,16 +89,16 @@ pub struct ClassicHandle { /// [`HSlider`]: ../../native/h_slider/struct.HSlider.html #[derive(Debug, Clone, Copy)] pub struct RectStyle { - /// color of an unfilled portion in the background rectangle - pub back_empty_color: Color, - /// color of a filled portion in the background rectangle - pub back_filled_color: Color, - /// color of the background rectangle border - pub border_color: Color, - /// radius of the background rectangle - pub border_radius: u16, + /// color of the background rectangle + pub back_color: Color, /// width of the background rectangle border - pub border_width: u16, + pub back_border_width: u16, + /// radius of the background rectangle + pub back_border_radius: u16, + /// color of the background rectangle border + pub back_border_color: Color, + /// color of a filled portion in the background rectangle + pub filled_color: Color, /// color of the handle rectangle pub handle_color: Color, /// width of the handle rectangle @@ -116,24 +116,20 @@ pub struct RectStyle { /// [`HSlider`]: ../../native/h_slider/struct.HSlider.html #[derive(Debug, Clone, Copy)] pub struct RectBipolarStyle { - /// color of an unfilled portion in the background - /// rectangle on the left side of the center - pub back_left_empty_color: Color, + /// color of the background rectangle + pub back_color: Color, + /// width of the background rectangle border + pub back_border_width: u16, + /// radius of the background rectangle + pub back_border_radius: u16, + /// color of the background rectangle border + pub back_border_color: Color, /// color of a filled portion in the background /// rectangle on the left side of the center - pub back_left_filled_color: Color, - /// color of an unfilled portion in the background - /// rectangle on the right side of the center - pub back_right_empty_color: Color, + pub left_filled_color: Color, /// color of a filled portion in the background /// rectangle on the right side of the center - pub back_right_filled_color: Color, - /// color of the background rectangle border - pub border_color: Color, - /// radius of the background rectangle - pub border_radius: u16, - /// width of the background rectangle border - pub border_width: u16, + pub right_filled_color: Color, /// color of the handle rectangle when it is on the /// left side of the center pub handle_left_color: Color, @@ -155,12 +151,12 @@ pub struct RectBipolarStyle { /// [`HSlider`]: ../../native/h_slider/struct.HSlider.html #[derive(Debug, Copy, Clone)] pub struct TickMarkStyle { - /// The height of a tier 1 tick mark relative to the height of the `HSlider` - pub scale_tier_1: f32, - /// The height of a tier 2 tick mark relative to the height of the `HSlider` - pub scale_tier_2: f32, - /// The height of a tier 3 tick mark relative to the height of the `HSlider` - pub scale_tier_3: f32, + /// The length of a tier 1 tick mark relative to the length of the `HSlider` + pub length_scale_tier_1: f32, + /// The length of a tier 2 tick mark relative to the length of the `HSlider` + pub length_scale_tier_2: f32, + /// The length of a tier 3 tick mark relative to the length of the `HSlider` + pub length_scale_tier_3: f32, /// The width (thickness) of a tier 1 tick mark pub width_tier_1: u16, @@ -181,29 +177,24 @@ pub struct TickMarkStyle { /// through the the rail, as apposed to a line above and a line below the /// rail. pub center_offset: u16, - - /// The horizontal offset from the edges of the `HSlider`. This is usually - /// half of the width of the handle. - pub handle_offset: u16, } impl std::default::Default for TickMarkStyle { fn default() -> Self { Self { - scale_tier_1: 1.5, - scale_tier_2: 1.25, - scale_tier_3: 1.05, + length_scale_tier_1: 1.65, + length_scale_tier_2: 1.55, + length_scale_tier_3: 1.4, width_tier_1: 2, - width_tier_2: 2, + width_tier_2: 1, width_tier_3: 1, - color_tier_1: default_colors::SLIDER_TICK_TIER_1, - color_tier_2: default_colors::SLIDER_TICK_TIER_2, - color_tier_3: default_colors::SLIDER_TICK_TIER_3, + color_tier_1: default_colors::TICK_TIER_1, + color_tier_2: default_colors::TICK_TIER_2, + color_tier_3: default_colors::TICK_TIER_3, - center_offset: 1, - handle_offset: 17, + center_offset: 0, } } } @@ -238,12 +229,12 @@ pub struct ModRangeStyle { pub placement: ModRangePlacement, /// The color of an empty portion of the line. /// Set to `None` for no empty portion. - pub color_empty: Option, + pub empty_color: Option, /// The color of a filled portion of the line. - pub color: Color, + pub filled_color: Color, /// The color of a filled portion of the ring when `end` is less than /// `start`. - pub color_inverse: Color, + pub filled_inverse_color: Color, } /// A set of rules that dictate the style of an [`HSlider`]. @@ -292,7 +283,7 @@ impl StyleSheet for Default { fn active(&self) -> Style { Style::Classic(ClassicStyle { rail_colors: default_colors::SLIDER_RAIL, - rail_heights: (1, 1), + rail_widths: (1, 1), handle: ClassicHandle { color: default_colors::LIGHT_BACK, width: 34, diff --git a/src/style/knob.rs b/src/style/knob.rs index 934e122..b638955 100644 --- a/src/style/knob.rs +++ b/src/style/knob.rs @@ -14,10 +14,10 @@ use crate::{KnobAngleRange, Normal}; #[derive(Debug, Clone)] pub enum Style { //Texture(TextureStyle), - /// a classic vector style with a circle as the notch - VectorCircle(VectorCircleStyle), - /// a classic vector style with a line as the notch - VectorLine(VectorLineStyle), + /// a classic circular style with a circle as the notch + ClassicCircle(ClassicCircleStyle), + /// a classic circular style with a line as the notch + ClassicLine(ClassicLineStyle), /// a modern arc style with an optional line as the notch Arc(ArcStyle), /// a modern arc style with an optional line as the notch. It can @@ -46,18 +46,18 @@ pub struct TextureStyle { } */ -/// a classic vector [`Style`] of a [`Knob`] witch a circle as the notch +/// a classic circular [`Style`] of a [`Knob`] witch a circle as the notch /// /// [`Style`]: enum.Style.html /// [`Knob`]: ../../native/knob/struct.Knob.html #[derive(Debug, Clone)] -pub struct VectorCircleStyle { +pub struct ClassicCircleStyle { /// the color of the knob - pub knob_color: Color, + pub color: Color, /// the width of the border around the knob - pub knob_border_width: u16, + pub border_width: u16, /// the color of the border around the knob - pub knob_border_color: Color, + pub border_color: Color, /// the color of the notch line pub notch_color: Color, /// the width of the border around the notch @@ -75,19 +75,19 @@ pub struct VectorCircleStyle { pub notch_offset: Normal, } -/// a classic vector [`Style`] of a [`Knob`] with a line as the notch +/// a classic circular [`Style`] of a [`Knob`] with a line as the notch /// /// [`Style`]: enum.Style.html /// [`Knob`]: ../../native/knob/struct.Knob.html /// [`InnerCircle`]: struct.InnerCircle.html #[derive(Debug, Clone)] -pub struct VectorLineStyle { +pub struct ClassicLineStyle { /// the color of the knob - pub knob_color: Color, + pub color: Color, /// the width of the border around the knob - pub knob_border_width: u16, + pub border_width: u16, /// the color of the border around the knob - pub knob_border_color: Color, + pub border_color: Color, /// the color of the notch line pub notch_color: Color, /// the width of the notch line @@ -107,11 +107,11 @@ pub struct VectorLineStyle { #[derive(Debug, Clone)] pub struct ArcStyle { /// the width (thickness) of the arc - pub arc_width: f32, + pub width: f32, /// the color of an empty portion of the arc - pub arc_empty_color: Color, + pub empty_color: Color, /// the color of the filled portion of the arc - pub arc_filled_color: Color, + pub filled_color: Color, /// an option notch to display pub notch: Option, } @@ -142,13 +142,13 @@ pub struct ArcNotch { #[derive(Debug, Clone)] pub struct ArcBipolarStyle { /// the width (thickness) of the arc - pub arc_width: f32, + pub width: f32, /// the color of an empty portion of the arc - pub arc_empty_color: Color, + pub empty_color: Color, /// the color of the filled portion of the arc left of the center - pub arc_left_color: Color, + pub left_filled_color: Color, /// the color of the filled portion of the arc right of the center - pub arc_right_color: Color, + pub right_filled_color: Color, /// an optional notch to display pub notch: Option, } @@ -166,11 +166,11 @@ pub struct ArcBipolarNotch { /// [`Knob`]: ../../native/knob/struct.Knob.html pub length_scale: Normal, /// the color of the notch when it is in the center - pub color_center: Color, + pub center_color: Color, /// the color of the notch when it is left of the center - pub color_left: Color, + pub left_color: Color, /// the color of the notch when it is right of the center - pub color_right: Color, + pub right_color: Color, } /// The style of a [`TickMarkGroup`] for a [`Knob`] @@ -180,14 +180,14 @@ pub struct ArcBipolarNotch { #[derive(Debug, Copy, Clone)] pub enum TickMarkStyle { /// A style with circular tick marks. - Circle(CircleTickMarks), + Circle(CircleTickMarkStyle), /// A style with line tick marks. - Line(LineTickMarks), + Line(LineTickMarkStyle), } impl std::default::Default for TickMarkStyle { fn default() -> Self { - TickMarkStyle::Circle(CircleTickMarks::default()) + TickMarkStyle::Circle(CircleTickMarkStyle::default()) } } @@ -196,7 +196,7 @@ impl std::default::Default for TickMarkStyle { /// [`TickMarkStyle]: enum.TickMarkStyle.html /// [`Knob`]: ../../native/knob/struct.Knob.html #[derive(Debug, Copy, Clone)] -pub struct CircleTickMarks { +pub struct CircleTickMarkStyle { /// The diameter of a tier 1 tick mark pub diameter_tier_1: u16, /// The diameter of a tier 2 tick mark @@ -215,16 +215,16 @@ pub struct CircleTickMarks { pub offset: f32, } -impl std::default::Default for CircleTickMarks { +impl std::default::Default for CircleTickMarkStyle { fn default() -> Self { Self { diameter_tier_1: 4, diameter_tier_2: 2, diameter_tier_3: 2, - color_tier_1: default_colors::KNOB_TICK_TIER_1, - color_tier_2: default_colors::KNOB_TICK_TIER_2, - color_tier_3: default_colors::KNOB_TICK_TIER_3, + color_tier_1: default_colors::TICK_TIER_1, + color_tier_2: default_colors::TICK_TIER_2, + color_tier_3: default_colors::TICK_TIER_3, offset: 4.47, } @@ -236,14 +236,7 @@ impl std::default::Default for CircleTickMarks { /// [`TickMarkStyle]: enum.TickMarkStyle.html /// [`Knob`]: ../../native/knob/struct.Knob.html #[derive(Debug, Copy, Clone)] -pub struct LineTickMarks { - /// The width (thickness) of a tier 1 tick mark - pub width_tier_1: f32, - /// The width (thickness) of a tier 2 tick mark - pub width_tier_2: f32, - /// The width (thickness) of a tier 3 tick mark - pub width_tier_3: f32, - +pub struct LineTickMarkStyle { /// The length of a tier 1 tick mark pub length_tier_1: f32, /// The length of a tier 2 tick mark @@ -251,6 +244,13 @@ pub struct LineTickMarks { /// The length of a tier 3 tick mark pub length_tier_3: f32, + /// The width (thickness) of a tier 1 tick mark + pub width_tier_1: f32, + /// The width (thickness) of a tier 2 tick mark + pub width_tier_2: f32, + /// The width (thickness) of a tier 3 tick mark + pub width_tier_3: f32, + /// The color of a tier 1 tick mark pub color_tier_1: Color, /// The color of a tier 2 tick mark @@ -262,20 +262,20 @@ pub struct LineTickMarks { pub offset: f32, } -impl std::default::Default for LineTickMarks { +impl std::default::Default for LineTickMarkStyle { fn default() -> Self { Self { - width_tier_1: 2.0, - width_tier_2: 1.75, - width_tier_3: 1.75, - length_tier_1: 3.5, length_tier_2: 2.5, length_tier_3: 2.5, - color_tier_1: default_colors::KNOB_TICK_TIER_1, - color_tier_2: default_colors::KNOB_TICK_TIER_2, - color_tier_3: default_colors::KNOB_TICK_TIER_3, + width_tier_1: 2.0, + width_tier_2: 1.75, + width_tier_3: 1.75, + + color_tier_1: default_colors::TICK_TIER_1, + color_tier_2: default_colors::TICK_TIER_2, + color_tier_3: default_colors::TICK_TIER_3, offset: 2.0, } @@ -292,13 +292,13 @@ pub struct ValueRingStyle { /// The offset from the edge of the `Knob` pub offset: f32, /// The color of an empty portion in the ring - pub color_empty: Color, - /// The color of a filled portion of the ring. If `color_right` is + pub empty_color: Color, + /// The color of a filled portion of the ring. If `right_filled_color` is /// `Some`, then this will only apply to the left side of the ring. - pub color_left: Color, + pub left_filled_color: Color, /// The color of a filled portion on the right side of the ring. /// Set this to `None` for unipolar mode. - pub color_right: Option, + pub right_filled_color: Option, } /// A style for a [`ModulationRange`] ring around a [`Knob`] @@ -313,12 +313,12 @@ pub struct ModRangeRingStyle { pub offset: f32, /// The color of an empty portion in the ring. /// Set to `None` for no empty portion. - pub color_empty: Option, + pub empty_color: Option, /// The color of a filled portion of the ring. - pub color: Color, + pub filled_color: Color, /// The color of a filled portion of the ring when `end` is less than /// `start`. - pub color_inverse: Color, + pub filled_inverse_color: Color, } /// A set of rules that dictate the style of a [`Knob`]. @@ -382,10 +382,10 @@ struct Default; impl StyleSheet for Default { fn active(&self) -> Style { - Style::VectorCircle(VectorCircleStyle { - knob_color: default_colors::LIGHT_BACK, - knob_border_width: 1, - knob_border_color: default_colors::BORDER, + Style::ClassicCircle(ClassicCircleStyle { + color: default_colors::LIGHT_BACK, + border_width: 1, + border_color: default_colors::BORDER, notch_color: default_colors::BORDER, notch_border_width: 0, notch_border_color: Color::TRANSPARENT, @@ -397,9 +397,9 @@ impl StyleSheet for Default { #[allow(irrefutable_let_patterns)] fn hovered(&self) -> Style { let active = self.active(); - if let Style::VectorCircle(active) = self.active() { - Style::VectorCircle(VectorCircleStyle { - knob_color: default_colors::KNOB_BACK_HOVER, + if let Style::ClassicCircle(active) = self.active() { + Style::ClassicCircle(ClassicCircleStyle { + color: default_colors::KNOB_BACK_HOVER, ..active }) } else { diff --git a/src/style/mod.rs b/src/style/mod.rs index 5a08e0c..9b2cc39 100644 --- a/src/style/mod.rs +++ b/src/style/mod.rs @@ -9,6 +9,7 @@ pub mod ramp; pub mod v_slider; pub mod xy_pad; +pub mod bar_tick_marks; pub mod db_meter; pub mod phase_meter; pub mod reduction_meter; diff --git a/src/style/phase_meter.rs b/src/style/phase_meter.rs index b8e8356..7d2dbcd 100644 --- a/src/style/phase_meter.rs +++ b/src/style/phase_meter.rs @@ -4,7 +4,7 @@ use iced::Color; -use crate::style::default_colors; +use crate::style::{bar_tick_marks, default_colors}; /// The appearance of a [`PhaseMeter`]. /// @@ -39,6 +39,16 @@ pub trait StyleSheet { /// /// [`PhaseMeter`]: ../../native/phase_meter/struct.PhaseMeter.html fn style(&self) -> Style; + + /// The style of a [`TickMarkGroup`] for a [`PhaseMeter`] + /// + /// For no tick marks, don't override this or set this to return `None`. + /// + /// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html + /// [`PhaseMeter`]: ../../native/phase_meter/struct.PhaseMeter.html + fn tick_mark_style(&self) -> Option { + None + } } struct Default; @@ -57,6 +67,10 @@ impl StyleSheet for Default { center_line_color: default_colors::PHASE_METER_CENTER_LINE, } } + + fn tick_mark_style(&self) -> Option { + Some(bar_tick_marks::Style::default()) + } } impl std::default::Default for Box { diff --git a/src/style/ramp.rs b/src/style/ramp.rs index 40839d8..8a9bfd4 100644 --- a/src/style/ramp.rs +++ b/src/style/ramp.rs @@ -12,11 +12,11 @@ use crate::style::default_colors; #[derive(Debug, Clone)] pub struct Style { /// The color of the background rectangle - pub background_color: Color, + pub back_color: Color, /// The width of the border of the background rectangle - pub border_width: u16, + pub back_border_width: u16, /// The color of the border of the background rectangle - pub border_color: Color, + pub back_border_color: Color, /// The width of the ramp line, pub line_width: f32, /// The color of the ramp line when it is in the center (straight) position @@ -52,9 +52,9 @@ struct Default; impl StyleSheet for Default { fn active(&self) -> Style { Style { - background_color: default_colors::LIGHT_BACK, - border_width: 1, - border_color: default_colors::BORDER, + back_color: default_colors::LIGHT_BACK, + back_border_width: 1, + back_border_color: default_colors::BORDER, line_width: 2.0, line_center_color: default_colors::BORDER, line_up_color: default_colors::BORDER, @@ -66,7 +66,7 @@ impl StyleSheet for Default { let active = self.active(); Style { - background_color: default_colors::RAMP_BACK_HOVER, + back_color: default_colors::RAMP_BACK_HOVER, ..active } } diff --git a/src/style/reduction_meter.rs b/src/style/reduction_meter.rs index 31f5411..5761fc7 100644 --- a/src/style/reduction_meter.rs +++ b/src/style/reduction_meter.rs @@ -4,7 +4,7 @@ use iced::Color; -use crate::style::default_colors; +use crate::style::{bar_tick_marks, default_colors}; /// The appearance of a [`ReductionMeter`]. /// @@ -27,83 +27,6 @@ pub struct Style { pub peak_line_width: u16, } -/// The placement of tick marks for a [`ReductionMeter`]. -/// -/// [`ReductionMeter`]: ../../native/reduction_meter/struct.ReductionMeter.html -#[derive(Debug, Copy, Clone, PartialEq)] -pub enum TickMarkPlacement { - /// Tick marks on both sides - LeftAndRight, - /// Tick marks only on the left/top side - Left, - /// Tick marks only on the right/bottom side - Right, -} - -impl std::default::Default for TickMarkPlacement { - fn default() -> Self { - TickMarkPlacement::LeftAndRight - } -} - -/// The style of a [`TickMarkGroup`] for a [`ReductionMeter`] -/// -/// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html -/// [`ReductionMeter`]: ../../native/reduction_meter/struct.ReductionMeter.html -#[derive(Debug, Copy, Clone)] -pub struct TickMarkStyle { - /// The length of a tier 1 tick mark - pub length_tier_1: u16, - /// The length of a tier 2 tick mark - pub length_tier_2: u16, - /// The length of a tier 3 tick mark - pub length_tier_3: u16, - - /// The width (thickness) of a tier 1 tick mark - pub width_tier_1: u16, - /// The width (thickness) of a tier 2 tick mark - pub width_tier_2: u16, - /// The width (thickness) of a tier 3 tick mark - pub width_tier_3: u16, - - /// The color of a tier 1 tick mark - pub color_tier_1: Color, - /// The color of a tier 2 tick mark - pub color_tier_2: Color, - /// The color of a tier 3 tick mark - pub color_tier_3: Color, - - /// The offset of the tick marks from the side of the [`ReductionMeter`] - /// - /// [`ReductionMeter`]: ../../native/reduction_meter/struct.ReductionMeter.html - pub offset: u16, - - /// The placement of the tick marks - pub placement: TickMarkPlacement, -} - -impl std::default::Default for TickMarkStyle { - fn default() -> Self { - Self { - length_tier_1: 4, - length_tier_2: 3, - length_tier_3: 2, - - width_tier_1: 2, - width_tier_2: 2, - width_tier_3: 1, - - color_tier_1: default_colors::DB_METER_TICK_TIER_1, - color_tier_2: default_colors::DB_METER_TICK_TIER_2, - color_tier_3: default_colors::DB_METER_TICK_TIER_3, - - offset: 2, - - placement: TickMarkPlacement::default(), - } - } -} - /// A set of rules that dictate the style of a [`ReductionMeter`]. /// /// [`ReductionMeter`]: ../../native/reduction_meter/struct.ReductionMeter.html @@ -119,7 +42,7 @@ pub trait StyleSheet { /// /// [`TickMarkGroup`]: ../../core/tick_marks/struct.TickMarkGroup.html /// [`ReductionMeter`]: ../../native/reduction_meter/struct.ReductionMeter.html - fn tick_mark_style(&self) -> Option { + fn tick_mark_style(&self) -> Option { None } } @@ -139,8 +62,8 @@ impl StyleSheet for Default { } } - fn tick_mark_style(&self) -> Option { - Some(TickMarkStyle::default()) + fn tick_mark_style(&self) -> Option { + Some(bar_tick_marks::Style::default()) } } diff --git a/src/style/v_slider.rs b/src/style/v_slider.rs index e58283f..2aea635 100644 --- a/src/style/v_slider.rs +++ b/src/style/v_slider.rs @@ -70,8 +70,8 @@ pub struct ClassicHandle { pub color: Color, /// height of the handle pub height: u16, - /// height of the middle notch - pub notch_height: u16, + /// the width (thickness) of the middle notch + pub notch_width: u16, /// color of the middle notch pub notch_color: Color, /// radius of the background rectangle @@ -89,16 +89,16 @@ pub struct ClassicHandle { /// [`VSlider`]: ../../native/v_slider/struct.VSlider.html #[derive(Debug, Clone, Copy)] pub struct RectStyle { - /// color of an unfilled portion in the background rectangle - pub back_empty_color: Color, - /// color of a filled portion in the background rectangle - pub back_filled_color: Color, - /// color of the background rectangle border - pub border_color: Color, - /// radius of the background rectangle - pub border_radius: u16, + /// color of the background rectangle + pub back_color: Color, /// width of the background rectangle border - pub border_width: u16, + pub back_border_width: u16, + /// radius of the background rectangle + pub back_border_radius: u16, + /// color of the background rectangle border + pub back_border_color: Color, + /// color of a filled portion in the background rectangle + pub filled_color: Color, /// color of the handle rectangle pub handle_color: Color, /// height of the handle rectangle @@ -116,24 +116,20 @@ pub struct RectStyle { /// [`VSlider`]: ../../native/v_slider/struct.VSlider.html #[derive(Debug, Clone, Copy)] pub struct RectBipolarStyle { - /// color of an unfilled portion in the background - /// rectangle on the bottom side of the center - pub back_bottom_empty_color: Color, + /// color of the background rectangle + pub back_color: Color, + /// width of the background rectangle border + pub back_border_width: u16, + /// radius of the background rectangle + pub back_border_radius: u16, + /// color of the background rectangle border + pub back_border_color: Color, /// color of a filled portion in the background /// rectangle on the bottom side of the center - pub back_bottom_filled_color: Color, - /// color of an unfilled portion in the background - /// rectangle on the top side of the center - pub back_top_empty_color: Color, + pub bottom_filled_color: Color, /// color of a filled portion in the background /// rectangle on the top side of the center - pub back_top_filled_color: Color, - /// color of the background rectangle border - pub border_color: Color, - /// radius of the background rectangle - pub border_radius: u16, - /// width of the background rectangle border - pub border_width: u16, + pub top_filled_color: Color, /// color of the handle rectangle when it is on the /// bottom side of the center pub handle_bottom_color: Color, @@ -155,19 +151,19 @@ pub struct RectBipolarStyle { /// [`VSlider`]: ../../native/v_slider/struct.VSlider.html #[derive(Debug, Copy, Clone)] pub struct TickMarkStyle { - /// The width of a tier 1 tick mark relative to the width of the `VSlider` - pub scale_tier_1: f32, - /// The width of a tier 2 tick mark relative to the width of the `VSlider` - pub scale_tier_2: f32, - /// The width of a tier 3 tick mark relative to the width of the `VSlider` - pub scale_tier_3: f32, + /// The length of a tier 1 tick mark relative to the length of the `VSlider` + pub length_scale_tier_1: f32, + /// The length of a tier 2 tick mark relative to the length of the `VSlider` + pub length_scale_tier_2: f32, + /// The length of a tier 3 tick mark relative to the length of the `VSlider` + pub length_scale_tier_3: f32, - /// The height (thickness) of a tier 1 tick mark - pub height_tier_1: u16, - /// The height (thickness) of a tier 2 tick mark - pub height_tier_2: u16, - /// The height (thickness) of a tier 3 tick mark - pub height_tier_3: u16, + /// The width (thickness) of a tier 1 tick mark + pub width_tier_1: u16, + /// The width (thickness) of a tier 2 tick mark + pub width_tier_2: u16, + /// The width (thickness) of a tier 3 tick mark + pub width_tier_3: u16, /// The color of a tier 1 tick mark pub color_tier_1: Color, @@ -181,29 +177,24 @@ pub struct TickMarkStyle { /// through the the rail, as apposed to a line above and a line below the /// rail. pub center_offset: u16, - - /// The horizontal offset from the edges of the `VSlider`. This is usually - /// half of the width of the handle. - pub handle_offset: u16, } impl std::default::Default for TickMarkStyle { fn default() -> Self { Self { - scale_tier_1: 1.5, - scale_tier_2: 1.25, - scale_tier_3: 1.05, + length_scale_tier_1: 1.65, + length_scale_tier_2: 1.55, + length_scale_tier_3: 1.4, - height_tier_1: 2, - height_tier_2: 2, - height_tier_3: 1, + width_tier_1: 2, + width_tier_2: 1, + width_tier_3: 1, - color_tier_1: default_colors::SLIDER_TICK_TIER_1, - color_tier_2: default_colors::SLIDER_TICK_TIER_2, - color_tier_3: default_colors::SLIDER_TICK_TIER_3, + color_tier_1: default_colors::TICK_TIER_1, + color_tier_2: default_colors::TICK_TIER_2, + color_tier_3: default_colors::TICK_TIER_3, - center_offset: 1, - handle_offset: 17, + center_offset: 0, } } } @@ -238,12 +229,12 @@ pub struct ModRangeStyle { pub placement: ModRangePlacement, /// The color of an empty portion of the line. /// Set to `None` for no empty portion. - pub color_empty: Option, + pub empty_color: Option, /// The color of a filled portion of the line. - pub color: Color, + pub filled_color: Color, /// The color of a filled portion of the ring when `end` is less than /// `start`. - pub color_inverse: Color, + pub filled_inverse_color: Color, } /// A set of rules that dictate the style of an [`VSlider`]. @@ -296,7 +287,7 @@ impl StyleSheet for Default { handle: ClassicHandle { color: default_colors::LIGHT_BACK, height: 34, - notch_height: 4, + notch_width: 4, notch_color: default_colors::BORDER, border_radius: 2, border_color: default_colors::BORDER, diff --git a/src/wgpu/bar_tick_marks.rs b/src/wgpu/bar_tick_marks.rs new file mode 100644 index 0000000..a88bccd --- /dev/null +++ b/src/wgpu/bar_tick_marks.rs @@ -0,0 +1,694 @@ +//! wgpu renderer for tick marks for bar meters + +use crate::core::TickMarkGroup; +use crate::style::bar_tick_marks::{Placement, Style}; +use iced_native::{Background, Color, Rectangle}; +use iced_wgpu::Primitive; + +pub fn draw_vertical_tick_marks( + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: &TickMarkGroup, + style: &Style, + inverse: bool, +) -> Primitive { + let mut primitives: Vec = Vec::new(); + + let offset = style.offset as f32; + + match style.placement { + Placement::BothSides => { + primitives.reserve_exact(tick_marks.len() * 2); + + let left_start_x = bounds_x - offset; + let right_x = bounds_x + bounds_width + offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + let left_x = left_start_x - mark_length; + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: left_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: right_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + let left_x = left_start_x - mark_length; + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: left_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: right_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + let left_x = left_start_x - mark_length; + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: left_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: right_x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + Placement::LeftOrTop => { + primitives.reserve_exact(tick_marks.len()); + + let start_x = bounds_x - offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + let x = start_x - mark_length; + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + let x = start_x - mark_length; + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + let x = start_x - mark_length; + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + Placement::RightOrBottom => { + primitives.reserve_exact(tick_marks.len()); + + let x = bounds_x + bounds_width + offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_y = bounds_y + bounds_height - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let y = if inverse { + (start_y - tick_mark_position.scale_inv(bounds_height)) + .floor() + } else { + (start_y - tick_mark_position.scale(bounds_height)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_length, + height: mark_width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + } + + Primitive::Group { primitives } +} + +pub fn draw_horizontal_tick_marks( + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: &TickMarkGroup, + style: &Style, + inverse: bool, +) -> Primitive { + let mut primitives: Vec = Vec::new(); + + let offset = style.offset as f32; + + match style.placement { + Placement::BothSides => { + primitives.reserve_exact(tick_marks.len() * 2); + + let top_start_y = bounds_y - offset; + let bottom_y = bounds_y + bounds_height + offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + let top_y = top_start_y - mark_length; + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: top_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: bottom_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + let top_y = top_start_y - mark_length; + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: top_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: bottom_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + let top_y = top_start_y - mark_length; + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: top_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: bottom_y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + Placement::LeftOrTop => { + primitives.reserve_exact(tick_marks.len()); + + let start_y = bounds_y - offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + let y = start_y - mark_length; + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + let y = start_y - mark_length; + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + let y = start_y - mark_length; + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + Placement::RightOrBottom => { + primitives.reserve_exact(tick_marks.len() * 2); + + let y = bounds_y + bounds_height + offset; + + if tick_marks.has_tier_1() { + let mark_width = style.width_tier_1 as f32; + let mark_length = style.length_tier_1 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_1); + + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_2() { + let mark_width = style.width_tier_2 as f32; + let mark_length = style.length_tier_2 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_2); + + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + if tick_marks.has_tier_3() { + let mark_width = style.width_tier_3 as f32; + let mark_length = style.length_tier_3 as f32; + let start_x = bounds_x - (mark_width / 2.0); + let color = Background::Color(style.color_tier_3); + + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let x = if inverse { + (start_x + tick_mark_position.scale_inv(bounds_width)) + .floor() + } else { + (start_x + tick_mark_position.scale(bounds_width)) + .floor() + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: mark_width, + height: mark_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } + } + } + } + + Primitive::Group { primitives } +} diff --git a/src/wgpu/db_meter.rs b/src/wgpu/db_meter.rs index 0866825..7072237 100644 --- a/src/wgpu/db_meter.rs +++ b/src/wgpu/db_meter.rs @@ -2,17 +2,16 @@ //! //! [`DBMeter`]: ../native/db_meter/struct.DBMeter.html -use crate::core::{Normal, TickMarkGroup, TickMarkTier}; +use crate::core::{Normal, TickMarkGroup}; use crate::native::db_meter; +use crate::wgpu::bar_tick_marks; use iced_native::{Background, Color, MouseCursor, Rectangle}; use iced_wgpu::{Primitive, Renderer}; pub use crate::native::db_meter::{ BarState, Orientation, State, TierPositions, }; -pub use crate::style::db_meter::{ - Style, StyleSheet, TickMarkPlacement, TickMarkStyle, -}; +pub use crate::style::db_meter::{Style, StyleSheet}; /// This is an alias of a `crate::native` [`DBMeter`] with an /// `iced_wgpu::Renderer`. @@ -465,6 +464,7 @@ impl db_meter::Renderer for Renderer { let style = style_sheet.style(); let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; let back = Primitive::Quad { bounds: Rectangle { @@ -481,120 +481,21 @@ impl db_meter::Renderer for Renderer { match orientation { Orientation::Vertical => { - let bar_height = bounds_height - (border_width * 2.0); + let bar_height = bounds_height - twice_border_width; let bar_y = bounds_y + border_width; let tick_marks: Primitive = { if let Some(tick_marks) = tick_marks { if let Some(style) = style_sheet.tick_mark_style() { - let notch_span = - bounds_height - (border_width * 2.0); - let start_y = - bounds_y + bounds_height - border_width; - - let mut primitives: Vec = Vec::new(); - - if style.placement != TickMarkPlacement::Right { - let notch_x = bounds_x - style.offset as f32; - - for left_tick_mark in tick_marks.group.iter() { - let y_offset = notch_span - * left_tick_mark.position.value(); - - let (length, height, color) = - match left_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_height = height as f32 / 2.0; - - let x = notch_x - length as f32; - - let mark = Primitive::Quad { - bounds: Rectangle { - x, - y: (start_y - - y_offset - - half_height) - .floor(), - width: length as f32, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - if style.placement != TickMarkPlacement::Left { - let notch_x = bounds_x - + bounds_width - + style.offset as f32; - - for right_tick_mark in tick_marks.group.iter() { - let y_offset = notch_span - * right_tick_mark.position.value(); - - let (length, height, color) = - match right_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_height = height as f32 / 2.0; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: notch_x, - y: (start_y - - y_offset - - half_height) - .floor(), - width: length as f32, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - Primitive::Group { primitives } + bar_tick_marks::draw_vertical_tick_marks( + bounds_x, + bar_y, + bounds_width, + bar_height, + &tick_marks, + &style, + false, + ) } else { Primitive::None } @@ -605,7 +506,7 @@ impl db_meter::Renderer for Renderer { let clip_marker_height = style.clip_marker_width as f32; let half_clip_marker_height = - (clip_marker_height * 0.5).round(); + (clip_marker_height / 2.0).round(); let clip_y = (bar_y + (bar_height * (1.0 - tier_positions.clipping.value())) - half_clip_marker_height) @@ -615,7 +516,7 @@ impl db_meter::Renderer for Renderer { bounds: Rectangle { x: bounds_x + border_width, y: clip_y, - width: bounds_width - (border_width * 2.0), + width: bounds_width - twice_border_width, height: clip_marker_height, }, background: Background::Color(style.clip_marker_color), @@ -628,8 +529,7 @@ impl db_meter::Renderer for Renderer { let inner_gap = style.inner_gap as f32; let bar_width = - ((bounds_width - (border_width * 2.0) - inner_gap) - * 0.5) + ((bounds_width - twice_border_width - inner_gap) / 2.0) .floor(); let left_bar_x = bounds_x + border_width; @@ -685,8 +585,8 @@ impl db_meter::Renderer for Renderer { MouseCursor::default(), ) } else { - let bar_width = bounds_width - (border_width * 2.0); - let bar_height = bounds_height - (border_width * 2.0); + let bar_width = bounds_width - twice_border_width; + let bar_height = bounds_height - twice_border_width; let bar_x = bounds_x + border_width; let bar_y = bounds_y + border_width; @@ -715,114 +615,21 @@ impl db_meter::Renderer for Renderer { } } Orientation::Horizontal => { - let bar_width = bounds_width - (border_width * 2.0); + let bar_width = bounds_width - twice_border_width; let bar_x = bounds_x + border_width; let tick_marks: Primitive = { if let Some(tick_marks) = tick_marks { if let Some(style) = style_sheet.tick_mark_style() { - let notch_span = - bounds_width - (border_width * 2.0); - - let mut primitives: Vec = Vec::new(); - - if style.placement != TickMarkPlacement::Right { - let notch_y = bounds_y - style.offset as f32; - - for left_tick_mark in tick_marks.group.iter() { - let x_offset = notch_span - * left_tick_mark.position.value(); - - let (length, width, color) = - match left_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_width = width as f32 / 2.0; - - let y = notch_y - length as f32; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: (bar_x + x_offset - half_width) - .floor(), - y, - width: width as f32, - height: length as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - if style.placement != TickMarkPlacement::Left { - let notch_y = bounds_y - + bounds_height - + style.offset as f32; - - for right_tick_mark in tick_marks.group.iter() { - let x_offset = notch_span - * right_tick_mark.position.value(); - - let (length, width, color) = - match right_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_width = width as f32 / 2.0; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: (bar_x + x_offset - half_width) - .floor(), - y: notch_y, - width: width as f32, - height: length as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - Primitive::Group { primitives } + bar_tick_marks::draw_horizontal_tick_marks( + bar_x, + bounds_y, + bar_width, + bounds_height, + &tick_marks, + &style, + false, + ) } else { Primitive::None } @@ -832,7 +639,7 @@ impl db_meter::Renderer for Renderer { }; let clip_marker_width = style.clip_marker_width as f32; - let half_clip_marker_width = clip_marker_width * 0.5; + let half_clip_marker_width = clip_marker_width / 2.0; let clip_x = (bar_x + (bar_width * tier_positions.clipping.value()) - half_clip_marker_width) @@ -843,7 +650,7 @@ impl db_meter::Renderer for Renderer { x: clip_x, y: bounds_y + border_width, width: clip_marker_width, - height: bounds_height - (border_width * 2.0), + height: bounds_height - twice_border_width, }, background: Background::Color(style.clip_marker_color), border_radius: 0, @@ -855,8 +662,8 @@ impl db_meter::Renderer for Renderer { let inner_gap = style.inner_gap as f32; let bar_height = - ((bounds_height - (border_width * 2.0) - inner_gap) - * 0.5) + ((bounds_height - twice_border_width - inner_gap) + / 2.0) .floor(); let left_bar_y = bounds_y + border_width; @@ -912,8 +719,8 @@ impl db_meter::Renderer for Renderer { MouseCursor::default(), ) } else { - let bar_width = bounds_width - (border_width * 2.0); - let bar_height = bounds_height - (border_width * 2.0); + let bar_width = bounds_width - twice_border_width; + let bar_height = bounds_height - twice_border_width; let bar_x = bounds_x + border_width; let bar_y = bounds_y + border_width; diff --git a/src/wgpu/h_slider.rs b/src/wgpu/h_slider.rs index 505867d..1037241 100644 --- a/src/wgpu/h_slider.rs +++ b/src/wgpu/h_slider.rs @@ -2,7 +2,7 @@ //! //! [`HSlider`]: ../native/h_slider/struct.HSlider.html -use crate::core::{ModulationRange, Normal, TickMarkGroup, TickMarkTier}; +use crate::core::{ModulationRange, Normal, TickMarkGroup}; use crate::native::h_slider; use iced_native::{Background, Color, MouseCursor, Point, Rectangle}; use iced_wgpu::{Primitive, Renderer}; @@ -44,100 +44,28 @@ impl h_slider::Renderer for Renderer { style_sheet.active() }; + let tick_mark_style = style_sheet.tick_mark_style(); + let bounds_x = bounds.x.floor(); let bounds_y = bounds.y.floor(); let bounds_width = bounds.width.floor(); let bounds_height = bounds.height.floor(); - let rail_y = (bounds_y + (bounds_height / 2.0)).round(); + let rail_y = (bounds_y + (bounds_height / 2.0)).floor(); - let mod_range_line: Primitive = { + let mod_range_line = { if let Some(mod_range) = mod_range { if mod_range.visible { if let Some(style) = style_sheet.mod_range_style() { - let offset = style.offset as f32; - - let (y, height) = match style.placement { - ModRangePlacement::Center => ( - bounds_y + offset, - bounds_height - (offset * 2.0), - ), - ModRangePlacement::Top => ( - bounds_y - offset - style.width as f32, - style.width as f32, - ), - ModRangePlacement::Bottom => ( - bounds_y + bounds_height + offset, - style.width as f32, - ), - }; - - let back: Primitive = { - if let Some(color_empty) = style.color_empty { - Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y, - width: bounds_width, - height, - }, - background: Background::Color(color_empty), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - let filled: Primitive = { - if mod_range.filled_visible - && (mod_range.start.value() - != mod_range.end.value()) - { - let (start, end, color) = - if mod_range.start.value() - < mod_range.end.value() - { - ( - mod_range.start.value(), - mod_range.end.value(), - style.color, - ) - } else { - ( - mod_range.end.value(), - mod_range.start.value(), - style.color_inverse, - ) - }; - - let start_offset = bounds_width * start; - let filled_width = - (bounds_width * end) - start_offset; - - Primitive::Quad { - bounds: Rectangle { - x: bounds_x + start_offset, - y, - width: filled_width, - height, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - Primitive::Group { - primitives: vec![back, filled], - } + draw_mod_range( + bounds_x, + bounds_y, + bounds_width, + bounds_height, + mod_range, + &style, + ) } else { Primitive::None } @@ -149,501 +77,796 @@ impl h_slider::Renderer for Renderer { } }; - let tick_marks: Primitive = { - if let Some(tick_marks) = tick_marks { - if let Some(style) = style_sheet.tick_mark_style() { - let center_offset = style.center_offset as f32; - let handle_offset = style.handle_offset as f32; - let notch_span = bounds_width - (handle_offset * 2.0); - - let mut primitives: Vec = Vec::new(); - for tick_mark in tick_marks.group.iter() { - let x_offset = ((notch_span - * tick_mark.position.value()) - + handle_offset) - .round(); - - let (scale, width, color) = match tick_mark.tier { - TickMarkTier::One => ( - style.scale_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.scale_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.scale_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let notch_height = (scale * bounds_height).round(); - let half_notch_height = (notch_height / 2.0).round(); - let half_width = (width as f32 / 2.0).round(); - - if style.center_offset == 0 { - let mark = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + x_offset - half_width, - y: rail_y - half_notch_height, - width: width as f32, - height: notch_height, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } else { - let top = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + x_offset - half_width, - y: rail_y - - half_notch_height - - center_offset, - width: width as f32, - height: half_notch_height, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - let bottom = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + x_offset - half_width, - y: rail_y + center_offset, - width: width as f32, - height: half_notch_height, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(top); - primitives.push(bottom); - } - } + let primitives = match style { + Style::Texture(style) => draw_texture_style( + normal, + rail_y, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + style, + mod_range_line, + ), + Style::Classic(style) => draw_classic_style( + normal, + rail_y, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + Style::Rect(style) => draw_rect_style( + normal, + rail_y, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + Style::RectBipolar(style) => draw_rect_bipolar_style( + normal, + rail_y, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + }; - Primitive::Group { primitives } + (primitives, MouseCursor::default()) + } +} + +fn draw_mod_range( + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + mod_range: ModulationRange, + style: &ModRangeStyle, +) -> Primitive { + let offset = style.offset as f32; + + let (y, height) = match style.placement { + ModRangePlacement::Center => { + (bounds_y + offset, bounds_height - (offset * 2.0)) + } + ModRangePlacement::Top => { + (bounds_y - offset - style.width as f32, style.width as f32) + } + ModRangePlacement::Bottom => { + (bounds_y + bounds_height + offset, style.width as f32) + } + }; + + let back: Primitive = { + if let Some(empty_color) = style.empty_color { + Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y, + width: bounds_width, + height, + }, + background: Background::Color(empty_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + } + } else { + Primitive::None + } + }; + + let filled: Primitive = { + if mod_range.filled_visible + && (mod_range.start.value() != mod_range.end.value()) + { + let (start, end, color) = + if mod_range.start.value() < mod_range.end.value() { + ( + mod_range.start.value(), + mod_range.end.value(), + style.filled_color, + ) } else { - Primitive::None - } - } else { - Primitive::None + ( + mod_range.end.value(), + mod_range.start.value(), + style.filled_inverse_color, + ) + }; + + let start_offset = bounds_width * start; + let filled_width = (bounds_width * end) - start_offset; + + Primitive::Quad { + bounds: Rectangle { + x: bounds_x + start_offset, + y, + width: filled_width, + height, + }, + background: Background::Color(color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, } - }; + } else { + Primitive::None + } + }; - match style { - Style::Texture(style) => { - let (top_rail_height, bottom_rail_height) = style.rail_heights; - let top_rail_height = top_rail_height as f32; - let bottom_rail_height = bottom_rail_height as f32; - let full_rail_height = top_rail_height + bottom_rail_height; - let half_full_rail_height = (full_rail_height / 2.0).floor(); - - let (rail_top, rail_bottom) = ( - Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: rail_y - half_full_rail_height, - width: bounds_width, - height: top_rail_height, - }, - background: Background::Color(style.rail_colors.0), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: rail_y - half_full_rail_height + top_rail_height, - width: bounds_width, - height: bottom_rail_height, - }, - background: Background::Color(style.rail_colors.1), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - ); - - let handle_width = style.handle_width as f32; - - let handle_offset = - ((bounds_width - handle_width) * normal.value()).round(); - - let handle = { - if let Some(pad) = style.texture_padding { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: bounds.x + handle_offset - pad.left as f32, - y: (rail_y - (bounds_height / 2.0)).round() - - pad.top as f32, - width: handle_width - + (pad.left + pad.right) as f32, - height: bounds_height - + (pad.top + pad.bottom) as f32, - }, - } - } else { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: bounds.x + handle_offset, - y: (rail_y - (bounds_height / 2.0)).round(), - width: handle_width, - height: bounds_height, - }, - } - } - }; + Primitive::Group { + primitives: vec![back, filled], + } +} - ( - Primitive::Group { - primitives: vec![ - tick_marks, - rail_top, - rail_bottom, - handle, - mod_range_line, - ], - }, - MouseCursor::default(), +fn draw_texture_style( + normal: Normal, + rail_y: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: TextureStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_width = style.handle_width as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_y, + (bounds_x + (handle_width / 2.0)).floor(), + bounds_width - handle_width, + bounds_height, + tick_marks, + &style, ) + } else { + Primitive::None } + } else { + Primitive::None + } + }; + + let (top_rail_width, bottom_rail_width) = style.rail_widths; + let (top_rail_color, bottom_rail_color) = style.rail_colors; + let (top_rail, bottom_rail) = draw_rails( + rail_y, + bounds_x, + bounds_width, + top_rail_width, + bottom_rail_width, + &top_rail_color, + &bottom_rail_color, + ); + + let handle_offset = normal.scale(bounds_width - handle_width).floor(); + + let handle = { + if let Some(pad) = style.texture_padding { + Primitive::Image { + handle: style.texture, + bounds: Rectangle { + x: bounds_x + handle_offset - pad.left as f32, + y: bounds_y - pad.top as f32, + width: handle_width + (pad.left + pad.right) as f32, + height: bounds_height + (pad.top + pad.bottom) as f32, + }, + } + } else { + Primitive::Image { + handle: style.texture, + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width, + height: bounds_height, + }, + } + } + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + top_rail, + bottom_rail, + handle, + mod_range_line, + ], + } +} - Style::Classic(style) => { - let (top_rail_height, bottom_rail_height) = style.rail_heights; - let top_rail_height = top_rail_height as f32; - let bottom_rail_height = bottom_rail_height as f32; - let full_rail_height = top_rail_height + bottom_rail_height; - let half_full_rail_height = (full_rail_height / 2.0).floor(); - - let (rail_top, rail_bottom) = ( - Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: rail_y - half_full_rail_height, - width: bounds_width, - height: top_rail_height, - }, - background: Background::Color(style.rail_colors.0), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: rail_y - half_full_rail_height + top_rail_height, - width: bounds_width, - height: bottom_rail_height, - }, - background: Background::Color(style.rail_colors.1), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - ); - - let (handle_width, handle_border_radius) = - (f32::from(style.handle.width), style.handle.border_radius); - - let handle_offset = - ((bounds_width - handle_width) * normal.value()).round(); - - let notch_width = style.handle.notch_width as f32; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + handle_offset, - y: (rail_y - (bounds_height / 2.0)).round(), - width: handle_width, - height: bounds_height, - }, - background: Background::Color(style.handle.color), - border_radius: handle_border_radius, - border_width: style.handle.border_width, - border_color: style.handle.border_color, - }; - - let handle_notch: Primitive = { - if style.handle.notch_width != 0 { - Primitive::Quad { - bounds: Rectangle { - x: (bounds_x - + handle_offset - + (handle_width / 2.0) - - (notch_width / 2.0)) - .round(), - y: (rail_y - (bounds_height / 2.0)).round(), - width: notch_width, - height: bounds_height, - }, - background: Background::Color( - style.handle.notch_color, - ), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; +fn draw_classic_style( + normal: Normal, + rail_y: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &ClassicStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_width = style.handle.width as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_y, + (bounds_x + (handle_width / 2.0)).floor(), + bounds_width - handle_width, + bounds_height, + tick_marks, + &style, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + + let (top_rail_width, bottom_rail_width) = style.rail_widths; + let (top_rail_color, bottom_rail_color) = style.rail_colors; + let (top_rail, bottom_rail) = draw_rails( + rail_y, + bounds_x, + bounds_width, + top_rail_width, + bottom_rail_width, + &top_rail_color, + &bottom_rail_color, + ); + + let handle_border_radius = style.handle.border_radius; + + let handle_offset = normal.scale(bounds_width - handle_width).floor(); + + let notch_width = style.handle.notch_width as f32; + + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width, + height: bounds_height, + }, + background: Background::Color(style.handle.color), + border_radius: handle_border_radius, + border_width: style.handle.border_width, + border_color: style.handle.border_color, + }; + + let handle_notch: Primitive = { + if style.handle.notch_width != 0 { + Primitive::Quad { + bounds: Rectangle { + x: (bounds_x + handle_offset + (handle_width / 2.0) + - (notch_width / 2.0)) + .floor(), + y: bounds_y, + width: notch_width, + height: bounds_height, + }, + background: Background::Color(style.handle.notch_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + } + } else { + Primitive::None + } + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + top_rail, + bottom_rail, + handle, + handle_notch, + mod_range_line, + ], + } +} - ( - Primitive::Group { - primitives: vec![ - tick_marks, - rail_top, - rail_bottom, - handle, - handle_notch, - mod_range_line, - ], - }, - MouseCursor::default(), +fn draw_rect_style( + normal: Normal, + rail_y: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &RectStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_width = style.handle_width as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_y, + (bounds_x + (handle_width / 2.0)).floor(), + bounds_width - handle_width, + bounds_height, + tick_marks, + &style, ) + } else { + Primitive::None } + } else { + Primitive::None + } + }; + + let empty_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_width, + height: bounds_height, + }, + background: Background::Color(style.back_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: style.back_border_color, + }; + + let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; + + let handle_offset = normal + .scale(bounds_width - twice_border_width - handle_width) + .floor(); + + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: handle_offset + twice_border_width + - style.handle_filled_gap as f32, + height: bounds_height, + }, + background: Background::Color(style.filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; + + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width + twice_border_width, + height: bounds_height, + }, + background: Background::Color(style.handle_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; + + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } +} - Style::Rect(style) => { - let empty_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: bounds_width, - height: bounds_height, - }, - background: Background::Color(style.back_empty_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: style.border_color, - }; +fn draw_rect_bipolar_style( + normal: Normal, + rail_y: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &RectBipolarStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_width = style.handle_width as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_y, + (bounds_x + (handle_width / 2.0)).floor(), + bounds_width - handle_width, + bounds_height, + tick_marks, + &style, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + + let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; + + let empty_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_width, + height: bounds_height, + }, + background: Background::Color(style.back_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: style.back_border_color, + }; + + let half_bounds_width = (bounds_width / 2.0).floor(); + + let handle_offset = normal + .scale(bounds_width - twice_border_width - handle_width) + .floor(); + + if normal.value() > 0.499 && normal.value() < 0.501 { + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width + twice_border_width, + height: bounds_height, + }, + background: Background::Color(style.handle_center_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let handle_width = style.handle_width as f32; - let border_width = style.border_width as f32; - - let handle_offset = (((bounds_width - (border_width * 2.0)) - - handle_width) - * normal.value() - + border_width) - .round(); - - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: handle_offset + border_width - - style.handle_filled_gap as f32, - height: bounds_height, - }, - background: Background::Color(style.back_filled_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + Primitive::Group { + primitives: vec![empty_rect, tick_marks, mod_range_line, handle], + } + } else if normal.value() < 0.5 { + let filled_rect_offset = + handle_offset + handle_width + style.handle_filled_gap as f32; + + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + filled_rect_offset, + y: bounds_y, + width: half_bounds_width - filled_rect_offset + + twice_border_width, + height: bounds_height, + }, + background: Background::Color(style.left_filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let handle = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + handle_offset - border_width, - y: bounds_y, - width: handle_width + (border_width * 2.0), - height: bounds_height, - }, - background: Background::Color(style.handle_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width + twice_border_width, + height: bounds_height, + }, + background: Background::Color(style.handle_left_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - ( - Primitive::Group { - primitives: vec![ - empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } + } else { + let filled_rect_offset = half_bounds_width; + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + filled_rect_offset, + y: bounds_y, + width: handle_offset - filled_rect_offset + twice_border_width + - style.handle_filled_gap as f32, + height: bounds_height, + }, + background: Background::Color(style.right_filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - Style::RectBipolar(style) => { - let handle_width = style.handle_width as f32; - let border_width = style.border_width as f32; - - let left_empty_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: bounds_width, - height: bounds_height, - }, - background: Background::Color(style.back_left_empty_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: style.border_color, - }; + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + handle_offset, + y: bounds_y, + width: handle_width + twice_border_width, + height: bounds_height, + }, + background: Background::Color(style.handle_right_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let half_bounds_width = (bounds_width / 2.0).round(); - - let right_empty_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + half_bounds_width - border_width, - y: bounds_y, - width: half_bounds_width + border_width, - height: bounds_height, - }, - background: Background::Color(style.back_right_empty_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } + } +} - let handle_offset = ((((bounds_width - (border_width * 2.0)) - - handle_width) - * normal.value()) - + border_width) - .round(); - - if normal.value() > 0.499 && normal.value() < 0.501 { - let handle = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + handle_offset - border_width, - y: bounds_y, - width: handle_width + (border_width * 2.0), - height: bounds_height, - }, - background: Background::Color( - style.handle_center_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_rails( + rail_y: f32, + bounds_x: f32, + bounds_width: f32, + top_rail_width: u16, + bottom_rail_width: u16, + top_rail_color: &Color, + bottom_rail_color: &Color, +) -> (Primitive, Primitive) { + let top_rail_width = top_rail_width as f32; + let bottom_rail_width = bottom_rail_width as f32; + let full_rail_width = top_rail_width + bottom_rail_width; + let half_full_rail_width = (full_rail_width / 2.0).floor(); + + ( + Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: rail_y - half_full_rail_width, + width: bounds_width, + height: top_rail_width, + }, + background: Background::Color(*top_rail_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }, + Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: rail_y - half_full_rail_width + top_rail_width, + width: bounds_width, + height: bottom_rail_width, + }, + background: Background::Color(*bottom_rail_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }, + ) +} - ( - Primitive::Group { - primitives: vec![ - left_empty_rect, - right_empty_rect, - tick_marks, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } else if normal.value() < 0.5 { - let filled_rect_offset = handle_offset - + handle_width - + style.handle_filled_gap as f32 - - border_width; - - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + filled_rect_offset, - y: bounds_y, - width: half_bounds_width - filled_rect_offset - + border_width, - height: bounds_height, - }, - background: Background::Color( - style.back_left_filled_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + handle_offset - border_width, - y: bounds_y, - width: handle_width + (border_width * 2.0), - height: bounds_height, - }, - background: Background::Color(style.handle_left_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_tick_mark_tier_merged( + primitives: &mut Vec, + tick_mark_positions: &Vec, + width: f32, + length_scale: f32, + color: &Color, + bounds_x: f32, + rail_y: f32, + bounds_width: f32, + bounds_height: f32, +) { + let length = (length_scale * bounds_height).floor(); + let color = Background::Color(*color); + let start_x = bounds_x - (width / 2.0); + let y = (rail_y - (length / 2.0)).floor(); + + for position in tick_mark_positions.iter() { + let x = (start_x + position.scale(bounds_width)).floor(); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width, + height: length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } +} - ( - Primitive::Group { - primitives: vec![ - left_empty_rect, - right_empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } else { - let filled_rect_offset = half_bounds_width; - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + filled_rect_offset - border_width, - y: bounds_y, - width: handle_offset - filled_rect_offset - + (border_width * 2.0) - - style.handle_filled_gap as f32, - height: bounds_height, - }, - background: Background::Color( - style.back_right_filled_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + handle_offset - border_width, - y: bounds_y, - width: handle_width + (border_width * 2.0), - height: bounds_height, - }, - background: Background::Color(style.handle_right_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_tick_mark_tier( + primitives: &mut Vec, + tick_mark_positions: &Vec, + width: f32, + length_scale: f32, + color: &Color, + bounds_x: f32, + rail_y: f32, + bounds_width: f32, + bounds_height: f32, + center_offset: f32, +) { + let length = (length_scale * bounds_height).floor(); + let half_length = (length / 2.0).floor(); + let color = Background::Color(*color); + let start_x = bounds_x - (width / 2.0); + + let top_y = rail_y - center_offset - half_length; + let bottom_y = rail_y + center_offset; + + for position in tick_mark_positions.iter() { + let x = (start_x + position.scale(bounds_width)).floor(); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: top_y, + width: width, + height: half_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y: bottom_y, + width: width, + height: half_length, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } +} - ( - Primitive::Group { - primitives: vec![ - left_empty_rect, - right_empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } - } +fn draw_tick_marks( + rail_y: f32, + bounds_x: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: &TickMarkGroup, + style: &TickMarkStyle, +) -> Primitive { + let mut primitives: Vec = Vec::new(); + + if style.center_offset == 0 { + primitives.reserve_exact(tick_marks.len()); + + if tick_marks.has_tier_1() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_1_positions(), + style.width_tier_1 as f32, + style.length_scale_tier_1, + &style.color_tier_1, + bounds_x, + rail_y, + bounds_width, + bounds_height, + ); + } + if tick_marks.has_tier_2() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_2_positions(), + style.width_tier_2 as f32, + style.length_scale_tier_2, + &style.color_tier_2, + bounds_x, + rail_y, + bounds_width, + bounds_height, + ); + } + if tick_marks.has_tier_3() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_3_positions(), + style.width_tier_3 as f32, + style.length_scale_tier_3, + &style.color_tier_3, + bounds_x, + rail_y, + bounds_width, + bounds_height, + ); + } + } else { + primitives.reserve_exact(tick_marks.len() * 2); + + let center_offset = style.center_offset as f32; + + if tick_marks.has_tier_1() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_1_positions(), + style.width_tier_1 as f32, + style.length_scale_tier_1, + &style.color_tier_1, + bounds_x, + rail_y, + bounds_width, + bounds_height, + center_offset, + ); + } + if tick_marks.has_tier_2() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_2_positions(), + style.width_tier_2 as f32, + style.length_scale_tier_2, + &style.color_tier_2, + bounds_x, + rail_y, + bounds_width, + bounds_height, + center_offset, + ); + } + if tick_marks.has_tier_3() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_3_positions(), + style.width_tier_3 as f32, + style.length_scale_tier_3, + &style.color_tier_3, + bounds_x, + rail_y, + bounds_width, + bounds_height, + center_offset, + ); } } + + Primitive::Group { primitives } } diff --git a/src/wgpu/knob.rs b/src/wgpu/knob.rs index 53044c1..4b0836f 100644 --- a/src/wgpu/knob.rs +++ b/src/wgpu/knob.rs @@ -2,7 +2,7 @@ //! //! [`Knob`]: ../native/knob/struct.Knob.html -use crate::core::{ModulationRange, Normal, TickMarkGroup, TickMarkTier}; +use crate::core::{ModulationRange, Normal, TickMarkGroup}; use crate::native::knob; use iced_native::{Background, Color, MouseCursor, Point, Rectangle, Vector}; use iced_wgpu::widget::canvas::{path::Arc, Frame, LineCap, Path, Stroke}; @@ -10,9 +10,9 @@ use iced_wgpu::{Primitive, Renderer}; pub use crate::native::knob::State; pub use crate::style::knob::{ - ArcBipolarNotch, ArcBipolarStyle, ArcNotch, ArcStyle, CircleTickMarks, - LineTickMarks, ModRangeRingStyle, Style, StyleSheet, TickMarkStyle, - ValueRingStyle, VectorCircleStyle, VectorLineStyle, + ArcBipolarNotch, ArcBipolarStyle, ArcNotch, ArcStyle, CircleTickMarkStyle, + ClassicCircleStyle, ClassicLineStyle, LineTickMarkStyle, ModRangeRingStyle, + Style, StyleSheet, TickMarkStyle, ValueRingStyle, }; /// This is an alias of a `crate::native` [`Knob`] with an @@ -53,124 +53,25 @@ impl knob::Renderer for Renderer { let radius = bounds_size / 2.0; - let value_ring: Primitive = { - if let Some(style) = style_sheet.value_ring_style() { - let mut start_angle = - angle_range.min() + std::f32::consts::FRAC_PI_2; - if start_angle >= crate::TAU { - start_angle -= crate::TAU - } - - let angle_span = angle_range.max() - angle_range.min(); - - let fill_angle_span = angle_span * normal.value(); - - let frame_size = - bounds_size + style.offset + (style.width * 0.5); - - let mut frame = Frame::new(frame_size, frame_size); - frame.translate(Vector::new(bounds_x, bounds_y)); - - let center_point = Point::new(radius, radius); - let arc_radius = radius + style.offset + (style.width * 0.5); - - let empty_stroke = Stroke { - width: style.width, - color: style.color_empty, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let empty_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle, - end_angle: angle_span, - }; - - let empty_path = Path::new(|path| path.arc(empty_arc)); - - frame.stroke(&empty_path, empty_stroke); - - if let Some(color_right) = style.color_right { - if normal.value() < 0.5 { - let filled_stroke = Stroke { - width: style.width, - color: style.color_left, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + fill_angle_span, - end_angle: (angle_span * 0.5) - fill_angle_span, - }; + let mut angle_start = angle_range.min() + std::f32::consts::FRAC_PI_2; + if angle_start >= crate::TAU { + angle_start -= crate::TAU + } - let filled_path = - Path::new(|path| path.arc(filled_arc)); + let angle_span = angle_range.max() - angle_range.min(); - frame.stroke(&filled_path, filled_stroke); - } else { - let filled_stroke = Stroke { - width: style.width, - color: color_right, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + (angle_span * 0.5), - end_angle: fill_angle_span - (angle_span * 0.5), - }; - - let filled_path = - Path::new(|path| path.arc(filled_arc)); - - frame.stroke(&filled_path, filled_stroke); - } - } else { - let center_point = Point::new(radius, radius); - let arc_radius = - radius + style.offset + (style.width * 0.5); - - let empty_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + fill_angle_span, - end_angle: angle_span - fill_angle_span, - }; - - let empty_path = Path::new(|path| path.arc(empty_arc)); - - frame.stroke(&empty_path, empty_stroke); - - if normal.value() != 0.0 { - let filled_stroke = Stroke { - width: style.width, - color: style.color_left, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle, - end_angle: fill_angle_span, - }; - - let filled_path = - Path::new(|path| path.arc(filled_arc)); - - frame.stroke(&filled_path, filled_stroke); - } - } - - frame.into_primitive() + let value_ring: Primitive = { + if let Some(style) = style_sheet.value_ring_style() { + draw_value_ring( + angle_start, + angle_span, + normal, + bounds_x, + bounds_y, + bounds_size, + radius, + &style, + ) } else { Primitive::None } @@ -180,89 +81,16 @@ impl knob::Renderer for Renderer { if let Some(mod_range) = mod_range { if mod_range.visible { if let Some(style) = style_sheet.mod_range_ring_style() { - let mut start_angle = - angle_range.min() + std::f32::consts::FRAC_PI_2; - if start_angle >= crate::TAU { - start_angle -= crate::TAU - } - - let center_point = Point::new(radius, radius); - let arc_radius = - radius + style.offset + (style.width * 0.5); - - let angle_span = angle_range.max() - angle_range.min(); - - let frame_size = - bounds_size + style.offset + (style.width * 0.5); - - let mut frame = Frame::new(frame_size, frame_size); - frame.translate(Vector::new(bounds_x, bounds_y)); - - if let Some(color_empty) = style.color_empty { - let empty_stroke = Stroke { - width: style.width, - color: color_empty, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let empty_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle, - end_angle: angle_span, - }; - - let empty_path = - Path::new(|path| path.arc(empty_arc)); - - frame.stroke(&empty_path, empty_stroke); - } - - if mod_range.filled_visible - && (mod_range.start.value() - != mod_range.end.value()) - { - let (start, end, color) = if mod_range.start.value() - < mod_range.end.value() - { - ( - mod_range.start.value(), - mod_range.end.value(), - style.color, - ) - } else { - ( - mod_range.end.value(), - mod_range.start.value(), - style.color_inverse, - ) - }; - - let start_span = angle_span * start; - let span = (angle_span * end) - start_span; - - let filled_stroke = Stroke { - width: style.width, - color: color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + start_span, - end_angle: span, - }; - - let filled_path = - Path::new(|path| path.arc(filled_arc)); - - frame.stroke(&filled_path, filled_stroke); - } - - frame.into_primitive() + draw_mod_range_ring( + angle_start, + angle_span, + bounds_x, + bounds_y, + bounds_size, + radius, + &style, + &mod_range, + ) } else { Primitive::None } @@ -274,134 +102,113 @@ impl knob::Renderer for Renderer { } }; + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = style_sheet.tick_mark_style() { + match style { + TickMarkStyle::Circle(style) => draw_circle_tick_marks( + angle_start, + angle_span, + radius, + bounds_x, + bounds_y, + &tick_marks, + &style, + ), + TickMarkStyle::Line(style) => draw_line_tick_marks( + angle_start, + angle_span, + radius, + bounds_x, + bounds_y, + bounds_size, + &tick_marks, + &style, + ), + } + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + + ( + match style { + Style::ClassicCircle(style) => draw_classic_circle_style( + angle_start, + angle_span, + bounds_x, + bounds_y, + bounds_size, + radius, + normal, + &style, + value_ring, + mod_range_ring, + tick_marks, + ), + Style::ClassicLine(style) => draw_classic_line_style( + angle_start, + angle_span, + bounds_x, + bounds_y, + bounds_size, + radius, + normal, + &style, + value_ring, + mod_range_ring, + tick_marks, + ), + Style::Arc(style) => draw_arc_style( + angle_start, + angle_span, + bounds_x, + bounds_y, + bounds_size, + radius, + normal, + &style, + value_ring, + mod_range_ring, + tick_marks, + ), + Style::ArcBipolar(style) => draw_arc_bipolar_style( + angle_start, + angle_span, + bounds_x, + bounds_y, + bounds_size, + radius, + normal, + &style, + value_ring, + mod_range_ring, + tick_marks, + ), + }, + MouseCursor::default(), + ) + + /* let tick_marks: Primitive = { if let Some(tick_marks) = tick_marks { if let Some(style) = style_sheet.tick_mark_style() { match style { TickMarkStyle::Circle(style) => { - let mut primitives: Vec = Vec::new(); - - let tick_mark_radius = radius + style.offset; - - for tick_mark in tick_marks.group.iter() { - let (diameter, color) = match tick_mark.tier { - TickMarkTier::One => ( - style.diameter_tier_1 as f32, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.diameter_tier_2 as f32, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.diameter_tier_3 as f32, - style.color_tier_3, - ), - }; - - let tick_radius = diameter / 2.0; - - let angle = ((angle_range.max() - - angle_range.min()) - * tick_mark.position.value()) - + angle_range.min() - + std::f32::consts::PI; - - let (dx, dy) = { - if angle < -0.001 || angle > 0.001 { - angle.sin_cos() - } else { - (0.0, -1.0) - } - }; - - primitives.push(Primitive::Quad { - bounds: Rectangle { - x: (bounds_x - + radius - + (dx * tick_mark_radius) - - tick_radius) - .round(), - y: (bounds_y + radius - - (dy * tick_mark_radius) - - tick_radius) - .round(), - width: diameter, - height: diameter, - }, - background: Background::Color(color), - border_radius: tick_radius as u16, - border_width: 0, - border_color: Color::TRANSPARENT, - }); - } - - Primitive::Group { primitives } + draw_circle_tick_marks( + radius, + bounds_x, + bounds_y, + &angle_range, + tick_marks, + &style + ) } TickMarkStyle::Line(style) => { - let tick_mark_offset = radius + style.offset; - - /* - let mut frame = Frame::new( - Size::new(bounds_size, bounds_size)); - */ - - let mut frame = - Frame::new(bounds_size, bounds_size); - - frame.translate(Vector::new( - bounds_x + radius, - bounds_y + radius, - )); - - for tick_mark in tick_marks.group.iter() { - let (width, length, color) = - match tick_mark.tier { - TickMarkTier::One => ( - style.width_tier_1, - style.length_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.width_tier_2, - style.length_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.width_tier_3, - style.length_tier_3, - style.color_tier_3, - ), - }; - - let angle = ((angle_range.max() - - angle_range.min()) - * tick_mark.position.value()) - + angle_range.min(); - - let stroke = Stroke { - width, - color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let path = Path::line( - Point::new(0.0, tick_mark_offset), - Point::new(0.0, tick_mark_offset + length), - ); - - frame.with_save(|frame| { - if angle < -0.001 || angle > 0.001 { - frame.rotate(angle); - } - - frame.stroke(&path, stroke); - }); - } - - frame.into_primitive() - } + } } else { Primitive::None @@ -410,414 +217,765 @@ impl knob::Renderer for Renderer { Primitive::None } }; + */ + } +} + +fn draw_value_ring( + start_angle: f32, + angle_span: f32, + normal: Normal, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + style: &ValueRingStyle, +) -> Primitive { + let fill_angle_span = angle_span * normal.value(); + let half_angle_span = angle_span / 2.0; + let half_width = style.width / 2.0; + + let frame_size = bounds_size + style.offset + half_width; + + let mut frame = Frame::new(frame_size, frame_size); + frame.translate(Vector::new(bounds_x, bounds_y)); + + let center_point = Point::new(radius, radius); + let arc_radius = radius + style.offset + half_width; + + let empty_stroke = Stroke { + width: style.width, + color: style.empty_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let empty_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle, + end_angle: angle_span, + }; + + let empty_path = Path::new(|path| path.arc(empty_arc)); + + frame.stroke(&empty_path, empty_stroke); + + if let Some(right_filled_color) = style.right_filled_color { + if normal.value() < 0.5 { + let filled_stroke = Stroke { + width: style.width, + color: style.left_filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle + fill_angle_span, + end_angle: half_angle_span - fill_angle_span, + }; + + let filled_path = Path::new(|path| path.arc(filled_arc)); + + frame.stroke(&filled_path, filled_stroke); + } else { + let filled_stroke = Stroke { + width: style.width, + color: right_filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle + half_angle_span, + end_angle: fill_angle_span - half_angle_span, + }; + + let filled_path = Path::new(|path| path.arc(filled_arc)); + + frame.stroke(&filled_path, filled_stroke); + } + } else { + let center_point = Point::new(radius, radius); + let arc_radius = radius + style.offset + half_width; + + let empty_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle + fill_angle_span, + end_angle: angle_span - fill_angle_span, + }; - match style { - /* - Style::Texture(style) => { + let empty_path = Path::new(|path| path.arc(empty_arc)); + frame.stroke(&empty_path, empty_stroke); + if normal.value() != 0.0 { + let filled_stroke = Stroke { + width: style.width, + color: style.left_filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; - let knob_width = style.knob_width as f32; - let knob_height = style.knob_height as f32; + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle, + end_angle: fill_angle_span, + }; - let knob = { - if let Some(pad) = style.texture_padding { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: bounds_x - pad.left as f32, - y: bounds_y - pad.top as f32, - width: knob_width + - (pad.left + pad.right) as f32, - height: knob_height + - (pad.top + pad.bottom) as f32, - } - } - } else { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: knob_width, - height: knob_height, - }, - } - } - }; + let filled_path = Path::new(|path| path.arc(filled_arc)); - // not implemented yet + frame.stroke(&filled_path, filled_stroke); + } + } + frame.into_primitive() +} + +fn draw_mod_range_ring( + start_angle: f32, + angle_span: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + style: &ModRangeRingStyle, + mod_range: &ModulationRange, +) -> Primitive { + let half_width = style.width / 2.0; + + let center_point = Point::new(radius, radius); + let arc_radius = radius + style.offset + half_width; + + let frame_size = bounds_size + style.offset + half_width; + + let mut frame = Frame::new(frame_size, frame_size); + frame.translate(Vector::new(bounds_x, bounds_y)); + + if let Some(empty_color) = style.empty_color { + let empty_stroke = Stroke { + width: style.width, + color: empty_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let empty_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle, + end_angle: angle_span, + }; + + let empty_path = Path::new(|path| path.arc(empty_arc)); + + frame.stroke(&empty_path, empty_stroke); + } + + if mod_range.filled_visible + && (mod_range.start.value() != mod_range.end.value()) + { + let (start, end, color) = + if mod_range.start.value() < mod_range.end.value() { ( - knob, - MouseCursor::default(), + mod_range.start.value(), + mod_range.end.value(), + style.filled_color, ) - }, - */ - Style::VectorCircle(style) => { - let knob_back = Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: bounds_size, - height: bounds_size, - }, - background: Background::Color(style.knob_color), - border_radius: radius as u16, - border_width: style.knob_border_width, - border_color: style.knob_border_color, - }; - - let angle = ((angle_range.max() - angle_range.min()) - * normal.value()) - + angle_range.min() - + std::f32::consts::PI; - - let (dx, dy) = { - if angle < -0.001 || angle > 0.001 { - angle.sin_cos() - } else { - (0.0, -1.0) - } - }; - - let notch_radius = radius * style.notch_scale.value(); - - let offset_radius = (radius - (notch_radius * 2.0)) - * (1.0 - style.notch_offset.value()) - + notch_radius; - - let notch = Primitive::Quad { - bounds: Rectangle { - x: bounds_x + radius + (dx * offset_radius) - - notch_radius, - y: bounds_y + radius - - (dy * offset_radius) - - notch_radius, - width: notch_radius * 2.0, - height: notch_radius * 2.0, - }, - background: Background::Color(style.notch_color), - border_radius: notch_radius as u16, - border_width: style.notch_border_width, - border_color: style.notch_border_color, - }; - + } else { ( - Primitive::Group { - primitives: vec![ - tick_marks, - value_ring, - mod_range_ring, - knob_back, - notch, - ], - }, - MouseCursor::default(), + mod_range.end.value(), + mod_range.start.value(), + style.filled_inverse_color, ) - } + }; - Style::VectorLine(style) => { - let radius = bounds_size / 2.0; - - let knob_back = Primitive::Quad { - bounds: Rectangle { - x: bounds_x, - y: bounds_y, - width: bounds_size, - height: bounds_size, - }, - background: Background::Color(style.knob_color), - border_radius: radius as u16, - border_width: style.knob_border_width, - border_color: style.knob_border_color, - }; - - let angle = ((angle_range.max() - angle_range.min()) - * normal.value()) - + angle_range.min() - + std::f32::consts::PI; - - let notch: Primitive = { - let stroke = Stroke { - width: style.notch_width as f32, - color: style.notch_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let stroke_begin_y = - -(radius - (style.notch_offset.value() * radius)); - let notch_height = style.notch_scale.value() * radius; - - let path = Path::line( - Point::new(0.0, stroke_begin_y), - Point::new(0.0, stroke_begin_y + notch_height), - ); - - let mut frame = Frame::new(bounds_size, bounds_size); - frame.translate(Vector::new( - bounds_x + radius, - bounds_y + radius, - )); - - if angle < -0.001 || angle > 0.001 { - frame.rotate(angle); - } + let start_span = angle_span * start; + let span = (angle_span * end) - start_span; - frame.stroke(&path, stroke); + let filled_stroke = Stroke { + width: style.width, + color: color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; - frame.into_primitive() - }; + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: start_angle + start_span, + end_angle: span, + }; - ( - Primitive::Group { - primitives: vec![ - tick_marks, - value_ring, - mod_range_ring, - knob_back, - notch, - ], - }, - MouseCursor::default(), - ) - } + let filled_path = Path::new(|path| path.arc(filled_arc)); - Style::Arc(style) => { - let radius = bounds_size / 2.0; + frame.stroke(&filled_path, filled_stroke); + } - let mut start_angle = - angle_range.min() + std::f32::consts::FRAC_PI_2; - if start_angle >= crate::TAU { - start_angle -= crate::TAU - } + frame.into_primitive() +} - let angle_span = angle_range.max() - angle_range.min(); - - let fill_angle_span = angle_span * normal.value(); - - let arc: Primitive = { - let center_point = Point::new(radius, radius); - let arc_radius = radius - (style.arc_width * 0.5); - - let filled_stroke = Stroke { - width: style.arc_width, - color: style.arc_filled_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle, - end_angle: fill_angle_span, - }; - - let filled_path = Path::new(|path| path.arc(filled_arc)); - - let empty_stroke = Stroke { - width: style.arc_width, - color: style.arc_empty_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let empty_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle, - end_angle: angle_span, - }; - - let empty_path = Path::new(|path| path.arc(empty_arc)); - - let mut frame = Frame::new(bounds_size, bounds_size); - frame.translate(Vector::new(bounds_x, bounds_y)); - - frame.stroke(&empty_path, empty_stroke); - frame.stroke(&filled_path, filled_stroke); - - if let Some(notch) = style.notch { - let angle = start_angle - + fill_angle_span - + std::f32::consts::FRAC_PI_2; - - let stroke = Stroke { - width: notch.width, - color: notch.color, - line_cap: LineCap::Square, - ..Stroke::default() - }; - - let stroke_begin_y = -arc_radius; - let notch_height = - notch.length_scale.value() * arc_radius; - - let path = Path::line( - Point::new(0.0, stroke_begin_y), - Point::new(0.0, stroke_begin_y + notch_height), - ); - - frame.translate(Vector::new(radius, radius)); - - if angle < -0.001 || angle > 0.001 { - frame.rotate(angle); - } +fn draw_classic_circle_style( + angle_start: f32, + angle_span: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + normal: Normal, + style: &ClassicCircleStyle, + value_ring: Primitive, + mod_range_ring: Primitive, + tick_marks: Primitive, +) -> Primitive { + let angle_start = angle_start + std::f32::consts::FRAC_PI_2; + + let knob_back = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_size, + height: bounds_size, + }, + background: Background::Color(style.color), + border_radius: radius as u16, + border_width: style.border_width, + border_color: style.border_color, + }; + + let angle = (angle_span * normal.value()) + angle_start; + + let (dx, dy) = { + if angle < -0.001 || angle > 0.001 { + angle.sin_cos() + } else { + (0.0, -1.0) + } + }; + + let notch_radius = radius * style.notch_scale.value(); + + let offset_radius = (radius - (notch_radius * 2.0)) + * (1.0 - style.notch_offset.value()) + + notch_radius; + + let notch_diameter = notch_radius * 2.0; + + let radius_offset = radius - notch_radius; + + let notch = Primitive::Quad { + bounds: Rectangle { + x: bounds_x + radius_offset + (dx * offset_radius), + y: bounds_y + radius_offset - (dy * offset_radius), + width: notch_diameter, + height: notch_diameter, + }, + background: Background::Color(style.notch_color), + border_radius: notch_radius as u16, + border_width: style.notch_border_width, + border_color: style.notch_border_color, + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + value_ring, + mod_range_ring, + knob_back, + notch, + ], + } +} - frame.stroke(&path, stroke); - } +fn draw_classic_line_style( + angle_start: f32, + angle_span: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + normal: Normal, + style: &ClassicLineStyle, + value_ring: Primitive, + mod_range_ring: Primitive, + tick_marks: Primitive, +) -> Primitive { + let angle_start = angle_start + std::f32::consts::FRAC_PI_2; + + let knob_back = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_size, + height: bounds_size, + }, + background: Background::Color(style.color), + border_radius: radius as u16, + border_width: style.border_width, + border_color: style.border_color, + }; + + let angle = (angle_span * normal.value()) + angle_start; + + let notch: Primitive = { + let stroke = Stroke { + width: style.notch_width as f32, + color: style.notch_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; - frame.into_primitive() - }; + let stroke_begin_y = -(radius - (style.notch_offset.value() * radius)); + let notch_height = style.notch_scale.value() * radius; - ( - Primitive::Group { - primitives: vec![ - tick_marks, - value_ring, - mod_range_ring, - arc, - ], - }, - MouseCursor::default(), - ) + let path = Path::line( + Point::new(0.0, stroke_begin_y), + Point::new(0.0, stroke_begin_y + notch_height), + ); + + let mut frame = Frame::new(bounds_size, bounds_size); + frame.translate(Vector::new(bounds_x + radius, bounds_y + radius)); + + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); + } + + frame.stroke(&path, stroke); + + frame.into_primitive() + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + value_ring, + mod_range_ring, + knob_back, + notch, + ], + } +} + +fn draw_arc_style( + angle_start: f32, + angle_span: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + normal: Normal, + style: &ArcStyle, + value_ring: Primitive, + mod_range_ring: Primitive, + tick_marks: Primitive, +) -> Primitive { + let fill_angle_span = angle_span * normal.value(); + + let arc: Primitive = { + let center_point = Point::new(radius, radius); + let arc_radius = radius - (style.width / 2.0); + + let filled_stroke = Stroke { + width: style.width, + color: style.filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: angle_start, + end_angle: fill_angle_span, + }; + + let filled_path = Path::new(|path| path.arc(filled_arc)); + + let empty_stroke = Stroke { + width: style.width, + color: style.empty_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let empty_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: angle_start, + end_angle: angle_span, + }; + + let empty_path = Path::new(|path| path.arc(empty_arc)); + + let mut frame = Frame::new(bounds_size, bounds_size); + frame.translate(Vector::new(bounds_x, bounds_y)); + + frame.stroke(&empty_path, empty_stroke); + frame.stroke(&filled_path, filled_stroke); + + if let Some(notch) = &style.notch { + let angle = + angle_start + fill_angle_span + std::f32::consts::FRAC_PI_2; + + let stroke = Stroke { + width: notch.width, + color: notch.color, + line_cap: LineCap::Square, + ..Stroke::default() + }; + + let stroke_begin_y = -arc_radius; + let notch_height = notch.length_scale.value() * arc_radius; + + let path = Path::line( + Point::new(0.0, stroke_begin_y), + Point::new(0.0, stroke_begin_y + notch_height), + ); + + frame.translate(Vector::new(radius, radius)); + + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); } - Style::ArcBipolar(style) => { - let radius = bounds_size / 2.0; + frame.stroke(&path, stroke); + } - let mut start_angle = - angle_range.min() + std::f32::consts::FRAC_PI_2; - if start_angle >= crate::TAU { - start_angle -= crate::TAU - } + frame.into_primitive() + }; + + Primitive::Group { + primitives: vec![tick_marks, value_ring, mod_range_ring, arc], + } +} - let angle_span = angle_range.max() - angle_range.min(); +fn draw_arc_bipolar_style( + angle_start: f32, + angle_span: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + radius: f32, + normal: Normal, + style: &ArcBipolarStyle, + value_ring: Primitive, + mod_range_ring: Primitive, + tick_marks: Primitive, +) -> Primitive { + let fill_angle_span = angle_span * normal.value(); + let half_angle_span = angle_span / 2.0; + + let arc: Primitive = { + let mut frame = Frame::new(bounds_size, bounds_size); + frame.translate(Vector::new(bounds_x, bounds_y)); + + let center_point = Point::new(radius, radius); + let arc_radius = radius - (style.width / 2.0); + + let empty_stroke = Stroke { + width: style.width, + color: style.empty_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; - let fill_angle_span = angle_span * normal.value(); + let empty_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: angle_start, + end_angle: angle_span, + }; - let arc: Primitive = { - let mut frame = Frame::new(bounds_size, bounds_size); - frame.translate(Vector::new(bounds_x, bounds_y)); + let empty_path = Path::new(|path| path.arc(empty_arc)); - let center_point = Point::new(radius, radius); - let arc_radius = radius - (style.arc_width * 0.5); + frame.stroke(&empty_path, empty_stroke); - let empty_stroke = Stroke { - width: style.arc_width, - color: style.arc_empty_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; + if normal.value() < 0.5 { + let filled_stroke = Stroke { + width: style.width, + color: style.left_filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; - let empty_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle, - end_angle: angle_span, - }; + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: angle_start + fill_angle_span, + end_angle: half_angle_span - fill_angle_span, + }; - let empty_path = Path::new(|path| path.arc(empty_arc)); + let filled_path = Path::new(|path| path.arc(filled_arc)); - frame.stroke(&empty_path, empty_stroke); + frame.stroke(&filled_path, filled_stroke); + } else { + let filled_stroke = Stroke { + width: style.width, + color: style.right_filled_color, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let filled_arc = Arc { + center: center_point, + radius: arc_radius, + start_angle: angle_start + half_angle_span, + end_angle: fill_angle_span - half_angle_span, + }; + + let filled_path = Path::new(|path| path.arc(filled_arc)); + + frame.stroke(&filled_path, filled_stroke); + } - if normal.value() < 0.5 { - let filled_stroke = Stroke { - width: style.arc_width, - color: style.arc_left_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; + if let Some(notch) = &style.notch { + let notch_color = { + if normal.value() < 0.499 { + notch.left_color + } else if normal.value() > 0.501 { + notch.right_color + } else { + notch.center_color + } + }; - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + fill_angle_span, - end_angle: (angle_span * 0.5) - fill_angle_span, - }; + let angle = + angle_start + fill_angle_span + std::f32::consts::FRAC_PI_2; - let filled_path = - Path::new(|path| path.arc(filled_arc)); + let stroke = Stroke { + width: notch.width, + color: notch_color, + line_cap: LineCap::Square, + ..Stroke::default() + }; - frame.stroke(&filled_path, filled_stroke); - } else { - let filled_stroke = Stroke { - width: style.arc_width, - color: style.arc_right_color, - line_cap: LineCap::Butt, - ..Stroke::default() - }; - - let filled_arc = Arc { - center: center_point, - radius: arc_radius, - start_angle: start_angle + (angle_span * 0.5), - end_angle: fill_angle_span - (angle_span * 0.5), - }; - - let filled_path = - Path::new(|path| path.arc(filled_arc)); - - frame.stroke(&filled_path, filled_stroke); - } + let stroke_begin_y = -arc_radius; + let notch_height = notch.length_scale.value() * arc_radius; - if let Some(notch) = style.notch { - let notch_color = { - if normal.value() < 0.499 { - notch.color_left - } else if normal.value() > 0.501 { - notch.color_right - } else { - notch.color_center - } - }; - - let angle = start_angle - + fill_angle_span - + std::f32::consts::FRAC_PI_2; - - let stroke = Stroke { - width: notch.width, - color: notch_color, - line_cap: LineCap::Square, - ..Stroke::default() - }; - - let stroke_begin_y = -arc_radius; - let notch_height = - notch.length_scale.value() * arc_radius; - - let path = Path::line( - Point::new(0.0, stroke_begin_y), - Point::new(0.0, stroke_begin_y + notch_height), - ); - - frame.translate(Vector::new(radius, radius)); - - if angle < -0.001 || angle > 0.001 { - frame.rotate(angle); - } + let path = Path::line( + Point::new(0.0, stroke_begin_y), + Point::new(0.0, stroke_begin_y + notch_height), + ); - frame.stroke(&path, stroke); - } + frame.translate(Vector::new(radius, radius)); + + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); + } - frame.into_primitive() - }; + frame.stroke(&path, stroke); + } - ( - Primitive::Group { - primitives: vec![ - tick_marks, - value_ring, - mod_range_ring, - arc, - ], - }, - MouseCursor::default(), - ) + frame.into_primitive() + }; + + Primitive::Group { + primitives: vec![tick_marks, value_ring, mod_range_ring, arc], + } +} + +fn draw_circle_tick_mark_tier( + primitives: &mut Vec, + tick_mark_positions: &Vec, + diameter: f32, + color: &Color, + angle_start: f32, + angle_span: f32, + center_x: f32, + center_y: f32, + tick_mark_radius: f32, +) { + let tier_radius = diameter / 2.0; + let tier_radius_u16 = tier_radius as u16; + let color = Background::Color(*color); + + for tick_mark_position in tick_mark_positions.iter() { + let angle = (angle_span * tick_mark_position.value()) + angle_start; + + let (dx, dy) = { + if angle < -0.001 || angle > 0.001 { + angle.sin_cos() + } else { + (0.0, -1.0) } + }; + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: (center_x + (dx * tick_mark_radius) - tier_radius).round(), + y: (center_y - (dy * tick_mark_radius) - tier_radius).round(), + width: diameter, + height: diameter, + }, + background: color, + border_radius: tier_radius_u16, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } +} + +fn draw_circle_tick_marks( + angle_start: f32, + angle_span: f32, + radius: f32, + bounds_x: f32, + bounds_y: f32, + tick_marks: &TickMarkGroup, + style: &CircleTickMarkStyle, +) -> Primitive { + let angle_start = angle_start + std::f32::consts::FRAC_PI_2; + + let mut primitives: Vec = Vec::new(); + primitives.reserve_exact(tick_marks.len()); + + let tick_mark_radius = radius + style.offset; + + let center_x = bounds_x + radius; + let center_y = bounds_y + radius; + + if tick_marks.has_tier_1() { + draw_circle_tick_mark_tier( + &mut primitives, + &tick_marks.tier_1_positions(), + style.diameter_tier_1 as f32, + &style.color_tier_1, + angle_start, + angle_span, + center_x, + center_y, + tick_mark_radius, + ); + } + if tick_marks.has_tier_2() { + draw_circle_tick_mark_tier( + &mut primitives, + &tick_marks.tier_2_positions(), + style.diameter_tier_2 as f32, + &style.color_tier_2, + angle_start, + angle_span, + center_x, + center_y, + tick_mark_radius, + ); + } + if tick_marks.has_tier_3() { + draw_circle_tick_mark_tier( + &mut primitives, + &tick_marks.tier_3_positions(), + style.diameter_tier_3 as f32, + &style.color_tier_3, + angle_start, + angle_span, + center_x, + center_y, + tick_mark_radius, + ); + } + + Primitive::Group { primitives } +} + +fn draw_line_tick_marks( + angle_start: f32, + angle_span: f32, + radius: f32, + bounds_x: f32, + bounds_y: f32, + bounds_size: f32, + tick_marks: &TickMarkGroup, + style: &LineTickMarkStyle, +) -> Primitive { + let angle_start = angle_start - std::f32::consts::FRAC_PI_2; + + let tick_mark_offset = radius + style.offset; + + let mut frame = Frame::new(bounds_size, bounds_size); + + frame.translate(Vector::new(bounds_x + radius, bounds_y + radius)); + + if tick_marks.has_tier_1() { + for tick_mark_position in tick_marks.tier_1_positions().iter() { + let angle = (angle_span * tick_mark_position.value()) + angle_start; + + let stroke = Stroke { + width: style.width_tier_1, + color: style.color_tier_1, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let path = Path::line( + Point::new(0.0, tick_mark_offset), + Point::new(0.0, tick_mark_offset + style.length_tier_1), + ); + + frame.with_save(|frame| { + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); + } + + frame.stroke(&path, stroke); + }); + } + } + if tick_marks.has_tier_2() { + for tick_mark_position in tick_marks.tier_2_positions().iter() { + let angle = (angle_span * tick_mark_position.value()) + angle_start; + + let stroke = Stroke { + width: style.width_tier_2, + color: style.color_tier_2, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let path = Path::line( + Point::new(0.0, tick_mark_offset), + Point::new(0.0, tick_mark_offset + style.length_tier_2), + ); + + frame.with_save(|frame| { + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); + } + + frame.stroke(&path, stroke); + }); } } + if tick_marks.has_tier_3() { + for tick_mark_position in tick_marks.tier_3_positions().iter() { + let angle = (angle_span * tick_mark_position.value()) + angle_start; + + let stroke = Stroke { + width: style.width_tier_3, + color: style.color_tier_3, + line_cap: LineCap::Butt, + ..Stroke::default() + }; + + let path = Path::line( + Point::new(0.0, tick_mark_offset), + Point::new(0.0, tick_mark_offset + style.length_tier_3), + ); + + frame.with_save(|frame| { + if angle < -0.001 || angle > 0.001 { + frame.rotate(angle); + } + + frame.stroke(&path, stroke); + }); + } + } + + frame.into_primitive() } diff --git a/src/wgpu/mod.rs b/src/wgpu/mod.rs index 99053a5..44d0464 100644 --- a/src/wgpu/mod.rs +++ b/src/wgpu/mod.rs @@ -1,5 +1,7 @@ //! A wgpu renderer for Iced Audio widgets +mod bar_tick_marks; + pub mod h_slider; pub mod knob; pub mod mod_range_input; diff --git a/src/wgpu/phase_meter.rs b/src/wgpu/phase_meter.rs index c8f914b..dc89edd 100644 --- a/src/wgpu/phase_meter.rs +++ b/src/wgpu/phase_meter.rs @@ -2,8 +2,9 @@ //! //! [`PhaseMeter`]: ../native/phase_meter/struct.PhaseMeter.html -use crate::core::Normal; +use crate::core::{Normal, TickMarkGroup}; use crate::native::phase_meter; +use crate::wgpu::bar_tick_marks; use iced_native::{Background, Color, MouseCursor, Rectangle}; use iced_wgpu::{Primitive, Renderer}; @@ -50,6 +51,7 @@ impl phase_meter::Renderer for Renderer { normal: Normal, tier_positions: TierPositions, orientation: &Orientation, + tick_marks: Option<&TickMarkGroup>, style_sheet: &Self::Style, ) -> Self::Output { let bounds_x = bounds.x.floor(); @@ -79,15 +81,35 @@ impl phase_meter::Renderer for Renderer { match orientation { Orientation::Horizontal => { - let h_center = (bounds_width / 2.0).round(); + let h_center = (bounds_width / 2.0).floor(); let bar_y = bounds_y + border_width; let bar_height = bounds_height - (border_width * 2.0); + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = style_sheet.tick_mark_style() { + bar_tick_marks::draw_horizontal_tick_marks( + bounds_x + border_width, + bounds_y, + bounds_width - (border_width * 2.0), + bounds_height, + tick_marks, + &style, + false, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + let center_line = Primitive::Quad { bounds: Rectangle { x: (bounds_x + h_center - (center_line_width / 2.0)) - .round(), + .floor(), y: bar_y, width: center_line_width, height: bar_height, @@ -101,21 +123,21 @@ impl phase_meter::Renderer for Renderer { if normal.value() < 0.499 || normal.value() > 0.501 { let meter_span = bounds_width - (border_width * 2.0); - let normal_offset = (normal.value() * meter_span).round(); - let poor_offset = (meter_span - * (tier_positions.poor.value() / 2.0)) - .round(); - let good_offset = (meter_span - * (0.5 + (tier_positions.good.value() / 2.0))) - .round(); + let normal_offset = + ((normal.value() * meter_span) + border_width).floor(); let normal_tier = tier(normal, tier_positions); match normal_tier { PhaseTier::Bad => { + let poor_offset = (meter_span + * (tier_positions.poor.value() / 2.0) + + border_width) + .floor(); + let bad_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + normal_offset + border_width, + x: bounds_x + normal_offset, y: bar_y, width: poor_offset - normal_offset, height: bar_height, @@ -127,7 +149,7 @@ impl phase_meter::Renderer for Renderer { }; let poor_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + poor_offset + border_width, + x: bounds_x + poor_offset, y: bar_y, width: h_center - poor_offset, height: bar_height, @@ -141,6 +163,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, bad_bar, poor_bar, @@ -153,7 +176,7 @@ impl phase_meter::Renderer for Renderer { PhaseTier::Poor => { let poor_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + normal_offset + border_width, + x: bounds_x + normal_offset, y: bar_y, width: h_center - normal_offset, height: bar_height, @@ -167,6 +190,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, poor_bar, center_line, @@ -178,7 +202,7 @@ impl phase_meter::Renderer for Renderer { PhaseTier::Okay => { let okay_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + h_center + border_width, + x: bounds_x + h_center, y: bar_y, width: normal_offset - h_center, height: bar_height, @@ -192,6 +216,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, okay_bar, center_line, @@ -201,9 +226,14 @@ impl phase_meter::Renderer for Renderer { ) } PhaseTier::Good => { + let good_offset = (meter_span + * (0.5 + (tier_positions.good.value() / 2.0)) + + border_width) + .floor(); + let okay_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + h_center + border_width, + x: bounds_x + h_center, y: bar_y, width: good_offset - h_center, height: bar_height, @@ -215,7 +245,7 @@ impl phase_meter::Renderer for Renderer { }; let good_bar = Primitive::Quad { bounds: Rectangle { - x: bounds_x + good_offset + border_width, + x: bounds_x + good_offset, y: bar_y, width: normal_offset - good_offset, height: bar_height, @@ -229,6 +259,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, okay_bar, good_bar, @@ -242,23 +273,43 @@ impl phase_meter::Renderer for Renderer { } else { ( Primitive::Group { - primitives: vec![back, center_line], + primitives: vec![tick_marks, back, center_line], }, MouseCursor::default(), ) } } Orientation::Vertical => { - let v_center = (bounds_height / 2.0).round(); + let v_center = (bounds_height / 2.0).floor(); let bar_x = bounds_x + border_width; let bar_width = bounds_width - (border_width * 2.0); + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = style_sheet.tick_mark_style() { + bar_tick_marks::draw_vertical_tick_marks( + bounds_x, + bounds_y + border_width, + bounds_width, + bounds_height - (border_width * 2.0), + tick_marks, + &style, + false, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + let center_line = Primitive::Quad { bounds: Rectangle { x: bar_x, y: (bounds_y + v_center - (center_line_width / 2.0)) - .round(), + .floor(), width: bar_width, height: center_line_width, }, @@ -271,26 +322,25 @@ impl phase_meter::Renderer for Renderer { if normal.value() < 0.499 || normal.value() > 0.501 { let meter_span = bounds_height - (border_width * 2.0); - let normal_offset = - ((1.0 - normal.value()) * meter_span).round(); - let poor_offset = (meter_span - * (1.0 - (tier_positions.poor.value() / 2.0))) - .round(); - let good_offset = (meter_span - * (1.0 - (0.5 + (tier_positions.good.value() / 2.0)))) - .round(); + let normal_offset = (((1.0 - normal.value()) * meter_span) + + border_width) + .floor(); let normal_tier = tier(normal, tier_positions); match normal_tier { PhaseTier::Bad => { + let poor_offset = (meter_span + * (1.0 - (tier_positions.poor.value() / 2.0)) + + border_width) + .floor(); + let poor_bar = Primitive::Quad { bounds: Rectangle { x: bar_x, y: bounds_y + v_center, width: bar_width, - height: poor_offset - v_center - + border_width, + height: poor_offset - v_center, }, background: Background::Color(style.poor_color), border_radius: 0, @@ -302,8 +352,7 @@ impl phase_meter::Renderer for Renderer { x: bar_x, y: bounds_y + poor_offset, width: bar_width, - height: normal_offset - poor_offset - + border_width, + height: normal_offset - poor_offset, }, background: Background::Color(style.bad_color), border_radius: 0, @@ -314,6 +363,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, poor_bar, bad_bar, @@ -329,8 +379,7 @@ impl phase_meter::Renderer for Renderer { x: bar_x, y: bounds_y + v_center, width: bar_width, - height: normal_offset - v_center - + border_width, + height: normal_offset - v_center, }, background: Background::Color(style.poor_color), border_radius: 0, @@ -341,6 +390,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, poor_bar, center_line, @@ -353,7 +403,7 @@ impl phase_meter::Renderer for Renderer { let okay_bar = Primitive::Quad { bounds: Rectangle { x: bar_x, - y: bounds_y + normal_offset + border_width, + y: bounds_y + normal_offset, width: bar_width, height: v_center - normal_offset, }, @@ -366,6 +416,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, okay_bar, center_line, @@ -375,10 +426,18 @@ impl phase_meter::Renderer for Renderer { ) } PhaseTier::Good => { + let good_offset = (meter_span + * (1.0 + - (0.5 + + (tier_positions.good.value() + / 2.0))) + + border_width) + .floor(); + let good_bar = Primitive::Quad { bounds: Rectangle { x: bar_x, - y: bounds_y + normal_offset + border_width, + y: bounds_y + normal_offset, width: bar_width, height: good_offset - normal_offset, }, @@ -390,7 +449,7 @@ impl phase_meter::Renderer for Renderer { let okay_bar = Primitive::Quad { bounds: Rectangle { x: bar_x, - y: bounds_y + good_offset + border_width, + y: bounds_y + good_offset, width: bar_width, height: v_center - good_offset, }, @@ -403,6 +462,7 @@ impl phase_meter::Renderer for Renderer { ( Primitive::Group { primitives: vec![ + tick_marks, back, okay_bar, good_bar, @@ -416,7 +476,7 @@ impl phase_meter::Renderer for Renderer { } else { ( Primitive::Group { - primitives: vec![back, center_line], + primitives: vec![tick_marks, back, center_line], }, MouseCursor::default(), ) diff --git a/src/wgpu/ramp.rs b/src/wgpu/ramp.rs index 16051e9..86ea9c1 100644 --- a/src/wgpu/ramp.rs +++ b/src/wgpu/ramp.rs @@ -52,16 +52,17 @@ impl ramp::Renderer for Renderer { width: bounds_width, height: bounds_height, }, - background: Background::Color(style.background_color), + background: Background::Color(style.back_color), border_radius: 0, - border_width: style.border_width, - border_color: style.border_color, + border_width: style.back_border_width, + border_color: style.back_border_color, }; - let border_width = style.border_width as f32; + let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; - let range_width = bounds_width - (border_width * 2.0); - let range_height = bounds_height - (border_width * 2.0); + let range_width = bounds_width - twice_border_width; + let range_height = bounds_height - twice_border_width; let line: Primitive = match direction { RampDirection::Up => { diff --git a/src/wgpu/reduction_meter.rs b/src/wgpu/reduction_meter.rs index 0d5da16..8a67de1 100644 --- a/src/wgpu/reduction_meter.rs +++ b/src/wgpu/reduction_meter.rs @@ -2,15 +2,14 @@ //! //! [`ReductionMeter`]: ../native/reduction_meter/struct.ReductionMeter.html -use crate::core::{Normal, TickMarkGroup, TickMarkTier}; +use crate::core::{Normal, TickMarkGroup}; use crate::native::reduction_meter; +use crate::wgpu::bar_tick_marks; use iced_native::{Background, Color, MouseCursor, Rectangle}; use iced_wgpu::{Primitive, Renderer}; pub use crate::native::reduction_meter::{Orientation, State}; -pub use crate::style::reduction_meter::{ - Style, StyleSheet, TickMarkPlacement, TickMarkStyle, -}; +pub use crate::style::reduction_meter::{Style, StyleSheet}; /// This is an alias of a `crate::native` [`ReductionMeter`] with an /// `iced_wgpu::Renderer`. @@ -58,114 +57,15 @@ impl reduction_meter::Renderer for Renderer { let tick_marks: Primitive = { if let Some(tick_marks) = tick_marks { if let Some(style) = style_sheet.tick_mark_style() { - let notch_span = - bounds_height - (border_width * 2.0); - let start_y = - bounds_y + bounds_height - border_width; - - let mut primitives: Vec = Vec::new(); - - if style.placement != TickMarkPlacement::Right { - let notch_x = bounds_x - style.offset as f32; - - for left_tick_mark in tick_marks.group.iter() { - let y_offset = notch_span - * left_tick_mark.position.value(); - - let (length, height, color) = - match left_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_height = height as f32 / 2.0; - - let x = notch_x - length as f32; - - let mark = Primitive::Quad { - bounds: Rectangle { - x, - y: (start_y - - y_offset - - half_height) - .floor(), - width: length as f32, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - if style.placement != TickMarkPlacement::Left { - let notch_x = bounds_x - + bounds_width - + style.offset as f32; - - for right_tick_mark in tick_marks.group.iter() { - let y_offset = notch_span - * right_tick_mark.position.value(); - - let (length, height, color) = - match right_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_height = height as f32 / 2.0; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: notch_x, - y: (start_y - - y_offset - - half_height) - .floor(), - width: length as f32, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - Primitive::Group { primitives } + bar_tick_marks::draw_vertical_tick_marks( + bounds_x, + bounds_y + border_width, + bounds_width, + bounds_height - (border_width * 2.0), + tick_marks, + &style, + false, + ) } else { Primitive::None } @@ -237,116 +137,15 @@ impl reduction_meter::Renderer for Renderer { let tick_marks: Primitive = { if let Some(tick_marks) = tick_marks { if let Some(style) = style_sheet.tick_mark_style() { - let notch_span = - bounds_width - (border_width * 2.0); - let start_x = - bounds_x + bounds_width - border_width; - - let mut primitives: Vec = Vec::new(); - - if style.placement != TickMarkPlacement::Right { - let notch_y = bounds_y - style.offset as f32; - - for left_tick_mark in tick_marks.group.iter() { - let x_offset = notch_span - * (1.0 - - left_tick_mark.position.value()); - - let (length, width, color) = - match left_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_width = width as f32 / 2.0; - - let y = notch_y - length as f32; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: (start_x - - x_offset - - half_width) - .floor(), - y, - width: width as f32, - height: length as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - if style.placement != TickMarkPlacement::Left { - let notch_y = bounds_y - + bounds_height - + style.offset as f32; - - for right_tick_mark in tick_marks.group.iter() { - let x_offset = notch_span - * (1.0 - - right_tick_mark.position.value()); - - let (length, width, color) = - match right_tick_mark.tier { - TickMarkTier::One => ( - style.length_tier_1, - style.width_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.length_tier_2, - style.width_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.length_tier_3, - style.width_tier_3, - style.color_tier_3, - ), - }; - - let half_width = width as f32 / 2.0; - - let mark = Primitive::Quad { - bounds: Rectangle { - x: (start_x - - x_offset - - half_width) - .floor(), - y: notch_y, - width: width as f32, - height: length as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } - } - - Primitive::Group { primitives } + bar_tick_marks::draw_horizontal_tick_marks( + bounds_x + border_width, + bounds_y, + bounds_width - (border_width * 2.0), + bounds_height, + tick_marks, + &style, + false, + ) } else { Primitive::None } diff --git a/src/wgpu/v_slider.rs b/src/wgpu/v_slider.rs index 0887be7..aa3cf7b 100644 --- a/src/wgpu/v_slider.rs +++ b/src/wgpu/v_slider.rs @@ -2,7 +2,7 @@ //! //! [`VSlider`]: ../native/v_slider/struct.VSlider.html -use crate::core::{ModulationRange, Normal, TickMarkGroup, TickMarkTier}; +use crate::core::{ModulationRange, Normal, TickMarkGroup}; use crate::native::v_slider; use iced_native::{Background, Color, MouseCursor, Point, Rectangle}; use iced_wgpu::{Primitive, Renderer}; @@ -44,102 +44,28 @@ impl v_slider::Renderer for Renderer { style_sheet.active() }; + let tick_mark_style = style_sheet.tick_mark_style(); + let bounds_x = bounds.x.floor(); let bounds_y = bounds.y.floor(); let bounds_width = bounds.width.floor(); let bounds_height = bounds.height.floor(); - let rail_x = (bounds_x + (bounds_width / 2.0)).round(); + let rail_x = (bounds_x + (bounds_width / 2.0)).floor(); - let mod_range_line: Primitive = { + let mod_range_line = { if let Some(mod_range) = mod_range { if mod_range.visible { if let Some(style) = style_sheet.mod_range_style() { - let offset = style.offset as f32; - - let (x, width) = match style.placement { - ModRangePlacement::Center => ( - bounds_x + offset, - bounds_width - (offset * 2.0), - ), - ModRangePlacement::Left => ( - bounds_x - offset - style.width as f32, - style.width as f32, - ), - ModRangePlacement::Right => ( - bounds_x + bounds_width + offset, - style.width as f32, - ), - }; - - let back: Primitive = { - if let Some(color_empty) = style.color_empty { - Primitive::Quad { - bounds: Rectangle { - x, - y: bounds_y, - width, - height: bounds_height, - }, - background: Background::Color(color_empty), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - let filled: Primitive = { - if mod_range.filled_visible - && (mod_range.start.value() - != mod_range.end.value()) - { - let (start, end, color) = - if mod_range.start.value() - < mod_range.end.value() - { - ( - mod_range.start.value(), - mod_range.end.value(), - style.color, - ) - } else { - ( - mod_range.end.value(), - mod_range.start.value(), - style.color_inverse, - ) - }; - - let start_offset = bounds_height * start; - let filled_height = - (bounds_height * end) - start_offset; - - Primitive::Quad { - bounds: Rectangle { - x, - y: bounds_y + bounds_height - - start_offset - - filled_height, - width, - height: filled_height, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - Primitive::Group { - primitives: vec![back, filled], - } + draw_mod_range( + bounds_x, + bounds_y, + bounds_width, + bounds_height, + mod_range, + &style, + ) } else { Primitive::None } @@ -151,514 +77,799 @@ impl v_slider::Renderer for Renderer { } }; - let tick_marks: Primitive = { - if let Some(tick_marks) = tick_marks { - if let Some(style) = style_sheet.tick_mark_style() { - let center_offset = style.center_offset as f32; - let handle_offset = style.handle_offset as f32; - let notch_span = bounds_height - (handle_offset * 2.0); - - let mut primitives: Vec = Vec::new(); - for tick_mark in tick_marks.group.iter() { - let y_offset = ((notch_span - * tick_mark.position.value()) - + handle_offset) - .floor(); - - let (scale, height, color) = match tick_mark.tier { - TickMarkTier::One => ( - style.scale_tier_1, - style.height_tier_1, - style.color_tier_1, - ), - TickMarkTier::Two => ( - style.scale_tier_2, - style.height_tier_2, - style.color_tier_2, - ), - TickMarkTier::Three => ( - style.scale_tier_3, - style.height_tier_3, - style.color_tier_3, - ), - }; - - let notch_width = (scale * bounds_width).round(); - let half_notch_width = (notch_width / 2.0).round(); - let half_height = (height as f32 / 2.0).round(); - - if style.center_offset == 0 { - let mark = Primitive::Quad { - bounds: Rectangle { - x: rail_x - half_notch_width, - y: bounds_y + bounds_height - - y_offset - - half_height, - width: notch_width, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(mark); - } else { - let top = Primitive::Quad { - bounds: Rectangle { - x: rail_x - - half_notch_width - - center_offset, - y: bounds_y + bounds_height - - y_offset - - half_height, - width: half_notch_width, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - let bottom = Primitive::Quad { - bounds: Rectangle { - x: rail_x + center_offset, - y: bounds_y + bounds_height - - y_offset - - half_height, - width: half_notch_width, - height: height as f32, - }, - background: Background::Color(color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; - - primitives.push(top); - primitives.push(bottom); - } - } + let primitives = match style { + Style::Texture(style) => draw_texture_style( + normal, + rail_x, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + style, + mod_range_line, + ), + Style::Classic(style) => draw_classic_style( + normal, + rail_x, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + Style::Rect(style) => draw_rect_style( + normal, + rail_x, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + Style::RectBipolar(style) => draw_rect_bipolar_style( + normal, + rail_x, + bounds_x, + bounds_y, + bounds_width, + bounds_height, + tick_marks, + &tick_mark_style, + &style, + mod_range_line, + ), + }; - Primitive::Group { primitives } + (primitives, MouseCursor::default()) + } +} + +fn draw_mod_range( + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + mod_range: ModulationRange, + style: &ModRangeStyle, +) -> Primitive { + let offset = style.offset as f32; + + let (x, width) = match style.placement { + ModRangePlacement::Center => { + (bounds_x + offset, bounds_width - (offset * 2.0)) + } + ModRangePlacement::Left => { + (bounds_x - offset - style.width as f32, style.width as f32) + } + ModRangePlacement::Right => { + (bounds_x + bounds_width + offset, style.width as f32) + } + }; + + let back: Primitive = { + if let Some(empty_color) = style.empty_color { + Primitive::Quad { + bounds: Rectangle { + x, + y: bounds_y, + width, + height: bounds_height, + }, + background: Background::Color(empty_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + } + } else { + Primitive::None + } + }; + + let filled: Primitive = { + if mod_range.filled_visible + && (mod_range.start.value() != mod_range.end.value()) + { + let (start, end, color) = + if mod_range.start.value() < mod_range.end.value() { + ( + mod_range.start.value(), + mod_range.end.value(), + style.filled_color, + ) } else { - Primitive::None - } - } else { - Primitive::None + ( + mod_range.end.value(), + mod_range.start.value(), + style.filled_inverse_color, + ) + }; + + let start_offset = bounds_height * start; + let filled_height = (bounds_height * end) - start_offset; + + Primitive::Quad { + bounds: Rectangle { + x, + y: bounds_y + bounds_height - start_offset - filled_height, + width, + height: filled_height, + }, + background: Background::Color(color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, } - }; + } else { + Primitive::None + } + }; - match style { - Style::Texture(style) => { - let (left_rail_width, right_rail_width) = style.rail_widths; - let left_rail_width = left_rail_width as f32; - let right_rail_width = right_rail_width as f32; - let full_rail_width = left_rail_width + right_rail_width; - let half_full_rail_width = (full_rail_width / 2.0).floor(); - - let (rail_left, rail_right) = ( - Primitive::Quad { - bounds: Rectangle { - x: rail_x - half_full_rail_width, - y: bounds_y, - width: left_rail_width, - height: bounds_height, - }, - background: Background::Color(style.rail_colors.0), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - Primitive::Quad { - bounds: Rectangle { - x: rail_x - half_full_rail_width + left_rail_width, - y: bounds_y, - width: right_rail_width, - height: bounds_height, - }, - background: Background::Color(style.rail_colors.1), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - ); - - let handle_height = style.handle_height as f32; - - let handle_offset = ((bounds_height - handle_height) - * (1.0 - normal.value())) - .round(); - - let handle = { - if let Some(pad) = style.texture_padding { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: (rail_x - (bounds_width / 2.0)).round() - - pad.bottom as f32, - y: bounds.y + handle_offset - pad.top as f32, - width: bounds_width - + (pad.bottom + pad.top) as f32, - height: handle_height - + (pad.top + pad.bottom) as f32, - }, - } - } else { - Primitive::Image { - handle: style.texture, - bounds: Rectangle { - x: (rail_x - (bounds_width / 2.0) + 1.0) - .round(), - y: bounds.y + handle_offset, - width: bounds_width, - height: handle_height, - }, - } - } - }; + Primitive::Group { + primitives: vec![back, filled], + } +} - ( - Primitive::Group { - primitives: vec![ - tick_marks, - rail_left, - rail_right, - handle, - mod_range_line, - ], - }, - MouseCursor::default(), +fn draw_texture_style( + normal: Normal, + rail_x: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: TextureStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_height = style.handle_height as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_x, + (bounds_y + (handle_height / 2.0)).floor(), + bounds_width, + bounds_height - handle_height, + tick_marks, + &style, ) + } else { + Primitive::None } + } else { + Primitive::None + } + }; + + let (top_rail_width, bottom_rail_width) = style.rail_widths; + let (top_rail_color, bottom_rail_color) = style.rail_colors; + let (top_rail, bottom_rail) = draw_rails( + rail_x, + bounds_y, + bounds_height, + top_rail_width, + bottom_rail_width, + &top_rail_color, + &bottom_rail_color, + ); + + let handle_offset = normal.scale_inv(bounds_height - handle_height).floor(); + + let handle = { + if let Some(pad) = style.texture_padding { + Primitive::Image { + handle: style.texture, + bounds: Rectangle { + x: bounds_x - pad.left as f32, + y: bounds_y + handle_offset - pad.top as f32, + width: bounds_width + (pad.left + pad.right) as f32, + height: handle_height + (pad.top + pad.bottom) as f32, + }, + } + } else { + Primitive::Image { + handle: style.texture, + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset, + width: bounds_width, + height: handle_height, + }, + } + } + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + top_rail, + bottom_rail, + handle, + mod_range_line, + ], + } +} - Style::Classic(style) => { - let (left_rail_width, right_rail_width) = style.rail_widths; - let left_rail_width = left_rail_width as f32; - let right_rail_width = right_rail_width as f32; - let full_rail_width = left_rail_width + right_rail_width; - let half_full_rail_width = (full_rail_width / 2.0).floor(); - - let (rail_left, rail_right) = ( - Primitive::Quad { - bounds: Rectangle { - x: rail_x - half_full_rail_width, - y: bounds_y, - width: left_rail_width, - height: bounds_height, - }, - background: Background::Color(style.rail_colors.0), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - Primitive::Quad { - bounds: Rectangle { - x: rail_x - half_full_rail_width + left_rail_width, - y: bounds_y, - width: right_rail_width, - height: bounds_height, - }, - background: Background::Color(style.rail_colors.1), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }, - ); - - let (handle_height, handle_border_radius) = ( - f32::from(style.handle.height), - style.handle.border_radius, - ); - - let handle_offset = ((bounds_height - handle_height) - * (1.0 - normal.value())) - .round(); - - let notch_height = style.handle.notch_height as f32; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: (rail_x - (bounds_width / 2.0)).round(), - y: bounds_y + handle_offset, - width: bounds_width, - height: handle_height, - }, - background: Background::Color(style.handle.color), - border_radius: handle_border_radius, - border_width: style.handle.border_width, - border_color: style.handle.border_color, - }; - - let handle_notch = Primitive::Quad { - bounds: Rectangle { - x: (rail_x - (bounds_width / 2.0)).round(), - y: (bounds_y + handle_offset + (handle_height / 2.0) - - (notch_height / 2.0)) - .round(), - width: bounds_width, - height: notch_height, - }, - background: Background::Color(style.handle.notch_color), - border_radius: 0, - border_width: 0, - border_color: Color::TRANSPARENT, - }; +fn draw_classic_style( + normal: Normal, + rail_x: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &ClassicStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_height = style.handle.height as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_x, + (bounds_y + (handle_height / 2.0)).floor(), + bounds_width, + bounds_height - handle_height, + tick_marks, + &style, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + + let (top_rail_width, bottom_rail_width) = style.rail_widths; + let (top_rail_color, bottom_rail_color) = style.rail_colors; + let (top_rail, bottom_rail) = draw_rails( + rail_x, + bounds_y, + bounds_height, + top_rail_width, + bottom_rail_width, + &top_rail_color, + &bottom_rail_color, + ); + + let handle_border_radius = style.handle.border_radius; + + let handle_offset = normal.scale_inv(bounds_height - handle_height).floor(); + + let notch_width = style.handle.notch_width as f32; + + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset, + width: bounds_width, + height: handle_height, + }, + background: Background::Color(style.handle.color), + border_radius: handle_border_radius, + border_width: style.handle.border_width, + border_color: style.handle.border_color, + }; + + let handle_notch: Primitive = { + if style.handle.notch_width != 0 { + Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: (bounds_y + handle_offset + (handle_height / 2.0) + - (notch_width / 2.0)) + .floor(), + width: bounds_width, + height: notch_width, + }, + background: Background::Color(style.handle.notch_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + } + } else { + Primitive::None + } + }; + + Primitive::Group { + primitives: vec![ + tick_marks, + top_rail, + bottom_rail, + handle, + handle_notch, + mod_range_line, + ], + } +} - ( - Primitive::Group { - primitives: vec![ - tick_marks, - rail_left, - rail_right, - handle, - handle_notch, - mod_range_line, - ], - }, - MouseCursor::default(), +fn draw_rect_style( + normal: Normal, + rail_x: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &RectStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_height = style.handle_height as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_x, + (bounds_y + (handle_height / 2.0)).floor(), + bounds_width, + bounds_height - handle_height, + tick_marks, + &style, ) + } else { + Primitive::None } + } else { + Primitive::None + } + }; + + let empty_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_width, + height: bounds_height, + }, + background: Background::Color(style.back_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: style.back_border_color, + }; + + let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; + + let handle_offset = (normal + .scale_inv(bounds_height - twice_border_width - handle_height) + + border_width) + .floor(); + + let filled_rect_offset = handle_offset + handle_height - border_width + + style.handle_filled_gap as f32; + + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + filled_rect_offset, + width: bounds_width, + height: bounds_height - filled_rect_offset, + }, + background: Background::Color(style.filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; + + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset - border_width, + width: bounds_width, + height: handle_height + twice_border_width, + }, + background: Background::Color(style.handle_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; + + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } +} - Style::Rect(style) => { - let rect_x = rail_x - (bounds_width / 2.0).round(); - - let empty_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y, - width: bounds_width, - height: bounds_height, - }, - background: Background::Color(style.back_empty_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: style.border_color, - }; +fn draw_rect_bipolar_style( + normal: Normal, + rail_x: f32, + bounds_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: Option<&TickMarkGroup>, + tick_mark_style: &Option, + style: &RectBipolarStyle, + mod_range_line: Primitive, +) -> Primitive { + let handle_height = style.handle_height as f32; + + let tick_marks: Primitive = { + if let Some(tick_marks) = tick_marks { + if let Some(style) = tick_mark_style { + draw_tick_marks( + rail_x, + (bounds_y + (handle_height / 2.0)).floor(), + bounds_width, + bounds_height - handle_height, + tick_marks, + &style, + ) + } else { + Primitive::None + } + } else { + Primitive::None + } + }; + + let border_width = style.back_border_width as f32; + let twice_border_width = border_width * 2.0; + + let empty_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y, + width: bounds_width, + height: bounds_height, + }, + background: Background::Color(style.back_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: style.back_border_color, + }; + + let half_bounds_height = (bounds_height / 2.0).floor(); + + let handle_offset = normal + .scale_inv(bounds_height - twice_border_width - handle_height) + .floor(); + + if normal.value() > 0.499 && normal.value() < 0.501 { + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset, + width: bounds_width, + height: handle_height + twice_border_width, + }, + background: Background::Color(style.handle_center_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let handle_height = style.handle_height as f32; - let border_width = style.border_width as f32; - - let handle_offset = (((bounds_height - (border_width * 2.0)) - - handle_height) - * (1.0 - normal.value())) - .round(); - - let filled_rect_offset = handle_offset - + handle_height - + style.handle_filled_gap as f32; - - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + filled_rect_offset, - width: bounds_width, - height: bounds_height - filled_rect_offset - + border_width, - }, - background: Background::Color(style.back_filled_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + Primitive::Group { + primitives: vec![empty_rect, tick_marks, mod_range_line, handle], + } + } else if normal.value() < 0.5 { + let filled_rect_offset = + handle_offset + twice_border_width - style.handle_filled_gap as f32; + + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + half_bounds_height, + width: bounds_width, + height: filled_rect_offset - half_bounds_height, + }, + background: Background::Color(style.bottom_filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let handle = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + handle_offset, - width: bounds_width, - height: handle_height + (border_width * 2.0), - }, - background: Background::Color(style.handle_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset, + width: bounds_width, + height: handle_height + twice_border_width, + }, + background: Background::Color(style.handle_bottom_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - ( - Primitive::Group { - primitives: vec![ - empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } + } else { + let filled_rect_offset = + handle_offset + handle_height + style.handle_filled_gap as f32; + + let filled_rect = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + filled_rect_offset, + width: bounds_width, + height: half_bounds_height - filled_rect_offset, + }, + background: Background::Color(style.top_filled_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - Style::RectBipolar(style) => { - let rect_x = rail_x - (bounds_width / 2.0).round(); - - let handle_height = style.handle_height as f32; - let border_width = style.border_width as f32; - - let bottom_empty_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y, - width: bounds_width, - height: bounds_height, - }, - background: Background::Color( - style.back_bottom_empty_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: style.border_color, - }; + let handle = Primitive::Quad { + bounds: Rectangle { + x: bounds_x, + y: bounds_y + handle_offset, + width: bounds_width, + height: handle_height + twice_border_width, + }, + background: Background::Color(style.handle_top_color), + border_radius: style.back_border_radius, + border_width: style.back_border_width, + border_color: Color::TRANSPARENT, + }; - let half_bounds_height = (bounds_height / 2.0).round(); - - let top_empty_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y, - width: bounds_width, - height: half_bounds_height, - }, - background: Background::Color(style.back_top_empty_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; + Primitive::Group { + primitives: vec![ + empty_rect, + tick_marks, + filled_rect, + mod_range_line, + handle, + ], + } + } +} - let handle_offset = ((((bounds_height - - (border_width * 2.0)) - - handle_height) - * (1.0 - normal.value())) - + border_width) - .round(); - - if normal.value() > 0.499 && normal.value() < 0.501 { - let handle = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + handle_offset - border_width, - width: bounds_width, - height: handle_height + (border_width * 2.0), - }, - background: Background::Color( - style.handle_center_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_rails( + rail_x: f32, + bounds_y: f32, + bounds_height: f32, + top_rail_width: u16, + bottom_rail_width: u16, + top_rail_color: &Color, + bottom_rail_color: &Color, +) -> (Primitive, Primitive) { + let top_rail_width = top_rail_width as f32; + let bottom_rail_width = bottom_rail_width as f32; + let full_rail_width = top_rail_width + bottom_rail_width; + let half_full_rail_width = (full_rail_width / 2.0).floor(); + + ( + Primitive::Quad { + bounds: Rectangle { + x: rail_x - half_full_rail_width, + y: bounds_y, + width: top_rail_width, + height: bounds_height, + }, + background: Background::Color(*top_rail_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }, + Primitive::Quad { + bounds: Rectangle { + x: rail_x - half_full_rail_width + top_rail_width, + y: bounds_y, + width: bottom_rail_width, + height: bounds_height, + }, + background: Background::Color(*bottom_rail_color), + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }, + ) +} - ( - Primitive::Group { - primitives: vec![ - bottom_empty_rect, - top_empty_rect, - tick_marks, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } else if normal.value() > 0.5 { - let filled_rect_offset = handle_offset - + handle_height - + style.handle_filled_gap as f32 - - border_width; - - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + filled_rect_offset, - width: bounds_width, - height: half_bounds_height - filled_rect_offset, - }, - background: Background::Color( - style.back_top_filled_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + handle_offset - border_width, - width: bounds_width, - height: handle_height + (border_width * 2.0), - }, - background: Background::Color(style.handle_top_color), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_tick_mark_tier_merged( + primitives: &mut Vec, + tick_mark_positions: &Vec, + width: f32, + length_scale: f32, + color: &Color, + bounds_y: f32, + rail_x: f32, + bounds_width: f32, + bounds_height: f32, +) { + let length = (length_scale * bounds_width).floor(); + let color = Background::Color(*color); + let start_y = bounds_y - (width / 2.0); + let x = (rail_x - (length / 2.0)).floor(); + + for position in tick_mark_positions.iter() { + let y = (start_y + position.scale_inv(bounds_height)).floor(); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x, + y, + width: length, + height: width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } +} - ( - Primitive::Group { - primitives: vec![ - bottom_empty_rect, - top_empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } else { - let filled_rect_offset = half_bounds_height; - let filled_rect = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + filled_rect_offset - - (border_width * 2.0), - width: bounds_width, - height: handle_offset - filled_rect_offset - + (border_width * 3.0) - - style.handle_filled_gap as f32, - }, - background: Background::Color( - style.back_bottom_filled_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; - - let handle = Primitive::Quad { - bounds: Rectangle { - x: rect_x, - y: bounds_y + handle_offset - border_width, - width: bounds_width, - height: handle_height + (border_width * 2.0), - }, - background: Background::Color( - style.handle_bottom_color, - ), - border_radius: style.border_radius, - border_width: style.border_width, - border_color: Color::TRANSPARENT, - }; +fn draw_tick_mark_tier( + primitives: &mut Vec, + tick_mark_positions: &Vec, + width: f32, + length_scale: f32, + color: &Color, + bounds_y: f32, + rail_x: f32, + bounds_width: f32, + bounds_height: f32, + center_offset: f32, +) { + let length = (length_scale * bounds_width).floor(); + let half_length = (length / 2.0).floor(); + let color = Background::Color(*color); + let start_y = bounds_y - (width / 2.0); + + let left_x = rail_x - center_offset - half_length; + let right_x = rail_x + center_offset; + + for position in tick_mark_positions.iter() { + let y = (start_y + position.scale_inv(bounds_height)).floor(); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: left_x, + y, + width: half_length, + height: width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + + primitives.push(Primitive::Quad { + bounds: Rectangle { + x: right_x, + y, + width: half_length, + height: width, + }, + background: color, + border_radius: 0, + border_width: 0, + border_color: Color::TRANSPARENT, + }); + } +} - ( - Primitive::Group { - primitives: vec![ - bottom_empty_rect, - top_empty_rect, - tick_marks, - filled_rect, - mod_range_line, - handle, - ], - }, - MouseCursor::default(), - ) - } - } +fn draw_tick_marks( + rail_x: f32, + bounds_y: f32, + bounds_width: f32, + bounds_height: f32, + tick_marks: &TickMarkGroup, + style: &TickMarkStyle, +) -> Primitive { + let mut primitives: Vec = Vec::new(); + + if style.center_offset == 0 { + primitives.reserve_exact(tick_marks.len()); + + if tick_marks.has_tier_1() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_1_positions(), + style.width_tier_1 as f32, + style.length_scale_tier_1, + &style.color_tier_1, + bounds_y, + rail_x, + bounds_width, + bounds_height, + ); + } + if tick_marks.has_tier_2() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_2_positions(), + style.width_tier_2 as f32, + style.length_scale_tier_2, + &style.color_tier_2, + bounds_y, + rail_x, + bounds_width, + bounds_height, + ); + } + if tick_marks.has_tier_3() { + draw_tick_mark_tier_merged( + &mut primitives, + &tick_marks.tier_3_positions(), + style.width_tier_3 as f32, + style.length_scale_tier_3, + &style.color_tier_3, + bounds_y, + rail_x, + bounds_width, + bounds_height, + ); + } + } else { + primitives.reserve_exact(tick_marks.len() * 2); + + let center_offset = style.center_offset as f32; + + if tick_marks.has_tier_1() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_1_positions(), + style.width_tier_1 as f32, + style.length_scale_tier_1, + &style.color_tier_1, + bounds_y, + rail_x, + bounds_width, + bounds_height, + center_offset, + ); + } + if tick_marks.has_tier_2() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_2_positions(), + style.width_tier_2 as f32, + style.length_scale_tier_2, + &style.color_tier_2, + bounds_y, + rail_x, + bounds_width, + bounds_height, + center_offset, + ); + } + if tick_marks.has_tier_3() { + draw_tick_mark_tier( + &mut primitives, + &tick_marks.tier_3_positions(), + style.width_tier_3 as f32, + style.length_scale_tier_3, + &style.color_tier_3, + bounds_y, + rail_x, + bounds_width, + bounds_height, + center_offset, + ); } } + + Primitive::Group { primitives } } diff --git a/src/wgpu/xy_pad.rs b/src/wgpu/xy_pad.rs index c4fb5fd..7799248 100644 --- a/src/wgpu/xy_pad.rs +++ b/src/wgpu/xy_pad.rs @@ -64,61 +64,51 @@ impl xy_pad::Renderer for Renderer { border_color: style.border_color, }; - let handle_x = (bounds_x + (bounds_size * normal_x.value())).round(); - let handle_y = (bounds_y + (bounds_size * normal_y.value())).round(); + let handle_x = (bounds_x + (bounds_size * normal_x.value())).floor(); + let handle_y = (bounds_y + (bounds_size * normal_y.value())).floor(); - let bounds_center = (bounds_size / 2.0).round(); + let bounds_center = (bounds_size / 2.0).floor(); - let half_center_line_width = - (style.center_line_width as f32 / 2.0).floor(); + let (h_center_line, v_center_line) = if style.center_line_color + != Color::TRANSPARENT + { + let center_line_width = style.center_line_width as f32; + let half_center_line_width = (center_line_width / 2.0).floor(); - let draw_center_lines = style.center_line_width != 0 - && style.center_line_color != Color::TRANSPARENT; - - let draw_rail_lines = style.rail_width != 0; - - let h_center_line = { - if draw_center_lines { + ( Primitive::Quad { bounds: Rectangle { x: bounds_x, y: bounds_y + bounds_center - half_center_line_width, width: bounds_size, - height: style.center_line_width as f32, + height: center_line_width, }, background: Background::Color(style.center_line_color), border_radius: 0, border_width: 0, border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - let v_center_line = { - if draw_center_lines { + }, Primitive::Quad { bounds: Rectangle { x: bounds_x + bounds_center - half_center_line_width, y: bounds_y, - width: style.center_line_width as f32, + width: center_line_width, height: bounds_size, }, background: Background::Color(style.center_line_color), border_radius: 0, border_width: 0, border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } + }, + ) + } else { + (Primitive::None, Primitive::None) }; - let half_rail_width = (style.rail_width as f32 / 2.0).floor(); - - let h_rail = { - if draw_rail_lines { + let (h_rail, v_rail) = if style.rail_width != 0 { + let rail_width = style.rail_width as f32; + let half_rail_width = (rail_width / 2.0).floor(); + ( Primitive::Quad { bounds: Rectangle { x: bounds_x, @@ -130,14 +120,7 @@ impl xy_pad::Renderer for Renderer { border_radius: 0, border_width: 0, border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } - }; - - let v_rail = { - if draw_rail_lines { + }, Primitive::Quad { bounds: Rectangle { x: handle_x - half_rail_width, @@ -149,22 +132,22 @@ impl xy_pad::Renderer for Renderer { border_radius: 0, border_width: 0, border_color: Color::TRANSPARENT, - } - } else { - Primitive::None - } + }, + ) + } else { + (Primitive::None, Primitive::None) }; let handle = { match style.handle { HandleShape::Circle(circle) => { let diameter = circle.diameter as f32; - let radius = (diameter / 2.0).round(); + let radius = diameter / 2.0; Primitive::Quad { bounds: Rectangle { - x: handle_x - radius + 1.0, - y: handle_y - radius + 1.0, + x: handle_x - radius, + y: handle_y - radius, width: diameter, height: diameter, }, @@ -176,12 +159,12 @@ impl xy_pad::Renderer for Renderer { } HandleShape::Square(square) => { let size = square.size as f32; - let half_size = (size / 2.0).round(); + let half_size = (size / 2.0).floor(); Primitive::Quad { bounds: Rectangle { - x: handle_x - half_size + 1.0, - y: handle_y - half_size + 1.0, + x: handle_x - half_size, + y: handle_y - half_size, width: size, height: size, },