summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Billy Messenger <BillyDM@protonmail.com>2020-08-13 12:54:34 -0500
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-08-22 21:23:27 +0200
commit8d68c8584ea99d3974571cd92edcb31999ebb8fa (patch)
tree9aae5f2667bc60a8fe6c54440a9212ae1e63687b /graphics
parent00d66da0cee1dc7faeccc5b3f0794a0393a38da7 (diff)
downloadiced-8d68c8584ea99d3974571cd92edcb31999ebb8fa.tar.gz
iced-8d68c8584ea99d3974571cd92edcb31999ebb8fa.tar.bz2
iced-8d68c8584ea99d3974571cd92edcb31999ebb8fa.zip
widget Rule added
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/widget.rs3
-rw-r--r--graphics/src/widget/rule.rs89
2 files changed, 92 insertions, 0 deletions
diff --git a/graphics/src/widget.rs b/graphics/src/widget.rs
index 94a65011..f87b558a 100644
--- a/graphics/src/widget.rs
+++ b/graphics/src/widget.rs
@@ -15,6 +15,7 @@ pub mod pane_grid;
pub mod pick_list;
pub mod progress_bar;
pub mod radio;
+pub mod rule;
pub mod scrollable;
pub mod slider;
pub mod svg;
@@ -40,6 +41,8 @@ pub use progress_bar::ProgressBar;
#[doc(no_inline)]
pub use radio::Radio;
#[doc(no_inline)]
+pub use rule::Rule;
+#[doc(no_inline)]
pub use scrollable::Scrollable;
#[doc(no_inline)]
pub use slider::Slider;
diff --git a/graphics/src/widget/rule.rs b/graphics/src/widget/rule.rs
new file mode 100644
index 00000000..5ff5197d
--- /dev/null
+++ b/graphics/src/widget/rule.rs
@@ -0,0 +1,89 @@
+//! Display a horizontal or vertical rule for dividing content.
+
+use crate::{Backend, Primitive, Renderer};
+use iced_native::mouse;
+use iced_native::rule;
+use iced_native::{Background, Color, Rectangle};
+
+pub use iced_style::rule::{Style, StyleSheet};
+
+/// Display a horizontal or vertical rule for dividing content.
+///
+/// This is an alias of an `iced_native` rule with an `iced_graphics::Renderer`.
+pub type Rule<Backend> = iced_native::Rule<Renderer<Backend>>;
+
+impl<B> rule::Renderer for Renderer<B>
+where
+ B: Backend,
+{
+ type Style = Box<dyn StyleSheet>;
+
+ fn draw(
+ &mut self,
+ bounds: Rectangle,
+ style_sheet: &Self::Style,
+ is_horizontal: bool,
+ ) -> Self::Output {
+ let style = style_sheet.style();
+
+ let line = if is_horizontal {
+ let line_y = (bounds.y + (bounds.height / 2.0)
+ - (style.width as f32 / 2.0))
+ .round();
+
+ let (line_x, line_width) = if style.fill_percent >= 100 {
+ (bounds.x, bounds.width)
+ } else {
+ let percent_width =
+ (bounds.width * style.fill_percent as f32 / 100.0).round();
+ (
+ bounds.x + ((bounds.width - percent_width) / 2.0).round(),
+ percent_width,
+ )
+ };
+
+ Primitive::Quad {
+ bounds: Rectangle {
+ x: line_x,
+ y: line_y,
+ width: line_width,
+ height: style.width as f32,
+ },
+ background: Background::Color(style.color),
+ border_radius: style.radius,
+ border_width: 0,
+ border_color: Color::TRANSPARENT,
+ }
+ } else {
+ let line_x = (bounds.x + (bounds.width / 2.0)
+ - (style.width as f32 / 2.0))
+ .round();
+
+ let (line_y, line_height) = if style.fill_percent >= 100 {
+ (bounds.y, bounds.height)
+ } else {
+ let percent_height =
+ (bounds.height * style.fill_percent as f32 / 100.0).round();
+ (
+ bounds.y + ((bounds.height - percent_height) / 2.0).round(),
+ percent_height,
+ )
+ };
+
+ Primitive::Quad {
+ bounds: Rectangle {
+ x: line_x,
+ y: line_y,
+ width: style.width as f32,
+ height: line_height,
+ },
+ background: Background::Color(style.color),
+ border_radius: style.radius,
+ border_width: 0,
+ border_color: Color::TRANSPARENT,
+ }
+ };
+
+ (line, mouse::Interaction::default())
+ }
+}