From d4cc8c775d4c579aeac69ca2d212a604c67043b0 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 10 Oct 2021 20:26:58 +0200 Subject: [PATCH] Move paint and colors into `geom` --- src/eval/state.rs | 2 -- src/eval/value.rs | 3 +-- src/export/pdf.rs | 5 ++--- src/geom/mod.rs | 2 ++ src/{color.rs => geom/paint.rs} | 13 +++++++++---- src/layout/frame.rs | 12 ++---------- src/lib.rs | 1 - src/library/elements.rs | 4 +--- src/library/mod.rs | 1 - src/library/text.rs | 2 +- src/library/utility.rs | 1 - tests/typeset.rs | 7 ++++--- 12 files changed, 22 insertions(+), 31 deletions(-) rename src/{color.rs => geom/paint.rs} (95%) diff --git a/src/eval/state.rs b/src/eval/state.rs index a9195199b..5d8d31721 100644 --- a/src/eval/state.rs +++ b/src/eval/state.rs @@ -1,11 +1,9 @@ use std::rc::Rc; -use crate::color::{Color, RgbaColor}; use crate::font::{ FontFamily, FontStretch, FontStyle, FontVariant, FontWeight, VerticalFontMetric, }; use crate::geom::*; -use crate::layout::Paint; use crate::paper::{PaperClass, ISO_A4}; /// Defines an set of properties a template can be instantiated with. diff --git a/src/eval/value.rs b/src/eval/value.rs index a1d65a187..2c6167a48 100644 --- a/src/eval/value.rs +++ b/src/eval/value.rs @@ -4,9 +4,8 @@ use std::fmt::{self, Debug, Formatter}; use std::rc::Rc; use super::{ops, Array, Dict, Function, Str, Template}; -use crate::color::{Color, RgbaColor}; use crate::diag::StrResult; -use crate::geom::{Angle, Fractional, Length, Linear, Relative}; +use crate::geom::{Angle, Color, Fractional, Length, Linear, Relative, RgbaColor}; use crate::syntax::Spanned; use crate::util::EcoString; diff --git a/src/export/pdf.rs b/src/export/pdf.rs index 3abda916c..1ac8149d9 100644 --- a/src/export/pdf.rs +++ b/src/export/pdf.rs @@ -13,11 +13,10 @@ use pdf_writer::{Content, Filter, Finish, Name, PdfWriter, Rect, Ref, Str, Unico use ttf_parser::{name_id, GlyphId, Tag}; use super::subset; -use crate::color::Color; use crate::font::{find_name, FaceId, FontStore}; -use crate::geom::{self, Em, Length, Size}; +use crate::geom::{self, Color, Em, Length, Paint, Size}; use crate::image::{Image, ImageId, ImageStore}; -use crate::layout::{Element, Frame, Geometry, Paint}; +use crate::layout::{Element, Frame, Geometry}; use crate::Context; /// Export a collection of frames into a PDF document. diff --git a/src/geom/mod.rs b/src/geom/mod.rs index 936f18681..ad92813eb 100644 --- a/src/geom/mod.rs +++ b/src/geom/mod.rs @@ -10,6 +10,7 @@ mod fr; mod gen; mod length; mod linear; +mod paint; mod path; mod point; mod relative; @@ -25,6 +26,7 @@ pub use fr::*; pub use gen::*; pub use length::*; pub use linear::*; +pub use paint::*; pub use path::*; pub use point::*; pub use relative::*; diff --git a/src/color.rs b/src/geom/paint.rs similarity index 95% rename from src/color.rs rename to src/geom/paint.rs index 966ab3d67..2ac11b564 100644 --- a/src/color.rs +++ b/src/geom/paint.rs @@ -1,9 +1,14 @@ -//! Color handling. - -use std::fmt::{self, Debug, Display, Formatter}; +use std::fmt::Display; use std::str::FromStr; -use serde::{Deserialize, Serialize}; +use super::*; + +/// How a fill or stroke should be painted. +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] +pub enum Paint { + /// A solid color. + Color(Color), +} /// A color in a dynamic format. #[derive(Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] diff --git a/src/layout/frame.rs b/src/layout/frame.rs index c74f2abd1..0e986fe49 100644 --- a/src/layout/frame.rs +++ b/src/layout/frame.rs @@ -4,9 +4,8 @@ use std::rc::Rc; use serde::{Deserialize, Serialize}; use super::{Constrained, Constraints}; -use crate::color::Color; use crate::font::FaceId; -use crate::geom::{Em, Length, Path, Point, Size}; +use crate::geom::{Em, Length, Paint, Path, Point, Size}; use crate::image::ImageId; /// A finished layout with elements at fixed positions. @@ -36,7 +35,7 @@ pub enum Element { /// Shaped text. Text(Text), /// A geometric shape and the paint which with it should be filled or - /// stroked. + /// stroked (which one depends on the kind of geometry). Geometry(Geometry, Paint), /// A raster image. Image(ImageId, Size), @@ -83,13 +82,6 @@ pub enum Geometry { Path(Path), } -/// How a fill or stroke should be painted. -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash, Serialize, Deserialize)] -pub enum Paint { - /// A solid color. - Color(Color), -} - impl Frame { /// Create a new, empty frame. #[track_caller] diff --git a/src/lib.rs b/src/lib.rs index fa9882079..4ac40d960 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,7 +33,6 @@ pub mod diag; #[macro_use] pub mod eval; -pub mod color; pub mod export; pub mod font; pub mod geom; diff --git a/src/library/elements.rs b/src/library/elements.rs index d1c52ab7d..9680dfeeb 100644 --- a/src/library/elements.rs +++ b/src/library/elements.rs @@ -5,9 +5,7 @@ use decorum::N64; use super::*; use crate::diag::Error; -use crate::layout::{ - BackgroundNode, BackgroundShape, FixedNode, ImageNode, PadNode, Paint, -}; +use crate::layout::{BackgroundNode, BackgroundShape, FixedNode, ImageNode, PadNode}; /// `image`: An image. pub fn image(ctx: &mut EvalContext, args: &mut Args) -> TypResult { diff --git a/src/library/mod.rs b/src/library/mod.rs index 411755bb7..d99eb24d1 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -16,7 +16,6 @@ pub use utility::*; use std::convert::TryFrom; use std::rc::Rc; -use crate::color::{Color, RgbaColor}; use crate::diag::{At, TypResult}; use crate::eval::{Args, Array, EvalContext, Scope, State, Str, Template, Value}; use crate::font::{FontFamily, FontStretch, FontStyle, FontWeight, VerticalFontMetric}; diff --git a/src/library/text.rs b/src/library/text.rs index 2816ea816..b532b20bf 100644 --- a/src/library/text.rs +++ b/src/library/text.rs @@ -1,5 +1,5 @@ use super::*; -use crate::layout::{Decoration, LineDecoration, LineKind, Paint}; +use crate::layout::{Decoration, LineDecoration, LineKind}; /// `font`: Configure the font. pub fn font(ctx: &mut EvalContext, args: &mut Args) -> TypResult { diff --git a/src/library/utility.rs b/src/library/utility.rs index ef7adff0b..16a6f5dbd 100644 --- a/src/library/utility.rs +++ b/src/library/utility.rs @@ -2,7 +2,6 @@ use std::cmp::Ordering; use std::str::FromStr; use super::*; -use crate::color::{Color, RgbaColor}; /// `assert`: Ensure that a condition is fulfilled. pub fn assert(_: &mut EvalContext, args: &mut Args) -> TypResult { diff --git a/tests/typeset.rs b/tests/typeset.rs index 778d8f6c6..5ca81da51 100644 --- a/tests/typeset.rs +++ b/tests/typeset.rs @@ -9,15 +9,16 @@ use tiny_skia as sk; use ttf_parser::{GlyphId, OutlineBuilder}; use walkdir::WalkDir; -use typst::color::{Color, RgbaColor}; use typst::diag::Error; use typst::eval::{State, Value}; use typst::font::Face; -use typst::geom::{self, Length, PathElement, Point, Sides, Size}; +use typst::geom::{ + self, Color, Length, Paint, PathElement, Point, RgbaColor, Sides, Size, +}; use typst::image::Image; #[cfg(feature = "layout-cache")] use typst::layout::LayoutTree; -use typst::layout::{layout, Element, Frame, Geometry, Paint, Text}; +use typst::layout::{layout, Element, Frame, Geometry, Text}; use typst::loading::FsLoader; use typst::parse::Scanner; use typst::source::SourceFile;