summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--style/src/svg.rs3
-rw-r--r--style/src/theme.rs8
-rw-r--r--widget/src/svg.rs9
3 files changed, 18 insertions, 2 deletions
diff --git a/style/src/svg.rs b/style/src/svg.rs
index 9378c1a7..5053f9f8 100644
--- a/style/src/svg.rs
+++ b/style/src/svg.rs
@@ -20,4 +20,7 @@ pub trait StyleSheet {
/// Produces the [`Appearance`] of the svg.
fn appearance(&self, style: &Self::Style) -> Appearance;
+
+ /// Produces the hovered [`Appearance`] of a svg content.
+ fn hovered(&self, style: &Self::Style) -> Appearance;
}
diff --git a/style/src/theme.rs b/style/src/theme.rs
index deccf455..f78587e5 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -939,6 +939,10 @@ impl svg::StyleSheet for Theme {
Svg::Custom(custom) => custom.appearance(self),
}
}
+
+ fn hovered(&self, style: &Self::Style) -> svg::Appearance {
+ self.appearance(style)
+ }
}
impl svg::StyleSheet for fn(&Theme) -> svg::Appearance {
@@ -947,6 +951,10 @@ impl svg::StyleSheet for fn(&Theme) -> svg::Appearance {
fn appearance(&self, style: &Self::Style) -> svg::Appearance {
(self)(style)
}
+
+ fn hovered(&self, style: &Self::Style) -> svg::Appearance {
+ self.appearance(style)
+ }
}
/// The style of a scrollable.
diff --git a/widget/src/svg.rs b/widget/src/svg.rs
index 830abb0f..2357cf65 100644
--- a/widget/src/svg.rs
+++ b/widget/src/svg.rs
@@ -141,7 +141,7 @@ where
theme: &Renderer::Theme,
_style: &renderer::Style,
layout: Layout<'_>,
- _cursor: mouse::Cursor,
+ cursor: mouse::Cursor,
_viewport: &Rectangle,
) {
let Size { width, height } = renderer.dimensions(&self.handle);
@@ -149,6 +149,7 @@ where
let bounds = layout.bounds();
let adjusted_fit = self.content_fit.fit(image_size, bounds.size());
+ let is_mouse_over = cursor.is_over(bounds);
let render = |renderer: &mut Renderer| {
let offset = Vector::new(
@@ -162,7 +163,11 @@ where
..bounds
};
- let appearance = theme.appearance(&self.style);
+ let appearance = if is_mouse_over {
+ theme.hovered(&self.style)
+ } else {
+ theme.appearance(&self.style)
+ };
renderer.draw(
self.handle.clone(),