summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-03-30 02:01:20 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-03-30 02:01:20 +0200
commit0b459c8e240abf83bb62902a504c018194acdbb6 (patch)
tree0b53bd1beae76465d6a5b5659a46b059d1dd14c3
parent707de9d788dc3c49d4ac57a19afac1bb938b78d9 (diff)
downloadiced-0b459c8e240abf83bb62902a504c018194acdbb6.tar.gz
iced-0b459c8e240abf83bb62902a504c018194acdbb6.tar.bz2
iced-0b459c8e240abf83bb62902a504c018194acdbb6.zip
Introduce `font::Stretch`
-rw-r--r--core/src/font.rs19
-rw-r--r--tiny_skia/src/text.rs15
-rw-r--r--wgpu/src/text.rs15
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!(