From 9a74efbe0e5c2362f71c935be306276e185f1584 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Tue, 7 Apr 2020 17:29:57 -0400 Subject: [PATCH] Update to latest font-kit changes. --- Cargo.toml | 1 + src/draw_target.rs | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e8d2175..960af1d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ categories = ["graphics"] euclid = "0.20" font-kit = { version = "0.5", optional = true } lyon_geom = "0.15" +pathfinder_geometry = "0.4" png = "0.15" typed-arena = "2.0" sw-composite = "0.7.7" diff --git a/src/draw_target.rs b/src/draw_target.rs index 14f2db7..5df1e76 100644 --- a/src/draw_target.rs +++ b/src/draw_target.rs @@ -16,7 +16,6 @@ mod fk { pub use font_kit::canvas::{Canvas, Format, RasterizationOptions}; pub use font_kit::font::Font; pub use font_kit::hinting::HintingOptions; - pub use font_kit::loader::FontTransform; } use std::fs::*; @@ -26,6 +25,8 @@ use crate::stroke::*; use crate::{IntRect, IntPoint, Point, Transform, Vector}; use euclid::vec2; +use pathfinder_geometry::transform2d::Transform2F; +use pathfinder_geometry::vector::{Vector2F, Vector2I}; #[derive(Clone)] pub struct Mask { @@ -741,16 +742,17 @@ impl DrawTarget { font: &fk::Font, point_size: f32, text: &str, - mut start: Point, + start: Point, src: &Source, options: &DrawOptions, ) { + let mut start = Vector2F::new(start.x, start.y); let mut ids = Vec::new(); let mut positions = Vec::new(); for c in text.chars() { let id = font.glyph_for_char(c).unwrap(); ids.push(id); - positions.push(start); + positions.push(Point::new(start.x(), start.y())); start += font.advance(id).unwrap() * point_size / 24. / 96.; } self.draw_glyphs(font, point_size, &ids, &positions, src, options); @@ -771,13 +773,15 @@ impl DrawTarget { let bounds = font.raster_bounds( *id, point_size, - &fk::FontTransform::new(self.transform.m11, self.transform.m21, self.transform.m12, self.transform.m22), - &(self.transform.transform_point(*position)), + Transform2F::row_major(self.transform.m11, self.transform.m12, self.transform.m21, self.transform.m22, 0., 0.).translate(Vector2F::new(position.x, position.y)), fk::HintingOptions::None, fk::RasterizationOptions::GrayscaleAa, ); combined_bounds = match bounds { Ok(bounds) => { + let origin = bounds.origin(); + let size = bounds.size(); + let bounds = euclid::Rect::new(IntPoint::new(origin.x(), origin.y()), euclid::Size2D::new(size.x(), size.y())); combined_bounds.union(&bounds) } _ => panic!(), @@ -787,7 +791,7 @@ impl DrawTarget { /*let mut canvas = Canvas::new(&euclid::Size2D::new(combined_bounds.size.width as u32, combined_bounds.size.height as u32), Format::A8);*/ let mut canvas = fk::Canvas::new( - &euclid::Size2D::new(combined_bounds.size.width as u32, combined_bounds.size.height as u32), + Vector2I::new(combined_bounds.size.width, combined_bounds.size.height), fk::Format::A8, ); for (id, position) in ids.iter().zip(positions.iter()) { @@ -798,8 +802,7 @@ impl DrawTarget { &mut canvas, *id, point_size, - &fk::FontTransform::new(self.transform.m11, self.transform.m21, self.transform.m12, self.transform.m22), - &position, + Transform2F::row_major(self.transform.m11, self.transform.m12, self.transform.m21, self.transform.m22, 0., 0.).translate(Vector2F::new(position.x, position.y)), fk::HintingOptions::None, fk::RasterizationOptions::GrayscaleAa, ).unwrap();