diff options
author | 2023-12-12 14:02:15 +0500 | |
---|---|---|
committer | 2023-12-12 14:02:15 +0500 | |
commit | b54f27d30deec672012c4a63c65d34641b40a9d5 (patch) | |
tree | 2f9871f54d80ea8d274ab319e4da8a19c21399d8 | |
parent | dd249a1d11c68b8fee1828d58bae158946ee2ebd (diff) | |
download | iced-b54f27d30deec672012c4a63c65d34641b40a9d5.tar.gz iced-b54f27d30deec672012c4a63c65d34641b40a9d5.tar.bz2 iced-b54f27d30deec672012c4a63c65d34641b40a9d5.zip |
added svg hover, for styles impl
-rw-r--r-- | style/src/svg.rs | 3 | ||||
-rw-r--r-- | style/src/theme.rs | 8 | ||||
-rw-r--r-- | widget/src/svg.rs | 9 |
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(), |