From 07c64bc14c082afe6c04ca2376f2202cbce3f4e8 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 27 Apr 2023 15:36:45 -0700 Subject: [PATCH] Do not require `Copy` for text `StyleSheet::Style` For most widgets, `Style` only requires `Default`. A few require `Clone`. Only this one requires `Copy`. Some of the types in the default theme has a custom variant requiring `Box`, or `Rc` to provide `Clone`, but this isn't possible if `Copy` is required. It would be good to also address the inconsistency of requiring `Clone` in some places and not others. This removes `style/src/text.rs` which is unused in this branch and thus confusing. If there's a reason to keep it, that can be removed from the change. --- core/src/widget/text.rs | 6 +++--- style/src/text.rs | 20 -------------------- style/src/theme.rs | 2 +- 3 files changed, 4 insertions(+), 24 deletions(-) delete mode 100644 style/src/text.rs diff --git a/core/src/widget/text.rs b/core/src/widget/text.rs index 485bb54209..3193ba84f0 100644 --- a/core/src/widget/text.rs +++ b/core/src/widget/text.rs @@ -153,7 +153,7 @@ where &self.content, self.size, self.font, - theme.appearance(self.style), + theme.appearance(self.style.clone()), self.horizontal_alignment, self.vertical_alignment, ); @@ -233,7 +233,7 @@ where horizontal_alignment: self.horizontal_alignment, vertical_alignment: self.vertical_alignment, font: self.font, - style: self.style, + style: self.style.clone(), } } } @@ -261,7 +261,7 @@ where /// The style sheet of some text. pub trait StyleSheet { /// The supported style of the [`StyleSheet`]. - type Style: Default + Copy; + type Style: Default + Clone; /// Produces the [`Appearance`] of some text. fn appearance(&self, style: Self::Style) -> Appearance; diff --git a/style/src/text.rs b/style/src/text.rs deleted file mode 100644 index d5a16bef62..0000000000 --- a/style/src/text.rs +++ /dev/null @@ -1,20 +0,0 @@ -//! Change the appearance of text. -use crate::core::Color; - -/// The style sheet of some text. -pub trait StyleSheet { - /// The supported style of the [`StyleSheet`]. - type Style: Default + Copy; - - /// Produces the [`Appearance`] of some text. - fn appearance(&self, style: Self::Style) -> Appearance; -} - -/// The apperance of some text. -#[derive(Debug, Clone, Copy, Default)] -pub struct Appearance { - /// The [`Color`] of the text. - /// - /// The default, `None`, means using the inherited color. - pub color: Option, -} diff --git a/style/src/theme.rs b/style/src/theme.rs index d9893bcfa0..d67dd4bb00 100644 --- a/style/src/theme.rs +++ b/style/src/theme.rs @@ -980,7 +980,7 @@ impl scrollable::StyleSheet for Theme { } /// The style of text. -#[derive(Clone, Copy, Default)] +#[derive(Clone, Default)] pub enum Text { /// The default style. #[default]