summaryrefslogtreecommitdiffstats
path: root/graphics
diff options
context:
space:
mode:
authorLibravatar Billy Messenger <BillyDM@protonmail.com>2020-08-16 10:10:32 -0500
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-08-22 21:23:44 +0200
commit32561bd85c6db0d7e6d9d12c87b87f4b50f1d43f (patch)
tree150327574c8f50cda3c90413edd8c6ebbb51c40d /graphics
parent8d68c8584ea99d3974571cd92edcb31999ebb8fa (diff)
downloadiced-32561bd85c6db0d7e6d9d12c87b87f4b50f1d43f.tar.gz
iced-32561bd85c6db0d7e6d9d12c87b87f4b50f1d43f.tar.bz2
iced-32561bd85c6db0d7e6d9d12c87b87f4b50f1d43f.zip
added FillMode enum style for the Rule widget
Diffstat (limited to 'graphics')
-rw-r--r--graphics/src/widget/rule.rs101
1 files changed, 82 insertions, 19 deletions
diff --git a/graphics/src/widget/rule.rs b/graphics/src/widget/rule.rs
index 5ff5197d..e058dffe 100644
--- a/graphics/src/widget/rule.rs
+++ b/graphics/src/widget/rule.rs
@@ -5,7 +5,7 @@ use iced_native::mouse;
use iced_native::rule;
use iced_native::{Background, Color, Rectangle};
-pub use iced_style::rule::{Style, StyleSheet};
+pub use iced_style::rule::{FillMode, Style, StyleSheet};
/// Display a horizontal or vertical rule for dividing content.
///
@@ -31,15 +31,46 @@ where
- (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,
- )
+ let (line_x, line_width) = match style.fill_mode {
+ FillMode::Full => (bounds.x, bounds.width),
+ FillMode::Percent(percent) => {
+ if percent >= 100.0 {
+ (bounds.x, bounds.width)
+ } else {
+ let percent_width =
+ (bounds.width * percent / 100.0).round();
+
+ (
+ bounds.x
+ + ((bounds.width - percent_width) / 2.0)
+ .round(),
+ percent_width,
+ )
+ }
+ }
+ FillMode::Padded(padding) => {
+ if padding == 0 {
+ (bounds.x, bounds.width)
+ } else {
+ let padding = padding as f32;
+ let mut line_width = bounds.width - (padding * 2.0);
+ if line_width < 0.0 {
+ line_width = 0.0;
+ }
+
+ (bounds.x + padding, line_width)
+ }
+ }
+ FillMode::AsymmetricPadding(first_pad, second_pad) => {
+ let first_pad = first_pad as f32;
+ let second_pad = second_pad as f32;
+ let mut line_width = bounds.width - first_pad - second_pad;
+ if line_width < 0.0 {
+ line_width = 0.0;
+ }
+
+ (bounds.x + first_pad, line_width)
+ }
};
Primitive::Quad {
@@ -59,15 +90,47 @@ where
- (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,
- )
+ let (line_y, line_height) = match style.fill_mode {
+ FillMode::Full => (bounds.y, bounds.height),
+ FillMode::Percent(percent) => {
+ if percent >= 100.0 {
+ (bounds.y, bounds.height)
+ } else {
+ let percent_height =
+ (bounds.height * percent / 100.0).round();
+
+ (
+ bounds.y
+ + ((bounds.height - percent_height) / 2.0)
+ .round(),
+ percent_height,
+ )
+ }
+ }
+ FillMode::Padded(padding) => {
+ if padding == 0 {
+ (bounds.y, bounds.height)
+ } else {
+ let padding = padding as f32;
+ let mut line_height = bounds.height - (padding * 2.0);
+ if line_height < 0.0 {
+ line_height = 0.0;
+ }
+
+ (bounds.y + padding, line_height)
+ }
+ }
+ FillMode::AsymmetricPadding(first_pad, second_pad) => {
+ let first_pad = first_pad as f32;
+ let second_pad = second_pad as f32;
+ let mut line_height =
+ bounds.height - first_pad - second_pad;
+ if line_height < 0.0 {
+ line_height = 0.0;
+ }
+
+ (bounds.y + first_pad, line_height)
+ }
};
Primitive::Quad {