It's difficult to make iterative developments when there's two nearly-identical types that need to be kept synchronized to any change. Rust gives us traits so we should use them instead of duplicating code. This made it easier to make styling and layout improvements to both instances of the segmented button.
60 lines
2.2 KiB
Rust
60 lines
2.2 KiB
Rust
// Copyright 2022 System76 <info@system76.com>
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
use super::{HorizontalSegmentedButton, SegmentedButton, State, VerticalSegmentedButton};
|
|
|
|
/// Appears as a collection of tabs for developing a tabbed interface.
|
|
///
|
|
/// The data for the widget comes from a [`State`] that is maintained the application.
|
|
#[must_use]
|
|
pub fn horizontal_view_switcher<Message, Data>(
|
|
state: &State<Data>,
|
|
) -> HorizontalSegmentedButton<Message, crate::Renderer> {
|
|
SegmentedButton::new(&state.inner)
|
|
.button_padding([16, 0, 16, 0])
|
|
.button_height(48)
|
|
.style(crate::theme::SegmentedButton::ViewSwitcher)
|
|
.font_active(crate::font::FONT_SEMIBOLD)
|
|
}
|
|
|
|
/// Appears as a selection of choices for choosing between.
|
|
///
|
|
/// The data for the widget comes from a [`State`] that is maintained the application.
|
|
#[must_use]
|
|
pub fn horizontal_segmented_selection<Message, Data>(
|
|
state: &State<Data>,
|
|
) -> HorizontalSegmentedButton<Message, crate::Renderer> {
|
|
SegmentedButton::new(&state.inner)
|
|
.button_padding([16, 0, 16, 0])
|
|
.button_height(32)
|
|
.style(crate::theme::SegmentedButton::Selection)
|
|
.font_active(crate::font::FONT_SEMIBOLD)
|
|
}
|
|
|
|
/// Appears as a selection of choices for choosing between.
|
|
///
|
|
/// The data for the widget comes from a [`State`] that is maintained the application.
|
|
#[must_use]
|
|
pub fn vertical_segmented_selection<Message, Data>(
|
|
state: &State<Data>,
|
|
) -> VerticalSegmentedButton<Message, crate::Renderer> {
|
|
SegmentedButton::new(&state.inner)
|
|
.button_padding([16, 0, 16, 0])
|
|
.button_height(32)
|
|
.style(crate::theme::SegmentedButton::Selection)
|
|
.font_active(crate::font::FONT_SEMIBOLD)
|
|
}
|
|
|
|
/// Appears as a collection of tabs for developing a tabbed interface.
|
|
///
|
|
/// The data for the widget comes from a [`State`] that is maintained the application.
|
|
#[must_use]
|
|
pub fn vertical_view_switcher<Message, Data>(
|
|
state: &State<Data>,
|
|
) -> VerticalSegmentedButton<Message, crate::Renderer> {
|
|
SegmentedButton::new(&state.inner)
|
|
.button_padding([16, 0, 16, 0])
|
|
.button_height(48)
|
|
.style(crate::theme::SegmentedButton::ViewSwitcher)
|
|
.font_active(crate::font::FONT_SEMIBOLD)
|
|
}
|