added FillMode enum style for the Rule widget
This commit is contained in:
parent
8d68c8584e
commit
32561bd85c
@ -537,7 +537,7 @@ mod style {
|
|||||||
color: SURFACE,
|
color: SURFACE,
|
||||||
width: 2,
|
width: 2,
|
||||||
radius: 1,
|
radius: 1,
|
||||||
fill_percent: 90,
|
fill_mode: rule::FillMode::Padded(15),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use crate::Renderer;
|
use crate::Renderer;
|
||||||
|
|
||||||
pub use iced_graphics::rule::{Style, StyleSheet};
|
pub use iced_graphics::rule::{FillMode, Style, StyleSheet};
|
||||||
|
|
||||||
/// Display a horizontal or vertical rule for dividing content.
|
/// Display a horizontal or vertical rule for dividing content.
|
||||||
///
|
///
|
||||||
|
@ -5,7 +5,7 @@ use iced_native::mouse;
|
|||||||
use iced_native::rule;
|
use iced_native::rule;
|
||||||
use iced_native::{Background, Color, Rectangle};
|
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.
|
/// Display a horizontal or vertical rule for dividing content.
|
||||||
///
|
///
|
||||||
@ -31,15 +31,46 @@ where
|
|||||||
- (style.width as f32 / 2.0))
|
- (style.width as f32 / 2.0))
|
||||||
.round();
|
.round();
|
||||||
|
|
||||||
let (line_x, line_width) = if style.fill_percent >= 100 {
|
let (line_x, line_width) = match style.fill_mode {
|
||||||
(bounds.x, bounds.width)
|
FillMode::Full => (bounds.x, bounds.width),
|
||||||
} else {
|
FillMode::Percent(percent) => {
|
||||||
let percent_width =
|
if percent >= 100.0 {
|
||||||
(bounds.width * style.fill_percent as f32 / 100.0).round();
|
(bounds.x, bounds.width)
|
||||||
(
|
} else {
|
||||||
bounds.x + ((bounds.width - percent_width) / 2.0).round(),
|
let percent_width =
|
||||||
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 {
|
Primitive::Quad {
|
||||||
@ -59,15 +90,47 @@ where
|
|||||||
- (style.width as f32 / 2.0))
|
- (style.width as f32 / 2.0))
|
||||||
.round();
|
.round();
|
||||||
|
|
||||||
let (line_y, line_height) = if style.fill_percent >= 100 {
|
let (line_y, line_height) = match style.fill_mode {
|
||||||
(bounds.y, bounds.height)
|
FillMode::Full => (bounds.y, bounds.height),
|
||||||
} else {
|
FillMode::Percent(percent) => {
|
||||||
let percent_height =
|
if percent >= 100.0 {
|
||||||
(bounds.height * style.fill_percent as f32 / 100.0).round();
|
(bounds.y, bounds.height)
|
||||||
(
|
} else {
|
||||||
bounds.y + ((bounds.height - percent_height) / 2.0).round(),
|
let percent_height =
|
||||||
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 {
|
Primitive::Quad {
|
||||||
|
@ -2,6 +2,23 @@
|
|||||||
|
|
||||||
use iced_core::Color;
|
use iced_core::Color;
|
||||||
|
|
||||||
|
/// The fill mode of a rule.
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub enum FillMode {
|
||||||
|
/// Fill the whole length of the container.
|
||||||
|
Full,
|
||||||
|
/// Fill a percent of the length of the container. The rule
|
||||||
|
/// will be centered in that container.
|
||||||
|
///
|
||||||
|
/// The range is `[0.0, 100.0]`.
|
||||||
|
Percent(f32),
|
||||||
|
/// Uniform offset from each end, length units.
|
||||||
|
Padded(u16),
|
||||||
|
/// Different offset on each end of the rule, length units.
|
||||||
|
/// First = top or left.
|
||||||
|
AsymmetricPadding(u16, u16),
|
||||||
|
}
|
||||||
|
|
||||||
/// The appearance of a rule.
|
/// The appearance of a rule.
|
||||||
#[derive(Debug, Clone, Copy)]
|
#[derive(Debug, Clone, Copy)]
|
||||||
pub struct Style {
|
pub struct Style {
|
||||||
@ -11,9 +28,10 @@ pub struct Style {
|
|||||||
pub width: u16,
|
pub width: u16,
|
||||||
/// The radius of the rectangle corners.
|
/// The radius of the rectangle corners.
|
||||||
pub radius: u16,
|
pub radius: u16,
|
||||||
/// The percent from [0, 100] of the filled space the rule
|
/// The [`FillMode`] of the rule.
|
||||||
/// will be drawn.
|
///
|
||||||
pub fill_percent: u16,
|
/// [`FillMode`]: enum.FillMode.html
|
||||||
|
pub fill_mode: FillMode,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A set of rules that dictate the style of a rule.
|
/// A set of rules that dictate the style of a rule.
|
||||||
@ -27,10 +45,10 @@ struct Default;
|
|||||||
impl StyleSheet for Default {
|
impl StyleSheet for Default {
|
||||||
fn style(&self) -> Style {
|
fn style(&self) -> Style {
|
||||||
Style {
|
Style {
|
||||||
color: [0.6, 0.6, 0.6, 0.49].into(),
|
color: [0.6, 0.6, 0.6, 0.51].into(),
|
||||||
width: 1,
|
width: 1,
|
||||||
radius: 0,
|
radius: 0,
|
||||||
fill_percent: 90,
|
fill_mode: FillMode::Percent(90.0),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use crate::Renderer;
|
use crate::Renderer;
|
||||||
|
|
||||||
pub use iced_graphics::rule::{Style, StyleSheet};
|
pub use iced_graphics::rule::{FillMode, Style, StyleSheet};
|
||||||
|
|
||||||
/// Display a horizontal or vertical rule for dividing content.
|
/// Display a horizontal or vertical rule for dividing content.
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user