Switch from name to ratio for font stretch parameter 📐

This commit is contained in:
Laurenz 2021-03-17 23:14:19 +01:00
parent 8cdfc7faaf
commit 49bb7f9a2b
3 changed files with 18 additions and 24 deletions

View File

@ -12,10 +12,10 @@ use super::*;
/// # Named arguments
/// - Font Style: `style`, of type `font-style`.
/// - Font Weight: `weight`, of type `font-weight`.
/// - Font Stretch: `stretch`, of type `font-stretch`.
/// - Serif family definition: `serif`, of type `font-families`.
/// - Sans-serif family definition: `sans-serif`, of type `font-families`.
/// - Monospace family definition: `monospace`, of type `font-families`.
/// - Font Stretch: `stretch`, of type `relative`, between 0.5 and 2.0.
///
/// # Relevant types and constants
/// - Type `font-families`
@ -42,16 +42,6 @@ use super::*;
/// - `extrabold` (800)
/// - `black` (900)
/// - coerces from `integer`
/// - Type `font-stretch`
/// - `ultra-condensed`
/// - `extra-condensed`
/// - `condensed`
/// - `semi-condensed`
/// - `normal`
/// - `semi-expanded`
/// - `expanded`
/// - `extra-expanded`
/// - `ultra-expanded`
pub fn font(ctx: &mut EvalContext, args: &mut ValueArgs) -> Value {
let size = args.find::<Linear>(ctx);
let list: Vec<_> = args.filter::<FontFamily>(ctx).map(|f| f.to_string()).collect();
@ -160,7 +150,7 @@ typify! {
}
typify! {
FontStyle: "font style"
FontStyle: "font style",
}
typify! {
@ -179,5 +169,15 @@ typify! {
}
typify! {
FontStretch: "font stretch"
FontStretch: "font stretch",
Value::Relative(relative) => {
let f = |stretch: Self| Relative::new(stretch.to_ratio());
let [min, max] = [f(Self::UltraCondensed), f(Self::UltraExpanded)];
let value = Self::from_ratio(relative.get());
return if relative < min || relative > max {
CastResult::Warn(value, format!("should be between {} and {}", min, max))
} else {
CastResult::Ok(value)
};
},
}

View File

@ -23,7 +23,7 @@ pub use spacing::*;
use std::fmt::{self, Display, Formatter};
use fontdock::{FontStretch, FontStyle, FontWeight};
use fontdock::{FontStyle, FontWeight};
use crate::eval::{Scope, ValueAny, ValueFunc};
use crate::exec::Softness;
@ -81,15 +81,6 @@ pub fn new() -> Scope {
set!(any: "bold", FontWeight::BOLD);
set!(any: "extrabold", FontWeight::EXTRABOLD);
set!(any: "black", FontWeight::BLACK);
set!(any: "ultra-condensed", FontStretch::UltraCondensed);
set!(any: "extra-condensed", FontStretch::ExtraCondensed);
set!(any: "condensed", FontStretch::Condensed);
set!(any: "semi-condensed", FontStretch::SemiCondensed);
set!(any: "normal", FontStretch::Normal);
set!(any: "semi-expanded", FontStretch::SemiExpanded);
set!(any: "expanded", FontStretch::Expanded);
set!(any: "extra-expanded", FontStretch::ExtraExpanded);
set!(any: "ultra-expanded", FontStretch::UltraExpanded);
std
}

View File

@ -18,7 +18,7 @@
#font(weight: bold)[Bold]
// Set stretch (not available, matching closest).
#font(stretch: ultra-condensed)[Condensed]
#font(stretch: 50%)[Condensed]
// Set family.
#font("PT Sans")[Sans serif]
@ -45,5 +45,8 @@ Emoji: 🐪, 🌋, 🏞
// Warning: 15-19 should be between 100 and 900
#font(weight: 2700)
// Warning: 16-21 should be between 50% and 200%
#font(stretch: 1000%)
// Error: 7-27 unexpected argument
#font(something: "invalid")