From 9c15b76c5a6355902b2a105a7c6ee93f6b5016dc Mon Sep 17 00:00:00 2001 From: Minijackson Date: Thu, 29 Dec 2022 01:40:08 +0100 Subject: WIP v2: text works, primitives works in Lua --- cairo-renderer/src/lib.rs | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) (limited to 'cairo-renderer') diff --git a/cairo-renderer/src/lib.rs b/cairo-renderer/src/lib.rs index d912afc..df6f8fd 100644 --- a/cairo-renderer/src/lib.rs +++ b/cairo-renderer/src/lib.rs @@ -1,5 +1,5 @@ use diaphragm_core::{ - styles::{Pattern, DefinedDashStyle}, + styles::{DefinedDashStyle, Pattern}, text::{DefinedFontDescription, FontDescription}, Renderer, }; @@ -67,28 +67,29 @@ impl Renderer for CairoRenderer { } fn text_extents(&self, text: &str, font: &FontDescription) -> (f64, f64) { + // Pango gives us integer back, so we lose some precision. We use this for that. + const TEST_ABSOLUTE_SIZE: f64 = 1_000_000.; + let layout = pangocairo::create_layout(&self.ctx); - let font_desc = pango::FontDescription::from_string(&font.family); + let mut font_desc = pango::FontDescription::from_string(&font.family); + font_desc.set_absolute_size(TEST_ABSOLUTE_SIZE); layout.set_font_description(Some(&font_desc)); layout.set_markup(text); - //let (extents, _) = layout.get_pixel_extents(); - //(extents.width as f64, extents.height as f64) - // TODO: get height from the baseline - let mut layout_iter = layout.iter(); - let _height = loop { - if layout_iter.at_last_line() { - break layout_iter.baseline(); - } - - layout_iter.next_line(); - }; - - // TODO: Probably should use the logical extents, but it has weird width - let (_, extents) = layout.pixel_extents(); - //let (extents, _) = layout.get_pixel_extents(); - (extents.width() as f64, extents.height() as f64) + // let mut layout_iter = layout.iter(); + // let _height = loop { + // if layout_iter.at_last_line() { + // break layout_iter.baseline(); + // } + // layout_iter.next_line(); + // }; + + let (_, extents) = dbg!(layout.pixel_extents()); + ( + extents.width() as f64 / TEST_ABSOLUTE_SIZE, + extents.height() as f64 / TEST_ABSOLUTE_SIZE, + ) //let (width, height) = layout.get_pixel_size(); //(width as f64, height as f64) @@ -98,14 +99,14 @@ impl Renderer for CairoRenderer { let layout = pangocairo::create_layout(&self.ctx); let mut font_desc = pango::FontDescription::from_string(&font.family); - // TODO: I have no fucking idea why - font_desc.set_size((font.size * 600.) as _); - //font_desc.set_size((font.size * 700.) as _); - //font_desc.set_absolute_size(font.size * 800.); + font_desc.set_absolute_size(dbg!(font.size) as _); layout.set_font_description(Some(&font_desc)); layout.set_markup(text); //self.ctx.set_font_size(dbg!(font.size)); pangocairo::show_layout(&self.ctx, &layout); + + dbg!(pangocairo::context_get_resolution(&layout.context())); + dbg!(layout.pixel_extents()); } } -- cgit v1.2.3