diff options
author | Owen Taylor <otaylor@redhat.com> | 2005-01-09 00:12:39 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2005-01-09 00:12:39 +0000 |
commit | cc6ac36dd3c7e5ef39b9f21ef77596a159f2100e (patch) | |
tree | e1b8ffc1c14d449a41946d22ea5d1c6ddf9115d8 /examples/cairosimple.c | |
parent | 75f4ad29adce645ddb837e662c9d71ccfbf60154 (diff) | |
download | pango-cc6ac36dd3c7e5ef39b9f21ef77596a159f2100e.tar.gz |
Add checks for Cairo
Sat Jan 8 16:46:37 2005 Owen Taylor <otaylor@redhat.com>
* configure.in: Add checks for Cairo
* pango/Makefile.am: Add libpangocairo.
* pango/pangocairo-font.c pango/pangocairo-fontmap.c
pango/pangocairo.h pango/pangocairo-private.h
pango/pangocairo-fcfont.c pango/pangocairo-fcfontmap.c
pango/pangocairo-fc.h: Start of a Cairo/FreeType backend.
* pango/pangofc-fontmap.[ch]: Add a "get_render_key"
virtual function to allow subclasses to specialize the
details of how caching works. Add a default implementation
that's a little more sophisticated than what was there
before.
* pango/pangoft2-private.h pangofc-font.c pangoft2.c:
Move default implementations of has_char(), get_glyph()
to the base class.
* pango/pangofc-private.h pango/pangoft2-private.h:
Move PANGO_UNITS_26_6 and friends to pango/pangofc-private.h.
* examples/renderdemo.[ch] examples/pangoft2topgm.c
examples/xftview.c: Allow passing in a custom function
to transform drawing.
* examples/Makefile.am examples/cairoview.c: Add a
Cairo/Xlib example program.
* examples/cairosimple.c: Simple Cairo example with
output to a PNG.
* pango/pango-layout.c (pango_layout_line_get_extents): Fix
bug where line ink rect was always including 0, 0.
Diffstat (limited to 'examples/cairosimple.c')
-rw-r--r-- | examples/cairosimple.c | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/examples/cairosimple.c b/examples/cairosimple.c new file mode 100644 index 00000000..1ec7edf2 --- /dev/null +++ b/examples/cairosimple.c @@ -0,0 +1,88 @@ +#include <math.h> +#include <pango/pangocairo.h> + +static void +draw_text (cairo_t *cr) +{ +#define RADIUS 150 +#define N_WORDS 10 +#define FONT "Sans Bold 27" + + PangoLayout *layout; + PangoFontDescription *desc; + int i; + + /* Center coordinates on the middle of the region we are drawing + */ + cairo_translate (cr, RADIUS, RADIUS); + + /* Create a PangoLayout, set the font and text */ + layout = pango_cairo_create_layout (cr); + + pango_layout_set_text (layout, "Text", -1); + desc = pango_font_description_from_string (FONT); + pango_layout_set_font_description (layout, desc); + pango_font_description_free (desc); + + /* Draw the layout N_WORDS times in a circle */ + for (i = 0; i < N_WORDS; i++) + { + int width, height; + double angle = (360. * i) / N_WORDS; + double red; + + cairo_save (cr); + + /* Gradient from red at angle == 60 to blue at angle == 300 */ + red = (1 + cos ((angle - 60) * G_PI / 180.)) / 2; + cairo_set_rgb_color (cr, red, 0, 1.0 - red); + + cairo_rotate (cr, angle * G_PI / 180.); + + /* Inform Pango to re-layout the text with the new transformation */ + pango_cairo_update_layout (cr, layout); + + pango_layout_get_size (layout, &width, &height); + cairo_move_to (cr, - ((double)width / PANGO_SCALE) / 2, - RADIUS); + pango_cairo_show_layout (cr, layout); + + cairo_restore (cr); + } + + /* free the layout object */ + g_object_unref (layout); +} + +int main (int argc, char **argv) +{ + cairo_t *cr; + FILE *f; + + if (argc != 2) + { + g_printerr ("Usage: cairosimple OUTPUT_FILENAME\n"); + return 1; + } + + f = fopen (argv[1], "w"); + if (!f) + { + g_printerr ("Usage: cannot open '%s'\n", argv[1]); + return 1; + } + + cr = cairo_create(); + cairo_set_target_png (cr, f, + CAIRO_FORMAT_ARGB32, + 2 * RADIUS, 2 * RADIUS); + + cairo_set_rgb_color (cr, 1.0, 1.0, 1.0); + cairo_rectangle (cr, 0, 0, 2 * RADIUS, 2 * RADIUS); + cairo_fill (cr); + draw_text (cr); + + cairo_destroy (cr); + fclose (f); + + return 0; +} |