feat(segmented-button): manually-definable icon colors
This commit is contained in:
parent
4fa61eeafd
commit
75e80857e2
5 changed files with 53 additions and 6 deletions
|
|
@ -1,6 +1,7 @@
|
|||
// Copyright 2023 System76 <info@system76.com>
|
||||
// SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
use iced::Color;
|
||||
use slotmap::{SecondaryMap, SparseSecondaryMap};
|
||||
|
||||
use super::{Entity, Model, Selectable};
|
||||
|
|
@ -108,6 +109,13 @@ where
|
|||
self
|
||||
}
|
||||
|
||||
/// Defines the color of an icon.
|
||||
#[allow(clippy::must_use_candidate, clippy::return_self_not_must_use)]
|
||||
pub fn icon_color(mut self, icon: Option<Color>) -> Self {
|
||||
self.model.0.icon_color_set(self.id, icon);
|
||||
self
|
||||
}
|
||||
|
||||
/// Define the position of the newly-inserted item.
|
||||
#[allow(clippy::must_use_candidate, clippy::return_self_not_must_use)]
|
||||
pub fn position(mut self, position: u16) -> Self {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
use std::borrow::Cow;
|
||||
|
||||
use iced::Color;
|
||||
use slotmap::{SecondaryMap, SparseSecondaryMap};
|
||||
|
||||
use crate::widget::IconSource;
|
||||
|
|
@ -94,6 +95,13 @@ where
|
|||
self
|
||||
}
|
||||
|
||||
/// Define the color for the icon.
|
||||
#[allow(clippy::must_use_candidate, clippy::return_self_not_must_use)]
|
||||
pub fn icon_color(self, icon: Option<Color>) -> Self {
|
||||
self.model.icon_color_set(self.id, icon);
|
||||
self
|
||||
}
|
||||
|
||||
/// Returns the ID of the item that was inserted.
|
||||
///
|
||||
/// ```ignore
|
||||
|
|
|
|||
|
|
@ -11,11 +11,14 @@ mod selection;
|
|||
pub use self::selection::{MultiSelect, Selectable, SingleSelect};
|
||||
|
||||
use crate::widget::IconSource;
|
||||
use iced::Color;
|
||||
use slotmap::{SecondaryMap, SlotMap};
|
||||
use std::any::{Any, TypeId};
|
||||
use std::borrow::Cow;
|
||||
use std::collections::{HashMap, VecDeque};
|
||||
|
||||
use super::IconColor;
|
||||
|
||||
slotmap::new_key_type! {
|
||||
/// A unique ID for an item in the [`Model`].
|
||||
pub struct Entity;
|
||||
|
|
@ -244,6 +247,24 @@ where
|
|||
self.icons.insert(id, icon.into())
|
||||
}
|
||||
|
||||
/// Sets the color of the icon. By default, the color matches the text.
|
||||
pub fn icon_color_set(&mut self, id: Entity, color: Option<Color>) {
|
||||
if self.contains_item(id) {
|
||||
self.data_set(
|
||||
id,
|
||||
match color {
|
||||
Some(color) => IconColor::Color(color),
|
||||
None => IconColor::None,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// Unsets the defined color of an icon.
|
||||
pub fn icon_color_remove(&mut self, id: Entity) {
|
||||
self.data_remove::<IconColor>(id);
|
||||
}
|
||||
|
||||
/// Removes the icon from an item.
|
||||
///
|
||||
/// ```ignore
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue