diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2007-11-30 04:29:58 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2007-11-30 04:29:58 +0000 |
commit | a8e3d34ea91d80b5032ae0029cdcd7e97f83da7f (patch) | |
tree | 97d0dfb5c0017e44c1b596da1ef954d12a24f863 /examples/cairoshape.c | |
parent | f802d542d6c1ab729cabd90a9c72891f1c2c8ee8 (diff) | |
download | pango-a8e3d34ea91d80b5032ae0029cdcd7e97f83da7f.tar.gz |
Bug 485536 – underline_position can be zero
2007-11-29 Behdad Esfahbod <behdad@gnome.org>
Bug 485536 – underline_position can be zero
* pango/pango-utils.c (pango_cairo_quantize_line_geometry):
Document that returned position may be zero.
* pango/pangocairo-win32font.c
(pango_cairo_win32_font_create_metrics_for_context):
* pango/pangofc-font.c (get_face_metrics):
Handle case of underline_position==0 after rounding.
svn path=/trunk/; revision=2506
Diffstat (limited to 'examples/cairoshape.c')
-rw-r--r-- | examples/cairoshape.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/examples/cairoshape.c b/examples/cairoshape.c index addde87e..0845c587 100644 --- a/examples/cairoshape.c +++ b/examples/cairoshape.c @@ -1,4 +1,25 @@ -/* example to use pangocairo to render arbitrary shapes inside a text layout */ +/* Example code to show how to use pangocairo to render arbitrary shapes + * inside a text layout, positioned by Pango. This has become possibly + * using the following API added in Pango 1.18: + * + * pango_cairo_context_set_shape_renderer () + * + * This examples uses a small parser to convert shapes in the format of + * SVG paths to cairo instructions. You can typically extract these from + * the SVG file's <path> elements directly. + * + * The code then searches for the Unicode bullet character in the layout + * text and automatically adds PangoAttribtues to the layout to replace + * each of the with a rendering of the GNOME Foot logo. + * + * + * Written by Behdad Esfahbod, 2007 + * + * Permission to use, copy, modify, distribute, and sell this example + * for any purpose is hereby granted without fee. + * It is provided "as is" without express or implied warranty. + */ + #include <stdio.h> #include <string.h> @@ -120,7 +141,7 @@ get_layout (cairo_t *cr) attrs = pango_attr_list_new (); - /* set gnome shape attributes for bullets */ + /* Set gnome shape attributes for all bullets */ for (p = text; (p = strstr (p, BULLET)); p += strlen (BULLET)) { PangoAttribute *attr; @@ -148,6 +169,8 @@ draw_text (cairo_t *cr, int *width, int *height) PangoLayout *layout = get_layout (cr); + /* Adds a fixed 10-pixel margin on the sides. */ + if (width || height) { pango_layout_get_pixel_size (layout, width, height); @@ -179,6 +202,8 @@ int main (int argc, char **argv) filename = argv[1]; + /* First create and use a 0x0 surface, to measure how large + * the final surface needs to be */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 0, 0); cr = cairo_create (surface); @@ -186,6 +211,7 @@ int main (int argc, char **argv) cairo_destroy (cr); cairo_surface_destroy (surface); + /* Now create the final surface and draw to it. */ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height); cr = cairo_create (surface); @@ -196,6 +222,7 @@ int main (int argc, char **argv) draw_text (cr, NULL, NULL); cairo_destroy (cr); + /* Write out the surface as PNG */ status = cairo_surface_write_to_png (surface, filename); cairo_surface_destroy (surface); |