From 24e1f11e7ae0a0bac5f1dc72e009fb18eec4a5bf Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Sun, 28 Jun 2020 15:09:23 -0400 Subject: [PATCH 1/2] Fix text transform Fixes #145 --- .travis.yml | 6 ++++++ res/Box3.ttf | Bin 0 -> 1428 bytes src/draw_target.rs | 16 +++++++--------- src/tests.rs | 30 ++++++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 res/Box3.ttf diff --git a/.travis.yml b/.travis.yml index e27a879..fcfbb93 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,3 +14,9 @@ matrix: script: - cargo build --no-default-features - cargo test --verbose --all + - os: osx + script: + - cargo test --verbose --all + - os: windows + script: + - cargo test --verbose --all diff --git a/res/Box3.ttf b/res/Box3.ttf new file mode 100644 index 0000000000000000000000000000000000000000..10fb88a358852cbc242af35e655b180ed2581b57 GIT binary patch literal 1428 zcmdT^&ubGw6#iy^Bvor|iwa_pZ7e8a((NvkT5>4G#v+K?mUt=HwM~;kevzb-UZmax zD=HpDC|mUZfJg*`2fz{{m;3nfHD3=Djy>-Yf)w4lF^( zbTT=4?&hb_4Zy6Cjhs0>n#2L@C!Uh{{6wFVdggrxM3#7ZChwKdty5pTV;`BhTD1_> zZUB0O>qf?_lo}0MhB-;xmdP#7U7UD+kLxFiOWCwHduVF)3FWWs16dN`yZRt)^%D1H z^VM2A5G8&=+?gxRc(?-E(kzhg9Py5$jYT)e)$V%xCV5WxDA?Q*|ghV>b{&n1&Ts4M+UoCARGahDtSXN8MU@@{TdcONAbTBn+`JRte~@>qeim0(vF;c8?97h@%EHEYyWx{l3A?Hy@QmufhKbNVIrY(o>#O6H2-ZT>+hq;gO z700M!`yI(*p_(j~Gil3-+t!dJ-EndTV*@eAcI->2wrw)aAk{YiHr_tk LSe83l|3QBMQmvy+ literal 0 HcmV?d00001 diff --git a/src/draw_target.rs b/src/draw_target.rs index 50b2a34..24a279b 100644 --- a/src/draw_target.rs +++ b/src/draw_target.rs @@ -775,8 +775,8 @@ impl DrawTarget { let bounds = font.raster_bounds( *id, point_size, - fk::Transform2F::row_major(self.transform.m11, self.transform.m12, self.transform.m21, self.transform.m22, 0., 0.) - .translate(fk::vec2f(position.x, position.y)), + fk::Transform2F::row_major(self.transform.m11, self.transform.m21, self.transform.m12, self.transform.m22, self.transform.m31, self.transform.m32) + * fk::Transform2F::from_translation(fk::vec2f(position.x, position.y)), fk::HintingOptions::None, fk::RasterizationOptions::GrayscaleAa, ); @@ -790,23 +790,21 @@ impl DrawTarget { _ => panic!(), } } + //let combined_bounds: euclid::Rect = euclid::Rect::new(euclid::Point2D::new(0, 0),euclid::Size2D::new( self.width, self.height)); - /*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( fk::vec2i(combined_bounds.size.width, combined_bounds.size.height), fk::Format::A8, ); for (id, position) in ids.iter().zip(positions.iter()) { - let mut position = self.transform.transform_point(*position); - position.x -= combined_bounds.origin.x as f32; - position.y -= combined_bounds.origin.y as f32; + let adjust = fk::Transform2F::from_translation(fk::vec2f(-combined_bounds.origin.x as f32, -combined_bounds.origin.y as f32)); + dbg!(fk::Transform2F::row_major(self.transform.m11, self.transform.m21, self.transform.m12, self.transform.m22, self.transform.m31, self.transform.m32)); font.rasterize_glyph( &mut canvas, *id, point_size, - fk::Transform2F::row_major(self.transform.m11, self.transform.m12, self.transform.m21, self.transform.m22, 0., 0.) - .translate(fk::vec2f(position.x, position.y)), + adjust * fk::Transform2F::row_major(self.transform.m11, self.transform.m21, self.transform.m12, self.transform.m22, self.transform.m31, self.transform.m32) + * fk::Transform2F::from_translation(fk::vec2f(position.x, position.y)), fk::HintingOptions::None, fk::RasterizationOptions::GrayscaleAa, ).unwrap(); diff --git a/src/tests.rs b/src/tests.rs index 1a0246c..747dfa7 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -956,4 +956,34 @@ mod tests { &checkerboard[..] ); } + + #[test] + fn text() { + let mut dt = DrawTarget::new(64, 1); + dt.fill_rect(0., 0., 800., 800., &WHITE_SOURCE, &DrawOptions::new()); + + dt.set_transform(&Transform::create_rotation(euclid::Angle::degrees(15.0))); + let font = font_kit::loader::Loader::from_file(&mut std::fs::File::open("res/Box3.ttf").unwrap(), 0).unwrap(); + let black = Source::Solid(SolidSource { + r: 0, + g: 0, + b: 0, + a: 0xff, + }); + dt.draw_text( + &font, + 30., + "3333", + Point::new(-20., 30.), + &black, + &DrawOptions::new(), + ); + + let white = 0xffffffff; + let black = 0xff000000; + let d = dt.get_data(); + assert_eq!(d[0], white); + assert_eq!(d[42], black); + assert_eq!(d[62], white); + } } From b1fcb3d144abff3af1bd4ec1e63ce6122246f1ce Mon Sep 17 00:00:00 2001 From: Jeff Muizelaar Date: Wed, 12 Aug 2020 22:40:04 -0400 Subject: [PATCH 2/2] Bump sw-composite to get more inline for Screen blending --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f367a51..cc4a950 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ lyon_geom = "0.15" pathfinder_geometry = { version = "0.5", optional = true } png = "0.16" typed-arena = "2.0" -sw-composite = "0.7.10" +sw-composite = "0.7.12" [features] default = ["text"]