From 9dda148b3842ca780ef9a6e2a5424d08155c9d72 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 13 Nov 2017 17:22:35 -0800 Subject: [PATCH] Fix some bugs in Core Graphics native rendering --- demo/server/src/main.rs | 4 ++-- font-renderer/src/core_graphics.rs | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/demo/server/src/main.rs b/demo/server/src/main.rs index a32edc41..ea08e8e4 100644 --- a/demo/server/src/main.rs +++ b/demo/server/src/main.rs @@ -31,7 +31,7 @@ extern crate serde_derive; use app_units::Au; use euclid::{Point2D, Transform2D}; -use image::{DynamicImage, ImageBuffer, ImageFormat, ImageLuma8}; +use image::{DynamicImage, ImageBuffer, ImageFormat, ImageRgba8}; use lru_cache::LruCache; use pathfinder_font_renderer::{FontContext, FontInstance, FontKey, GlyphKey, SubpixelOffset}; use pathfinder_partitioner::mesh_library::MeshLibrary; @@ -489,7 +489,7 @@ fn render_reference(request: Json) dimensions.size.height, glyph_image.pixels).unwrap(); let reference_image = ReferenceImage { - image: ImageLuma8(image_buffer), + image: ImageRgba8(image_buffer), }; Ok(reference_image) diff --git a/font-renderer/src/core_graphics.rs b/font-renderer/src/core_graphics.rs index bc87556e..e610ac77 100644 --- a/font-renderer/src/core_graphics.rs +++ b/font-renderer/src/core_graphics.rs @@ -18,7 +18,7 @@ use core_graphics_sys::geometry::{CGSize, CG_ZERO_POINT}; use core_graphics_sys::path::CGPathElementType; use core_text::font::CTFont; use core_text; -use euclid::{Point2D, Size2D, Vector2D}; +use euclid::{Point2D, Rect, Size2D, Vector2D}; use pathfinder_path_utils::cubic::{CubicPathCommand, CubicPathCommandApproxStream}; use pathfinder_path_utils::PathCommand; use std::collections::BTreeMap; @@ -120,7 +120,12 @@ impl FontContext { let subpixel_offset = Point2D::new(glyph_key.subpixel_offset.into(), 0.0); // Round out to pixel boundaries. - let bounding_box = &bounding_boxes[0]; + let scale = 1.0 / font_instance.size.to_f64_px(); + let bounding_box = + Rect::new(Point2D::new(bounding_boxes[0].origin.x, + bounding_boxes[0].origin.y), + Size2D::new(bounding_boxes[0].size.width, + bounding_boxes[0].size.height)).scale(scale, scale); let mut lower_left = Point2D::new(bounding_box.origin.x.floor() as i32, bounding_box.origin.y.floor() as i32); let mut upper_right = Point2D::new((bounding_box.origin.x + bounding_box.size.width +