Add option for a hovered and checked background

This commit is contained in:
João Capucho 2021-09-10 21:44:27 +01:00
parent 5323bb3ce8
commit f27a7853a3
No known key found for this signature in database
GPG Key ID: 1AD5CE7CCAEBDA21
2 changed files with 25 additions and 7 deletions

View File

@ -5,6 +5,7 @@ struct Background {
default: image::Handle,
hover: image::Handle,
press: image::Handle,
hover_checked: image::Handle,
}
impl Background {
@ -13,6 +14,7 @@ impl Background {
default: image,
hover: image,
press: image,
hover_checked: image,
}
}
}
@ -53,13 +55,28 @@ impl Style {
self
}
pub fn pressed(&self) -> Option<image::Handle> { self.background.as_ref().map(|b| b.press) }
pub fn hover_checked_image(mut self, image: image::Handle) -> Self {
self.background = Some(match self.background {
Some(mut background) => {
background.hover_checked = image;
background
},
None => Background::new(image),
});
self
}
pub fn checked(&self) -> Option<image::Handle> { self.checked }
pub fn hovered(&self) -> Option<image::Handle> { self.background.as_ref().map(|b| b.hover) }
pub fn bg_check(&self) -> Option<image::Handle> { self.background.as_ref().map(|b| b.press) }
pub fn background(&self) -> Option<image::Handle> {
pub fn bg_hover(&self) -> Option<image::Handle> { self.background.as_ref().map(|b| b.hover) }
pub fn bg_hover_check(&self) -> Option<image::Handle> {
self.background.as_ref().map(|b| b.hover_checked)
}
pub fn bg_default(&self) -> Option<image::Handle> {
self.background.as_ref().map(|b| b.default)
}
}

View File

@ -22,9 +22,10 @@ impl checkbox::Renderer for IcedRenderer {
};
let background_image = match (is_checked, is_mouse_over) {
(true, _) => style.pressed(),
(_, true) => style.hovered(),
_ => style.background(),
(true, true) => style.bg_hover_check(),
(true, false) => style.bg_check(),
(false, true) => style.bg_hover(),
(false, false) => style.bg_default(),
};
let background = background_image
@ -40,7 +41,7 @@ impl checkbox::Renderer for IcedRenderer {
Primitive::Group {
primitives: if is_checked {
let check = style
.pressed()
.checked()
.map(|image| Primitive::Image {
handle: (image, Rotation::None),
bounds,