diff options
author | 2023-03-30 02:01:20 +0200 | |
---|---|---|
committer | 2023-03-30 02:01:20 +0200 | |
commit | 0b459c8e240abf83bb62902a504c018194acdbb6 (patch) | |
tree | 0b53bd1beae76465d6a5b5659a46b059d1dd14c3 | |
parent | 707de9d788dc3c49d4ac57a19afac1bb938b78d9 (diff) | |
download | iced-0b459c8e240abf83bb62902a504c018194acdbb6.tar.gz iced-0b459c8e240abf83bb62902a504c018194acdbb6.tar.bz2 iced-0b459c8e240abf83bb62902a504c018194acdbb6.zip |
Introduce `font::Stretch`
-rw-r--r-- | core/src/font.rs | 19 | ||||
-rw-r--r-- | tiny_skia/src/text.rs | 15 | ||||
-rw-r--r-- | wgpu/src/text.rs | 15 |
3 files changed, 49 insertions, 0 deletions
diff --git a/core/src/font.rs b/core/src/font.rs index 920b3dd5..bb425fd6 100644 --- a/core/src/font.rs +++ b/core/src/font.rs @@ -8,6 +8,8 @@ pub struct Font { pub family: Family, /// The [`Weight`] of the [`Font`]. pub weight: Weight, + /// The [`Stretch`] of the [`Font`]. + pub stretch: Stretch, /// Whether if the [`Font`] is monospaced or not. pub monospaced: bool, } @@ -17,6 +19,7 @@ impl Font { pub const DEFAULT: Font = Font { family: Family::SansSerif, weight: Weight::Normal, + stretch: Stretch::Normal, monospaced: false, }; @@ -81,3 +84,19 @@ pub enum Weight { ExtraBold, Black, } + +/// The width of some text. +#[allow(missing_docs)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +pub enum Stretch { + UltraCondensed, + ExtraCondensed, + Condensed, + SemiCondensed, + #[default] + Normal, + SemiExpanded, + Expanded, + ExtraExpanded, + UltraExpanded, +} diff --git a/tiny_skia/src/text.rs b/tiny_skia/src/text.rs index c9bb9873..865132b4 100644 --- a/tiny_skia/src/text.rs +++ b/tiny_skia/src/text.rs @@ -209,6 +209,20 @@ fn to_weight(weight: font::Weight) -> cosmic_text::Weight { } } +fn to_stretch(stretch: font::Stretch) -> cosmic_text::Stretch { + match stretch { + font::Stretch::UltraCondensed => cosmic_text::Stretch::UltraCondensed, + font::Stretch::ExtraCondensed => cosmic_text::Stretch::ExtraCondensed, + font::Stretch::Condensed => cosmic_text::Stretch::Condensed, + font::Stretch::SemiCondensed => cosmic_text::Stretch::SemiCondensed, + font::Stretch::Normal => cosmic_text::Stretch::Normal, + font::Stretch::SemiExpanded => cosmic_text::Stretch::SemiExpanded, + font::Stretch::Expanded => cosmic_text::Stretch::Expanded, + font::Stretch::ExtraExpanded => cosmic_text::Stretch::ExtraExpanded, + font::Stretch::UltraExpanded => cosmic_text::Stretch::UltraExpanded, + } +} + #[derive(Debug, Clone, Default)] struct GlyphCache { entries: FxHashMap< @@ -371,6 +385,7 @@ impl Cache { cosmic_text::Attrs::new() .family(to_family(key.font.family)) .weight(to_weight(key.font.weight)) + .stretch(to_stretch(key.font.stretch)) .monospaced( key.font.monospaced || matches!( diff --git a/wgpu/src/text.rs b/wgpu/src/text.rs index b0b7a198..dd674279 100644 --- a/wgpu/src/text.rs +++ b/wgpu/src/text.rs @@ -288,6 +288,20 @@ fn to_weight(weight: font::Weight) -> glyphon::Weight { } } +fn to_stretch(stretch: font::Stretch) -> glyphon::Stretch { + match stretch { + font::Stretch::UltraCondensed => glyphon::Stretch::UltraCondensed, + font::Stretch::ExtraCondensed => glyphon::Stretch::ExtraCondensed, + font::Stretch::Condensed => glyphon::Stretch::Condensed, + font::Stretch::SemiCondensed => glyphon::Stretch::SemiCondensed, + font::Stretch::Normal => glyphon::Stretch::Normal, + font::Stretch::SemiExpanded => glyphon::Stretch::SemiExpanded, + font::Stretch::Expanded => glyphon::Stretch::Expanded, + font::Stretch::ExtraExpanded => glyphon::Stretch::ExtraExpanded, + font::Stretch::UltraExpanded => glyphon::Stretch::UltraExpanded, + } +} + struct Cache { entries: FxHashMap<KeyHash, glyphon::Buffer>, recently_used: FxHashSet<KeyHash>, @@ -345,6 +359,7 @@ impl Cache { glyphon::Attrs::new() .family(to_family(key.font.family)) .weight(to_weight(key.font.weight)) + .stretch(to_stretch(key.font.stretch)) .monospaced( key.font.monospaced || matches!( |