summaryrefslogtreecommitdiff
path: root/crates/typst-library/src/text
diff options
context:
space:
mode:
authorSébastien d'Herbais de Thun <sebastien.d.herbais@gmail.com>2023-10-03 19:31:02 +0200
committerGitHub <noreply@github.com>2023-10-03 19:31:02 +0200
commita4e357fb37d76d32d06ad8cc21e47bb2cc064cfd (patch)
tree52e118513218d961cc5e8c713575049cd75a2e95 /crates/typst-library/src/text
parent6b1233e127d815b38fea9ab909dd4081cdf76ca2 (diff)
Gradient Part 2 - Linear gradients (#2279)
Diffstat (limited to 'crates/typst-library/src/text')
-rw-r--r--crates/typst-library/src/text/mod.rs15
-rw-r--r--crates/typst-library/src/text/shaping.rs2
2 files changed, 14 insertions, 3 deletions
diff --git a/crates/typst-library/src/text/mod.rs b/crates/typst-library/src/text/mod.rs
index 8bce5e8a..94ef426f 100644
--- a/crates/typst-library/src/text/mod.rs
+++ b/crates/typst-library/src/text/mod.rs
@@ -16,6 +16,7 @@ pub use self::shift::*;
use rustybuzz::Tag;
use ttf_parser::Rect;
+use typst::diag::{bail, error, SourceResult};
use typst::font::{Font, FontStretch, FontStyle, FontWeight, VerticalFontMetric};
use crate::layout::ParElem;
@@ -169,13 +170,23 @@ pub struct TextElem {
#[default(Abs::pt(11.0))]
pub size: TextSize,
- /// The glyph fill color.
+ /// The glyph fill paint.
///
/// ```example
/// #set text(fill: red)
/// This text is red.
/// ```
- #[parse(args.named_or_find("fill")?)]
+ #[parse({
+ let paint: Option<Spanned<Paint>> = args.named_or_find("fill")?;
+ if let Some(paint) = &paint {
+ // TODO: Implement gradients on text.
+ if matches!(paint.v, Paint::Gradient(_)) {
+ bail!(error!(paint.span, "text fill must be a solid color")
+ .with_hint("gradients on text will be supported soon"));
+ }
+ }
+ paint.map(|paint| paint.v)
+ })]
#[default(Color::BLACK.into())]
pub fill: Paint,
diff --git a/crates/typst-library/src/text/shaping.rs b/crates/typst-library/src/text/shaping.rs
index 4fe6b49b..df30a9c8 100644
--- a/crates/typst-library/src/text/shaping.rs
+++ b/crates/typst-library/src/text/shaping.rs
@@ -228,7 +228,7 @@ impl<'a> ShapedText<'a> {
let size = Size::new(self.width, top + bottom);
let mut offset = Abs::zero();
- let mut frame = Frame::new(size);
+ let mut frame = Frame::soft(size);
frame.set_baseline(top);
let shift = TextElem::baseline_in(self.styles);