feat: add overlay option to appearance for vertical icon button

This commit is contained in:
Ashley Wulber 2024-07-17 15:16:43 -04:00 committed by Michael Murphy
parent 47dedfde74
commit 6f2c893cf5
4 changed files with 30 additions and 1 deletions

View file

@ -73,9 +73,14 @@ pub fn appearance(
Button::Icon | Button::IconVertical | Button::HeaderBar => {
if matches!(style, Button::IconVertical) {
corner_radii = &cosmic.corner_radii.radius_m;
if selected {
appearance.overlay = Some(Background::Color(Color::from(
cosmic.icon_button.selected_state_color(),
)));
}
}
let (background, text, icon) = color(&cosmic.icon_button);
let (background, _text, _icon) = color(&cosmic.icon_button);
appearance.background = Some(Background::Color(background));
}

View file

@ -16,6 +16,9 @@ pub struct Appearance {
/// The [`Background`] of the button.
pub background: Option<Background>,
/// The [`Background`] overlay of the button.
pub overlay: Option<Background>,
/// The border radius of the button.
pub border_radius: Radius,
@ -52,6 +55,7 @@ impl Appearance {
outline_color: Color::TRANSPARENT,
icon_color: None,
text_color: None,
overlay: None,
}
}
}

View file

@ -813,6 +813,21 @@ pub fn draw<Renderer: iced_core::Renderer, Theme>(
);
}
// Then button overlay if any.
if let Some(overlay) = styling.overlay {
renderer.fill_quad(
renderer::Quad {
bounds,
border: Border {
radius: styling.border_radius,
..Default::default()
},
shadow: Shadow::default(),
},
overlay,
);
}
// Then draw the button contents onto the background.
draw_contents(renderer, styling);

View file

@ -772,6 +772,7 @@ fn color_to_string(c: palette::Hsv, is_hex: bool) -> String {
}
}
#[allow(clippy::too_many_lines)]
/// A button for selecting a color from a color picker.
pub fn color_button<'a, Message: 'static>(
on_press: Option<Message>,
@ -826,6 +827,7 @@ pub fn color_button<'a, Message: 'static>(
outline_color,
icon_color: None,
text_color: None,
overlay: None,
}
}),
disabled: Box::new(move |theme| {
@ -842,6 +844,7 @@ pub fn color_button<'a, Message: 'static>(
outline_color: Color::TRANSPARENT,
icon_color: None,
text_color: None,
overlay: None,
}
}),
hovered: Box::new(move |focused, theme| {
@ -864,6 +867,7 @@ pub fn color_button<'a, Message: 'static>(
outline_color,
icon_color: None,
text_color: None,
overlay: None,
}
}),
pressed: Box::new(move |focused, theme| {
@ -886,6 +890,7 @@ pub fn color_button<'a, Message: 'static>(
outline_color,
icon_color: None,
text_color: None,
overlay: None,
}
}),
})