From 0e89facb538a6ddd6890f2516f6d33059e7b3483 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Tue, 28 Sep 2021 09:42:04 +0200 Subject: [PATCH] Allow linear values for text edges --- src/font.rs | 37 +++++++++++++++++++++---------------- src/layout/shaping.rs | 4 ++-- src/library/mod.rs | 9 ++++++--- tests/ref/text/font.png | Bin 22712 -> 24650 bytes tests/typ/text/font.typ | 2 ++ 5 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/font.rs b/src/font.rs index 7113026be..8519d4501 100644 --- a/src/font.rs +++ b/src/font.rs @@ -8,7 +8,7 @@ use std::rc::Rc; use serde::{Deserialize, Serialize}; use ttf_parser::{name_id, GlyphId, PlatformId}; -use crate::geom::Em; +use crate::geom::{Em, Length, Linear}; use crate::loading::{FileHash, Loader}; use crate::util::decode_mac_roman; @@ -269,20 +269,21 @@ impl Face { .map(|units| self.to_em(units)) } - /// Look up a vertical metric. - pub fn vertical_metric(&self, metric: VerticalFontMetric) -> Em { + /// Look up a vertical metric at the given font size. + pub fn vertical_metric(&self, metric: VerticalFontMetric, size: Length) -> Length { match metric { - VerticalFontMetric::Ascender => self.ascender, - VerticalFontMetric::CapHeight => self.cap_height, - VerticalFontMetric::XHeight => self.x_height, - VerticalFontMetric::Baseline => Em::zero(), - VerticalFontMetric::Descender => self.descender, + VerticalFontMetric::Ascender => self.ascender.to_length(size), + VerticalFontMetric::CapHeight => self.cap_height.to_length(size), + VerticalFontMetric::XHeight => self.x_height.to_length(size), + VerticalFontMetric::Baseline => Length::zero(), + VerticalFontMetric::Descender => self.descender.to_length(size), + VerticalFontMetric::Linear(v) => v.resolve(size), } } } /// Identifies a vertical metric of a font. -#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[derive(Copy, Clone, Eq, PartialEq, Hash)] pub enum VerticalFontMetric { /// The distance from the baseline to the typographic ascender. /// @@ -300,17 +301,21 @@ pub enum VerticalFontMetric { /// Corresponds to the typographic descender from the `OS/2` table if /// present and falls back to the descender from the `hhea` table otherwise. Descender, + /// An font-size dependent distance from the baseline (positive goes up, negative + /// down). + Linear(Linear), } impl Debug for VerticalFontMetric { fn fmt(&self, f: &mut Formatter) -> fmt::Result { - f.pad(match self { - Self::Ascender => "ascender", - Self::CapHeight => "cap-height", - Self::XHeight => "x-height", - Self::Baseline => "baseline", - Self::Descender => "descender", - }) + match self { + Self::Ascender => f.pad("ascender"), + Self::CapHeight => f.pad("cap-height"), + Self::XHeight => f.pad("x-height"), + Self::Baseline => f.pad("baseline"), + Self::Descender => f.pad("descender"), + Self::Linear(v) => v.fmt(f), + } } } diff --git a/src/layout/shaping.rs b/src/layout/shaping.rs index eebeacbf7..dc6802765 100644 --- a/src/layout/shaping.rs +++ b/src/layout/shaping.rs @@ -342,8 +342,8 @@ fn measure( // Expand top and bottom by reading the face's vertical metrics. let mut expand = |face: &Face| { - top.set_max(face.vertical_metric(state.top_edge).to_length(state.size)); - bottom.set_max(-face.vertical_metric(state.bottom_edge).to_length(state.size)); + top.set_max(face.vertical_metric(state.top_edge, state.size)); + bottom.set_max(-face.vertical_metric(state.bottom_edge, state.size)); }; if glyphs.is_empty() { diff --git a/src/library/mod.rs b/src/library/mod.rs index c42b82d61..13c8fd5c5 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -127,16 +127,19 @@ dynamic! { dynamic! { FontWeight: "font weight", - Value::Int(number) => { - u16::try_from(number).map_or(Self::BLACK, Self::from_number) + Value::Int(v) => { + u16::try_from(v).map_or(Self::BLACK, Self::from_number) }, } dynamic! { FontStretch: "font stretch", - Value::Relative(relative) => Self::from_ratio(relative.get() as f32), + Value::Relative(v) => Self::from_ratio(v.get() as f32), } dynamic! { VerticalFontMetric: "vertical font metric", + Value::Length(v) => Self::Linear(v.into()), + Value::Relative(v) => Self::Linear(v.into()), + Value::Linear(v) => Self::Linear(v), } diff --git a/tests/ref/text/font.png b/tests/ref/text/font.png index b8e0775a61afffabc82a9507f585cdc16eec6297..2dfab87040009cb85efbff89ba89b0eb47c061d0 100644 GIT binary patch literal 24650 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 literal 22712 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 diff --git a/tests/typ/text/font.typ b/tests/typ/text/font.typ index 98643565e..6457f7a7c 100644 --- a/tests/typ/text/font.typ +++ b/tests/typ/text/font.typ @@ -58,6 +58,8 @@ Emoji: 🐪, 🌋, 🏞 #try(ascender, baseline) #try(cap-height, baseline) #try(x-height, baseline) +#try(4pt, -2pt) +#try(1pt + 27%, -18%) --- // Error: 7-12 unexpected argument