summaryrefslogtreecommitdiffstats
path: root/cairo-renderer
diff options
context:
space:
mode:
Diffstat (limited to 'cairo-renderer')
-rw-r--r--cairo-renderer/src/lib.rs45
1 files changed, 23 insertions, 22 deletions
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 @@
1use diaphragm_core::{ 1use diaphragm_core::{
2 styles::{Pattern, DefinedDashStyle}, 2 styles::{DefinedDashStyle, Pattern},
3 text::{DefinedFontDescription, FontDescription}, 3 text::{DefinedFontDescription, FontDescription},
4 Renderer, 4 Renderer,
5}; 5};
@@ -67,28 +67,29 @@ impl Renderer for CairoRenderer {
67 } 67 }
68 68
69 fn text_extents(&self, text: &str, font: &FontDescription) -> (f64, f64) { 69 fn text_extents(&self, text: &str, font: &FontDescription) -> (f64, f64) {
70 // Pango gives us integer back, so we lose some precision. We use this for that.
71 const TEST_ABSOLUTE_SIZE: f64 = 1_000_000.;
72
70 let layout = pangocairo::create_layout(&self.ctx); 73 let layout = pangocairo::create_layout(&self.ctx);
71 let font_desc = pango::FontDescription::from_string(&font.family); 74 let mut font_desc = pango::FontDescription::from_string(&font.family);
75 font_desc.set_absolute_size(TEST_ABSOLUTE_SIZE);
72 layout.set_font_description(Some(&font_desc)); 76 layout.set_font_description(Some(&font_desc));
73 layout.set_markup(text); 77 layout.set_markup(text);
74 78
75 //let (extents, _) = layout.get_pixel_extents();
76 //(extents.width as f64, extents.height as f64)
77
78 // TODO: get height from the baseline 79 // TODO: get height from the baseline
79 let mut layout_iter = layout.iter(); 80 // let mut layout_iter = layout.iter();
80 let _height = loop { 81 // let _height = loop {
81 if layout_iter.at_last_line() { 82 // if layout_iter.at_last_line() {
82 break layout_iter.baseline(); 83 // break layout_iter.baseline();
83 } 84 // }
84 85 // layout_iter.next_line();
85 layout_iter.next_line(); 86 // };
86 }; 87
87 88 let (_, extents) = dbg!(layout.pixel_extents());
88 // TODO: Probably should use the logical extents, but it has weird width 89 (
89 let (_, extents) = layout.pixel_extents(); 90 extents.width() as f64 / TEST_ABSOLUTE_SIZE,
90 //let (extents, _) = layout.get_pixel_extents(); 91 extents.height() as f64 / TEST_ABSOLUTE_SIZE,
91 (extents.width() as f64, extents.height() as f64) 92 )
92 93
93 //let (width, height) = layout.get_pixel_size(); 94 //let (width, height) = layout.get_pixel_size();
94 //(width as f64, height as f64) 95 //(width as f64, height as f64)
@@ -98,14 +99,14 @@ impl Renderer for CairoRenderer {
98 let layout = pangocairo::create_layout(&self.ctx); 99 let layout = pangocairo::create_layout(&self.ctx);
99 let mut font_desc = pango::FontDescription::from_string(&font.family); 100 let mut font_desc = pango::FontDescription::from_string(&font.family);
100 101
101 // TODO: I have no fucking idea why 102 font_desc.set_absolute_size(dbg!(font.size) as _);
102 font_desc.set_size((font.size * 600.) as _);
103 //font_desc.set_size((font.size * 700.) as _);
104 //font_desc.set_absolute_size(font.size * 800.);
105 layout.set_font_description(Some(&font_desc)); 103 layout.set_font_description(Some(&font_desc));
106 layout.set_markup(text); 104 layout.set_markup(text);
107 105
108 //self.ctx.set_font_size(dbg!(font.size)); 106 //self.ctx.set_font_size(dbg!(font.size));
109 pangocairo::show_layout(&self.ctx, &layout); 107 pangocairo::show_layout(&self.ctx, &layout);
108
109 dbg!(pangocairo::context_get_resolution(&layout.context()));
110 dbg!(layout.pixel_extents());
110 } 111 }
111} 112}