feat(divider): add functions for divider style variants of a Rule

This commit is contained in:
Michael Aaron Murphy 2023-01-24 21:13:50 +01:00 committed by Michael Murphy
parent b3a3c9c29a
commit 9a095e4d94
4 changed files with 42 additions and 32 deletions

View file

@ -652,6 +652,8 @@ impl progress_bar::StyleSheet for Theme {
#[derive(Clone, Copy)]
pub enum Rule {
Default,
LightDivider,
HeavyDivider,
Custom(fn(&Theme) -> rule::Appearance),
}
@ -674,6 +676,24 @@ impl rule::StyleSheet for Theme {
radius: 0.0,
fill_mode: rule::FillMode::Full,
},
Rule::LightDivider => {
let cosmic = &self.cosmic().primary;
rule::Appearance {
color: cosmic.divider.into(),
width: 1,
radius: 0.0,
fill_mode: rule::FillMode::Padded(10),
}
}
Rule::HeavyDivider => {
let cosmic = &self.cosmic().primary;
rule::Appearance {
color: cosmic.divider.into(),
width: 4,
radius: 4.0,
fill_mode: rule::FillMode::Full,
}
}
Rule::Custom(f) => f(self),
}
}

View file

@ -1,8 +1,7 @@
// Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use crate::widget::horizontal_rule;
use crate::{theme, Element};
use crate::{theme, widget::divider, Element};
use apply::Apply;
use iced::{Background, Color};
@ -33,7 +32,7 @@ impl<'a, Message: 'static> ListColumn<'a, Message> {
#[allow(clippy::should_implement_trait)]
pub fn add(mut self, item: impl Into<Element<'a, Message>>) -> Self {
if !self.children.is_empty() {
self.children.push(horizontal_rule(10).into());
self.children.push(divider::horizontal::light().into());
}
self.children.push(item.into());

View file

@ -40,9 +40,6 @@ pub use scrollable::*;
mod text;
pub use text::{text, Text};
pub mod separator;
pub use separator::{horizontal_rule, vertical_rule};
pub mod spin_button;
pub use spin_button::{spin_button, SpinButton};
@ -56,3 +53,23 @@ pub use view_switcher::vertical as vertical_view_switcher;
pub mod warning;
pub use warning::*;
/// An element to distinguish a boundary between two elements.
pub mod divider {
/// Horizontal variant of a divider.
pub mod horizontal {
use iced::widget::{horizontal_rule, Rule};
/// Horizontal divider with light thickness
#[must_use]
pub fn light() -> Rule<crate::Renderer> {
horizontal_rule(4).style(crate::theme::Rule::LightDivider)
}
/// Horizontal divider with heavy thickness.
#[must_use]
pub fn heavy() -> Rule<crate::Renderer> {
horizontal_rule(10).style(crate::theme::Rule::HeavyDivider)
}
}
}

View file

@ -1,26 +0,0 @@
// Copyright 2022 System76 <info@system76.com>
// SPDX-License-Identifier: MPL-2.0
use crate::iced::widget;
use crate::{theme, Renderer, Theme};
#[must_use]
pub fn horizontal_rule(size: u16) -> widget::Rule<Renderer> {
widget::horizontal_rule(size).style(theme::Rule::Custom(separator_style))
}
#[must_use]
pub fn vertical_rule(size: u16) -> widget::Rule<Renderer> {
widget::vertical_rule(size).style(theme::Rule::Custom(separator_style))
}
#[allow(clippy::trivially_copy_pass_by_ref)]
fn separator_style(theme: &Theme) -> widget::rule::Appearance {
let cosmic = &theme.cosmic().primary;
widget::rule::Appearance {
color: cosmic.divider.into(),
width: 1,
radius: 0.0,
fill_mode: widget::rule::FillMode::Padded(10),
}
}