[goocanvas/new-api] 2010-07-08 Damon Chaplin <damon gnome org>
- From: Damon Chaplin <damon src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goocanvas/new-api] 2010-07-08 Damon Chaplin <damon gnome org>
- Date: Sat, 10 Jul 2010 12:20:40 +0000 (UTC)
commit f57fb10f76668b918f1a410252239799990d5556
Author: Damon Chaplin <damon gnome org>
Date: Thu Jul 8 16:35:20 2010 +0100
2010-07-08 Damon Chaplin <damon gnome org>
* src/goocanvas.c (goo_canvas_check_font_size): new function to
convert font sizes in points to the appropriate canvas units.
* src/goocanvastext.c (goo_canvas_text_create_layout): use the above.
* demo/units-demo.c (setup_canvas): test the above.
ChangeLog | 9 +++++++++
demo/units-demo.c | 10 ++++++++--
src/goocanvas.c | 35 +++++++++++++++++++++++++++++++++++
src/goocanvas.h | 3 +++
src/goocanvastext.c | 6 +++++-
5 files changed, 60 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 058e32b..827e2b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-07-08 Damon Chaplin <damon gnome org>
+
+ * src/goocanvas.c (goo_canvas_check_font_size): new function to
+ convert font sizes in points to the appropriate canvas units.
+
+ * src/goocanvastext.c (goo_canvas_text_create_layout): use the above.
+
+ * demo/units-demo.c (setup_canvas): test the above.
+
2010-07-07 Damon Chaplin <damon gnome org>
* src/goocanvasitemsimple.c
diff --git a/demo/units-demo.c b/demo/units-demo.c
index 4a28e8b..6c96991 100644
--- a/demo/units-demo.c
+++ b/demo/units-demo.c
@@ -36,13 +36,13 @@ setup_canvas (GtkWidget *canvas,
/* Points */
{ 100, 100, 200, 20, 10,
- 200, 310, 24,
+ 200, 250, 24,
310, 100, 20, 20
},
/* Inches */
{ 1, 1, 3, 0.5, 0.16,
- 3, 4, 0.3,
+ 3, 3, 0.3,
4.2, 1, 0.5, 0.5
},
@@ -77,6 +77,12 @@ setup_canvas (GtkWidget *canvas,
"font", font_desc,
NULL);
+ sprintf (buffer, "This font is 12 points high");
+ item = goo_canvas_text_new (root, buffer, d[5], d[6] * 1.5, -1,
+ GTK_ANCHOR_CENTER,
+ "font", "Sans 12",
+ NULL);
+
item = goo_canvas_image_new (root, NULL, d[8], d[9],
"pattern", flower_pattern,
"width", d[10],
diff --git a/src/goocanvas.c b/src/goocanvas.c
index 2649d0d..bce521b 100644
--- a/src/goocanvas.c
+++ b/src/goocanvas.c
@@ -4063,3 +4063,38 @@ goo_canvas_update_items_using_style (GooCanvas *canvas,
goo_canvas_update_items_using_style_recurse (canvas->static_root_item,
style, recompute_bounds);
}
+
+
+/* If the canvas is using resolution-dependent units like points or mm then
+ we need to convert the font sizes from points to the units being used,
+ and set it as an absolute font size. */
+void
+goo_canvas_check_font_size (GooCanvas *canvas,
+ PangoFontDescription *font_desc)
+{
+ gdouble size;
+
+ if (canvas->units == GTK_UNIT_PIXEL
+ || pango_font_description_get_size_is_absolute (font_desc))
+ return;
+
+ /* Note that size will be scaled by PANGO_SCALE but it doesn't matter. */
+ size = pango_font_description_get_size (font_desc);
+
+ switch (canvas->units)
+ {
+ case GTK_UNIT_POINTS:
+ /* Do nothing. The size is in points already. Just make it absolute. */
+ break;
+ case GTK_UNIT_INCH:
+ size = size / 72.0;
+ break;
+ case GTK_UNIT_MM:
+ size = (size / 72.0) * 25.4;
+ break;
+ default:
+ break;
+ }
+
+ pango_font_description_set_absolute_size (font_desc, size);
+}
diff --git a/src/goocanvas.h b/src/goocanvas.h
index 7a9d48e..dac7ab0 100644
--- a/src/goocanvas.h
+++ b/src/goocanvas.h
@@ -263,6 +263,9 @@ void goo_canvas_convert_bounds_to_item_space (GooCanvas *canvas,
GooCanvasItem *item,
GooCanvasBounds *bounds);
+void goo_canvas_check_font_size (GooCanvas *canvas,
+ PangoFontDescription *font_desc);
+
/*
* Pointer/keyboard grabbing & ungrabbing.
diff --git a/src/goocanvastext.c b/src/goocanvastext.c
index ac3a1c6..bd2bdf8 100644
--- a/src/goocanvastext.c
+++ b/src/goocanvastext.c
@@ -287,7 +287,11 @@ goo_canvas_text_create_layout (GooCanvasText *text,
pango_layout_set_text (layout, string, -1);
if (simple->style && simple->style->font_desc)
- pango_layout_set_font_description (layout, simple->style->font_desc);
+ {
+ /* Convert sizes in points to the appropriate absolute size. */
+ goo_canvas_check_font_size (simple->canvas, simple->style->font_desc);
+ pango_layout_set_font_description (layout, simple->style->font_desc);
+ }
font_options = cairo_font_options_create ();
if (simple->style)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]