From 1de51b623040a402bb97452c167d926e40c78bcb Mon Sep 17 00:00:00 2001 From: Jonathan Spira Date: Thu, 3 Oct 2024 15:50:14 -0400 Subject: [PATCH] Added style and color defaults --- imgui/Cargo.toml | 5 +- imgui/src/style.rs | 678 +++++++++++++++++++++++++++++++++++---------- 2 files changed, 536 insertions(+), 147 deletions(-) diff --git a/imgui/Cargo.toml b/imgui/Cargo.toml index 57eccef..9b17286 100644 --- a/imgui/Cargo.toml +++ b/imgui/Cargo.toml @@ -31,4 +31,7 @@ docking = ["imgui-sys/docking"] tables-api = [] [dev-dependencies] -memoffset = "0.9" \ No newline at end of file +approx = "0.5.1" +memoffset = "0.9" +pretty_assertions = "1.4.1" + diff --git a/imgui/src/style.rs b/imgui/src/style.rs index 2f450aa..cad34fd 100644 --- a/imgui/src/style.rs +++ b/imgui/src/style.rs @@ -8,7 +8,7 @@ use crate::{sys, HoveredFlags}; /// User interface style/colors #[repr(C)] -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, PartialEq)] pub struct Style { /// Global alpha applies to everything pub alpha: f32, @@ -33,7 +33,7 @@ pub struct Style { pub window_title_align: [f32; 2], /// Side of the collapsing/docking button in the title bar (left/right). /// - /// Defaults to Direction::Left. + /// Defaults to [`Direction::Left`]. pub window_menu_button_position: Direction, /// Rounding radius of child window corners. /// @@ -117,6 +117,8 @@ pub struct Style { pub table_angled_headers_text_align: [f32; 2], /// Side of the color buttonton pubin color editor widgets (left/right). + /// + /// Defaults to [`Direction::Right`]. pub color_button_position: Direction, /// Alignment of button text when button is larger than text. /// @@ -209,14 +211,7 @@ impl Style { sys::ImGuiStyle_ScaleAllSizes(self.raw_mut(), scale_factor); } } - /// Replaces current colors with classic Dear ImGui style - #[doc(alias = "StyleColors", alias = "StlyeColorsClassic")] - pub fn use_classic_colors(&mut self) -> &mut Self { - unsafe { - sys::igStyleColorsClassic(self.raw_mut()); - } - self - } + /// Replaces current colors with a new, recommended style #[doc(alias = "StyleColors", alias = "StyleColorsDark")] pub fn use_dark_colors(&mut self) -> &mut Self { @@ -225,8 +220,10 @@ impl Style { } self } - /// Replaces current colors with a light style. Best used with borders and a custom, thicker - /// font + + /// Replaces current colors with a light style. + /// + /// Best used with borders and a custom, thicker font #[doc(alias = "StyleColors", alias = "StyleColorsLight")] pub fn use_light_colors(&mut self) -> &mut Self { unsafe { @@ -234,6 +231,81 @@ impl Style { } self } + + /// Replaces current colors with classic Dear ImGui style + #[doc(alias = "StyleColors", alias = "StlyeColorsClassic")] + pub fn use_classic_colors(&mut self) -> &mut Self { + unsafe { + sys::igStyleColorsClassic(self.raw_mut()); + } + self + } +} + +impl Default for Style { + fn default() -> Self { + Self { + alpha: 1.0, + disabled_alpha: 0.6, + window_padding: [8.0, 8.0], + window_rounding: 0.0, + window_border_size: 1.0, + window_min_size: [32.0, 32.0], + window_title_align: [0.0, 0.5], + window_menu_button_position: Direction::Left, + child_rounding: 0.0, + child_border_size: 1.0, + popup_rounding: 0.0, + popup_border_size: 1.0, + frame_padding: [4.0, 3.0], + frame_rounding: 0.0, + frame_border_size: 0.0, + item_spacing: [8.0, 4.0], + item_inner_spacing: [4.0, 4.0], + cell_padding: [4.0, 2.0], + touch_extra_padding: [0.0, 0.0], + indent_spacing: 21.0, + columns_min_spacing: 6.0, + scrollbar_size: 14.0, + scrollbar_rounding: 9.0, + grab_min_size: 12.0, + grab_rounding: 0.0, + log_slider_deadzone: 4.0, + tab_rounding: 4.0, + tab_border_size: 0.0, + tab_min_width_for_close_button: 0.0, + tab_bar_border_size: 1.0, + tab_bar_overline_size: 2.0, + table_angled_headers_angle: 35.0 * (std::f32::consts::PI / 180.0), + table_angled_headers_text_align: [0.5, 0.0], + color_button_position: Direction::Right, + button_text_align: [0.5, 0.5], + selectable_text_align: [0.0, 0.0], + separator_text_border_size: 3.0, + separator_text_align: [0.0, 0.5], + separator_text_padding: [20.0, 3.0], + display_window_padding: [19.0, 19.0], + display_safe_area_padding: [3.0, 3.0], + #[cfg(feature = "docking")] + docking_separator_size: 2.0, + mouse_cursor_scale: 1.0, + anti_aliased_lines: true, + anti_aliased_lines_use_tex: true, + anti_aliased_fill: true, + curve_tessellation_tol: 1.25, + circle_tesselation_max_error: 0.3, + hover_stationary_delay: 0.15, + hover_delay_short: 0.15, + hover_delay_normal: 0.4, + hover_flags_for_tooltip_mouse: HoveredFlags::STATIONARY + | HoveredFlags::DELAY_SHORT + | HoveredFlags::ALLOW_WHEN_DISABLED, + hover_flags_for_tooltip_nav: HoveredFlags::NO_SHARED_DELAY + | HoveredFlags::DELAY_NORMAL + | HoveredFlags::ALLOW_WHEN_DISABLED, + colors: StyleColor::dark_colors(), + } + } } impl Index for Style { @@ -255,7 +327,10 @@ impl IndexMut for Style { /// /// Which color does what can sometimes be be unobvious. A good way to find a particular color is to use /// the [`crate::Ui::show_default_style_editor`] window, set a color to a very bright color, and explore the -/// [`crate::Ui::show_demo_window`] until you spot it +/// [`crate::Ui::show_demo_window`] until you spot it. +/// +/// Take special note of [`StyleColor::dark_colors`], [`StyleColor::light_colors`], and [`StyleColor::classic_colors`], +/// which can be used to get the color palettes ImGui uses. #[repr(u32)] #[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)] #[non_exhaustive] @@ -520,6 +595,253 @@ impl StyleColor { StyleColor::TextLink => "TextLink", } } + + /// Returns the "Dark" style colors for ImGui as an array. + /// + /// You can set this output to [`Style::colors`] to change the style palette. + pub fn dark_colors() -> [[f32; 4]; StyleColor::COUNT] { + let mut colors = [Default::default(); StyleColor::COUNT]; + + colors[Self::Text as usize] = [1.00, 1.00, 1.00, 1.00]; + colors[Self::TextDisabled as usize] = [0.50, 0.50, 0.50, 1.00]; + colors[Self::WindowBg as usize] = [0.06, 0.06, 0.06, 0.94]; + colors[Self::ChildBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::PopupBg as usize] = [0.08, 0.08, 0.08, 0.94]; + colors[Self::Border as usize] = [0.43, 0.43, 0.50, 0.50]; + colors[Self::BorderShadow as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::FrameBg as usize] = [0.16, 0.29, 0.48, 0.54]; + colors[Self::FrameBgHovered as usize] = [0.26, 0.59, 0.98, 0.40]; + colors[Self::FrameBgActive as usize] = [0.26, 0.59, 0.98, 0.67]; + colors[Self::TitleBg as usize] = [0.04, 0.04, 0.04, 1.00]; + colors[Self::TitleBgActive as usize] = [0.16, 0.29, 0.48, 1.00]; + colors[Self::TitleBgCollapsed as usize] = [0.00, 0.00, 0.00, 0.51]; + colors[Self::MenuBarBg as usize] = [0.14, 0.14, 0.14, 1.00]; + colors[Self::ScrollbarBg as usize] = [0.02, 0.02, 0.02, 0.53]; + colors[Self::ScrollbarGrab as usize] = [0.31, 0.31, 0.31, 1.00]; + colors[Self::ScrollbarGrabHovered as usize] = [0.41, 0.41, 0.41, 1.00]; + colors[Self::ScrollbarGrabActive as usize] = [0.51, 0.51, 0.51, 1.00]; + colors[Self::CheckMark as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::SliderGrab as usize] = [0.24, 0.52, 0.88, 1.00]; + colors[Self::SliderGrabActive as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::Button as usize] = [0.26, 0.59, 0.98, 0.40]; + colors[Self::ButtonHovered as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::ButtonActive as usize] = [0.06, 0.53, 0.98, 1.00]; + colors[Self::Header as usize] = [0.26, 0.59, 0.98, 0.31]; + colors[Self::HeaderHovered as usize] = [0.26, 0.59, 0.98, 0.80]; + colors[Self::HeaderActive as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::Separator as usize] = colors[Self::Border as usize]; + colors[Self::SeparatorHovered as usize] = [0.10, 0.40, 0.75, 0.78]; + colors[Self::SeparatorActive as usize] = [0.10, 0.40, 0.75, 1.00]; + colors[Self::ResizeGrip as usize] = [0.26, 0.59, 0.98, 0.20]; + colors[Self::ResizeGripHovered as usize] = [0.26, 0.59, 0.98, 0.67]; + colors[Self::ResizeGripActive as usize] = [0.26, 0.59, 0.98, 0.95]; + colors[Self::TabHovered as usize] = colors[Self::HeaderHovered as usize]; + colors[Self::Tab as usize] = lerp( + colors[Self::Header as usize], + colors[Self::TitleBgActive as usize], + 0.80, + ); + colors[Self::TabSelected as usize] = lerp( + colors[Self::HeaderActive as usize], + colors[Self::TitleBgActive as usize], + 0.60, + ); + colors[Self::TabSelectedOverline as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TabDimmed as usize] = lerp( + colors[Self::Tab as usize], + colors[Self::TitleBg as usize], + 0.80, + ); + colors[Self::TabDimmedSelected as usize] = lerp( + colors[Self::TabSelected as usize], + colors[Self::TitleBg as usize], + 0.40, + ); + colors[Self::TabDimmedSelectedOverline as usize] = [0.50, 0.50, 0.50, 1.00]; + colors[Self::PlotLines as usize] = [0.61, 0.61, 0.61, 1.00]; + colors[Self::PlotLinesHovered as usize] = [1.00, 0.43, 0.35, 1.00]; + colors[Self::PlotHistogram as usize] = [0.90, 0.70, 0.00, 1.00]; + colors[Self::PlotHistogramHovered as usize] = [1.00, 0.60, 0.00, 1.00]; + colors[Self::TableHeaderBg as usize] = [0.19, 0.19, 0.20, 1.00]; + colors[Self::TableBorderStrong as usize] = [0.31, 0.31, 0.35, 1.00]; + colors[Self::TableBorderLight as usize] = [0.23, 0.23, 0.25, 1.00]; + colors[Self::TableRowBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::TableRowBgAlt as usize] = [1.00, 1.00, 1.00, 0.06]; + colors[Self::TextLink as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TextSelectedBg as usize] = [0.26, 0.59, 0.98, 0.35]; + colors[Self::DragDropTarget as usize] = [1.00, 1.00, 0.00, 0.90]; + colors[Self::NavHighlight as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::NavWindowingHighlight as usize] = [1.00, 1.00, 1.00, 0.70]; + colors[Self::NavWindowingDimBg as usize] = [0.80, 0.80, 0.80, 0.20]; + colors[Self::ModalWindowDimBg as usize] = [0.80, 0.80, 0.80, 0.35]; + + colors + } + + /// Returns the "Light" style colors for ImGui as an array. + /// + /// You can set this output to [`Style::colors`] to change the style palette. + pub fn light_colors() -> [[f32; 4]; StyleColor::COUNT] { + let mut colors = [Default::default(); StyleColor::COUNT]; + + colors[Self::Text as usize] = [0.00, 0.00, 0.00, 1.00]; + colors[Self::TextDisabled as usize] = [0.60, 0.60, 0.60, 1.00]; + colors[Self::WindowBg as usize] = [0.94, 0.94, 0.94, 1.00]; + colors[Self::ChildBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::PopupBg as usize] = [1.00, 1.00, 1.00, 0.98]; + colors[Self::Border as usize] = [0.00, 0.00, 0.00, 0.30]; + colors[Self::BorderShadow as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::FrameBg as usize] = [1.00, 1.00, 1.00, 1.00]; + colors[Self::FrameBgHovered as usize] = [0.26, 0.59, 0.98, 0.40]; + colors[Self::FrameBgActive as usize] = [0.26, 0.59, 0.98, 0.67]; + colors[Self::TitleBg as usize] = [0.96, 0.96, 0.96, 1.00]; + colors[Self::TitleBgActive as usize] = [0.82, 0.82, 0.82, 1.00]; + colors[Self::TitleBgCollapsed as usize] = [1.00, 1.00, 1.00, 0.51]; + colors[Self::MenuBarBg as usize] = [0.86, 0.86, 0.86, 1.00]; + colors[Self::ScrollbarBg as usize] = [0.98, 0.98, 0.98, 0.53]; + colors[Self::ScrollbarGrab as usize] = [0.69, 0.69, 0.69, 0.80]; + colors[Self::ScrollbarGrabHovered as usize] = [0.49, 0.49, 0.49, 0.80]; + colors[Self::ScrollbarGrabActive as usize] = [0.49, 0.49, 0.49, 1.00]; + colors[Self::CheckMark as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::SliderGrab as usize] = [0.26, 0.59, 0.98, 0.78]; + colors[Self::SliderGrabActive as usize] = [0.46, 0.54, 0.80, 0.60]; + colors[Self::Button as usize] = [0.26, 0.59, 0.98, 0.40]; + colors[Self::ButtonHovered as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::ButtonActive as usize] = [0.06, 0.53, 0.98, 1.00]; + colors[Self::Header as usize] = [0.26, 0.59, 0.98, 0.31]; + colors[Self::HeaderHovered as usize] = [0.26, 0.59, 0.98, 0.80]; + colors[Self::HeaderActive as usize] = [0.26, 0.59, 0.98, 1.00]; + colors[Self::Separator as usize] = [0.39, 0.39, 0.39, 0.62]; + colors[Self::SeparatorHovered as usize] = [0.14, 0.44, 0.80, 0.78]; + colors[Self::SeparatorActive as usize] = [0.14, 0.44, 0.80, 1.00]; + colors[Self::ResizeGrip as usize] = [0.35, 0.35, 0.35, 0.17]; + colors[Self::ResizeGripHovered as usize] = [0.26, 0.59, 0.98, 0.67]; + colors[Self::ResizeGripActive as usize] = [0.26, 0.59, 0.98, 0.95]; + colors[Self::TabHovered as usize] = colors[Self::HeaderHovered as usize]; + colors[Self::Tab as usize] = lerp( + colors[Self::Header as usize], + colors[Self::TitleBgActive as usize], + 0.90, + ); + colors[Self::TabSelected as usize] = lerp( + colors[Self::HeaderActive as usize], + colors[Self::TitleBgActive as usize], + 0.60, + ); + colors[Self::TabSelectedOverline as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TabDimmed as usize] = lerp( + colors[Self::Tab as usize], + colors[Self::TitleBg as usize], + 0.80, + ); + colors[Self::TabDimmedSelected as usize] = lerp( + colors[Self::TabSelected as usize], + colors[Self::TitleBg as usize], + 0.40, + ); + colors[Self::TabDimmedSelectedOverline as usize] = [0.26, 0.59, 1.00, 1.00]; + colors[Self::PlotLines as usize] = [0.39, 0.39, 0.39, 1.00]; + colors[Self::PlotLinesHovered as usize] = [1.00, 0.43, 0.35, 1.00]; + colors[Self::PlotHistogram as usize] = [0.90, 0.70, 0.00, 1.00]; + colors[Self::PlotHistogramHovered as usize] = [1.00, 0.45, 0.00, 1.00]; + colors[Self::TableHeaderBg as usize] = [0.78, 0.87, 0.98, 1.00]; + colors[Self::TableBorderStrong as usize] = [0.57, 0.57, 0.64, 1.00]; + colors[Self::TableBorderLight as usize] = [0.68, 0.68, 0.74, 1.00]; + colors[Self::TableRowBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::TableRowBgAlt as usize] = [0.30, 0.30, 0.30, 0.09]; + colors[Self::TextLink as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TextSelectedBg as usize] = [0.26, 0.59, 0.98, 0.35]; + colors[Self::DragDropTarget as usize] = [0.26, 0.59, 0.98, 0.95]; + colors[Self::NavHighlight as usize] = colors[Self::HeaderHovered as usize]; + colors[Self::NavWindowingHighlight as usize] = [0.70, 0.70, 0.70, 0.70]; + colors[Self::NavWindowingDimBg as usize] = [0.20, 0.20, 0.20, 0.20]; + colors[Self::ModalWindowDimBg as usize] = [0.20, 0.20, 0.20, 0.35]; + + colors + } + + /// Returns the "Classic" style colors for ImGui as an array. ImGui now uses + /// the "Dark" style colors, which can be made from [`StyleColor::dark_colors`]. + /// + /// You can set this output to [`Style::colors`] to change the style palette. + pub fn classic_colors() -> [[f32; 4]; StyleColor::COUNT] { + let mut colors = [Default::default(); StyleColor::COUNT]; + + colors[Self::Text as usize] = [0.90, 0.90, 0.90, 1.00]; + colors[Self::TextDisabled as usize] = [0.60, 0.60, 0.60, 1.00]; + colors[Self::WindowBg as usize] = [0.00, 0.00, 0.00, 0.85]; + colors[Self::ChildBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::PopupBg as usize] = [0.11, 0.11, 0.14, 0.92]; + colors[Self::Border as usize] = [0.50, 0.50, 0.50, 0.50]; + colors[Self::BorderShadow as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::FrameBg as usize] = [0.43, 0.43, 0.43, 0.39]; + colors[Self::FrameBgHovered as usize] = [0.47, 0.47, 0.69, 0.40]; + colors[Self::FrameBgActive as usize] = [0.42, 0.41, 0.64, 0.69]; + colors[Self::TitleBg as usize] = [0.27, 0.27, 0.54, 0.83]; + colors[Self::TitleBgActive as usize] = [0.32, 0.32, 0.63, 0.87]; + colors[Self::TitleBgCollapsed as usize] = [0.40, 0.40, 0.80, 0.20]; + colors[Self::MenuBarBg as usize] = [0.40, 0.40, 0.55, 0.80]; + colors[Self::ScrollbarBg as usize] = [0.20, 0.25, 0.30, 0.60]; + colors[Self::ScrollbarGrab as usize] = [0.40, 0.40, 0.80, 0.30]; + colors[Self::ScrollbarGrabHovered as usize] = [0.40, 0.40, 0.80, 0.40]; + colors[Self::ScrollbarGrabActive as usize] = [0.41, 0.39, 0.80, 0.60]; + colors[Self::CheckMark as usize] = [0.90, 0.90, 0.90, 0.50]; + colors[Self::SliderGrab as usize] = [1.00, 1.00, 1.00, 0.30]; + colors[Self::SliderGrabActive as usize] = [0.41, 0.39, 0.80, 0.60]; + colors[Self::Button as usize] = [0.35, 0.40, 0.61, 0.62]; + colors[Self::ButtonHovered as usize] = [0.40, 0.48, 0.71, 0.79]; + colors[Self::ButtonActive as usize] = [0.46, 0.54, 0.80, 1.00]; + colors[Self::Header as usize] = [0.40, 0.40, 0.90, 0.45]; + colors[Self::HeaderHovered as usize] = [0.45, 0.45, 0.90, 0.80]; + colors[Self::HeaderActive as usize] = [0.53, 0.53, 0.87, 0.80]; + colors[Self::Separator as usize] = [0.50, 0.50, 0.50, 0.60]; + colors[Self::SeparatorHovered as usize] = [0.60, 0.60, 0.70, 1.00]; + colors[Self::SeparatorActive as usize] = [0.70, 0.70, 0.90, 1.00]; + colors[Self::ResizeGrip as usize] = [1.00, 1.00, 1.00, 0.10]; + colors[Self::ResizeGripHovered as usize] = [0.78, 0.82, 1.00, 0.60]; + colors[Self::ResizeGripActive as usize] = [0.78, 0.82, 1.00, 0.90]; + colors[Self::TabHovered as usize] = colors[Self::HeaderHovered as usize]; + colors[Self::Tab as usize] = lerp( + colors[Self::Header as usize], + colors[Self::TitleBgActive as usize], + 0.80, + ); + colors[Self::TabSelected as usize] = lerp( + colors[Self::HeaderActive as usize], + colors[Self::TitleBgActive as usize], + 0.60, + ); + colors[Self::TabSelectedOverline as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TabDimmed as usize] = lerp( + colors[Self::Tab as usize], + colors[Self::TitleBg as usize], + 0.80, + ); + colors[Self::TabDimmedSelected as usize] = lerp( + colors[Self::TabSelected as usize], + colors[Self::TitleBg as usize], + 0.40, + ); + colors[Self::TabDimmedSelectedOverline as usize] = colors[Self::HeaderActive as usize]; + colors[Self::PlotLines as usize] = [1.00, 1.00, 1.00, 1.00]; + colors[Self::PlotLinesHovered as usize] = [0.90, 0.70, 0.00, 1.00]; + colors[Self::PlotHistogram as usize] = [0.90, 0.70, 0.00, 1.00]; + colors[Self::PlotHistogramHovered as usize] = [1.00, 0.60, 0.00, 1.00]; + colors[Self::TableHeaderBg as usize] = [0.27, 0.27, 0.38, 1.00]; + colors[Self::TableBorderStrong as usize] = [0.31, 0.31, 0.45, 1.00]; + colors[Self::TableBorderLight as usize] = [0.26, 0.26, 0.28, 1.00]; + colors[Self::TableRowBg as usize] = [0.00, 0.00, 0.00, 0.00]; + colors[Self::TableRowBgAlt as usize] = [1.00, 1.00, 1.00, 0.07]; + colors[Self::TextLink as usize] = colors[Self::HeaderActive as usize]; + colors[Self::TextSelectedBg as usize] = [0.00, 0.00, 1.00, 0.35]; + colors[Self::DragDropTarget as usize] = [1.00, 1.00, 0.00, 0.90]; + colors[Self::NavHighlight as usize] = colors[Self::HeaderHovered as usize]; + colors[Self::NavWindowingHighlight as usize] = [1.00, 1.00, 1.00, 0.70]; + colors[Self::NavWindowingDimBg as usize] = [0.80, 0.80, 0.80, 0.20]; + colors[Self::ModalWindowDimBg as usize] = [0.20, 0.20, 0.20, 0.35]; + + colors + } } impl fmt::Display for StyleColor { @@ -612,144 +934,208 @@ pub enum StyleVar { CellPadding([f32; 2]), } -#[test] -fn test_style_scaling() { - let (_guard, mut ctx) = crate::test::test_ctx(); - let style = ctx.style_mut(); - style.window_padding = [1.0, 2.0]; - style.window_rounding = 3.0; - style.window_min_size = [4.0, 5.0]; - style.child_rounding = 6.0; - style.popup_rounding = 7.0; - style.frame_padding = [8.0, 9.0]; - style.frame_rounding = 10.0; - style.item_spacing = [11.0, 12.0]; - style.item_inner_spacing = [13.0, 14.0]; - style.touch_extra_padding = [15.0, 16.0]; - style.indent_spacing = 17.0; - style.columns_min_spacing = 18.0; - style.scrollbar_size = 19.0; - style.scrollbar_rounding = 20.0; - style.grab_min_size = 21.0; - style.grab_rounding = 22.0; - style.log_slider_deadzone = 29.0; - style.tab_rounding = 23.0; - style.display_window_padding = [24.0, 25.0]; - style.display_safe_area_padding = [26.0, 27.0]; - style.mouse_cursor_scale = 28.0; - style.cell_padding = [29.0, 30.0]; - style.scale_all_sizes(2.0); - assert_eq!(style.window_padding, [2.0, 4.0]); - assert_eq!(style.window_rounding, 6.0); - assert_eq!(style.window_min_size, [8.0, 10.0]); - assert_eq!(style.child_rounding, 12.0); - assert_eq!(style.popup_rounding, 14.0); - assert_eq!(style.frame_padding, [16.0, 18.0]); - assert_eq!(style.frame_rounding, 20.0); - assert_eq!(style.item_spacing, [22.0, 24.0]); - assert_eq!(style.item_inner_spacing, [26.0, 28.0]); - assert_eq!(style.touch_extra_padding, [30.0, 32.0]); - assert_eq!(style.indent_spacing, 34.0); - assert_eq!(style.columns_min_spacing, 36.0); - assert_eq!(style.scrollbar_size, 38.0); - assert_eq!(style.scrollbar_rounding, 40.0); - assert_eq!(style.grab_min_size, 42.0); - assert_eq!(style.grab_rounding, 44.0); - assert_eq!(style.log_slider_deadzone, 58.0); - assert_eq!(style.tab_rounding, 46.0); - assert_eq!(style.display_window_padding, [48.0, 50.0]); - assert_eq!(style.display_safe_area_padding, [52.0, 54.0]); - assert_eq!(style.mouse_cursor_scale, 56.0); - assert_eq!(style.cell_padding, [58.0, 60.0]); +// lerps a color with the given value +fn lerp(a: [f32; 4], b: [f32; 4], t: f32) -> [f32; 4] { + std::array::from_fn(|i| a[i] + (b[i] - a[i]) * t) } -#[test] -fn test_style_color_indexing() { - let (_guard, mut ctx) = crate::test::test_ctx(); - let style = ctx.style_mut(); - let value = [0.1, 0.2, 0.3, 1.0]; - style[StyleColor::Tab] = value; - assert_eq!(style[StyleColor::Tab], value); - assert_eq!(style.colors[StyleColor::Tab as usize], value); -} - -#[test] #[cfg(test)] -fn test_style_memory_layout() { - use std::mem; - assert_eq!(mem::size_of::