summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar hicaru <lich666black@gmail.com>2023-12-12 14:02:15 +0500
committerLibravatar hicaru <lich666black@gmail.com>2023-12-12 14:02:15 +0500
commitb54f27d30deec672012c4a63c65d34641b40a9d5 (patch)
tree2f9871f54d80ea8d274ab319e4da8a19c21399d8
parentdd249a1d11c68b8fee1828d58bae158946ee2ebd (diff)
downloadiced-b54f27d30deec672012c4a63c65d34641b40a9d5.tar.gz
iced-b54f27d30deec672012c4a63c65d34641b40a9d5.tar.bz2
iced-b54f27d30deec672012c4a63c65d34641b40a9d5.zip
added svg hover, for styles impl
-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 47010728..4af07794 100644
--- a/style/src/theme.rs
+++ b/style/src/theme.rs
@@ -909,6 +909,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 {
@@ -917,6 +921,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 2d01d1ab..f9b16e1a 100644
--- a/widget/src/svg.rs
+++ b/widget/src/svg.rs
@@ -145,7 +145,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);
@@ -153,6 +153,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(
@@ -166,7 +167,11 @@ where
..bounds
};
- let appearance = theme.appearance(&self.style);
+ let appearance = if is_mouse_over {
+ theme.appearance(&self.style)
+ } else {
+ theme.hovered(&self.style)
+ };
renderer.draw(
self.handle.clone(),