diff options
author | Jonathon Jongsma <jjongsma@gnome.org> | 2006-03-15 01:42:52 +0000 |
---|---|---|
committer | Jonathon Jongsma <jjongsma@gnome.org> | 2006-03-15 01:42:52 +0000 |
commit | 0c9f20acf8577a4bf79e977600ba2ce31ef98021 (patch) | |
tree | 6669764db7f90ef5e86a16d430a3809d9a5a0432 /examples | |
parent | b752651e1f5d319db40c5525798523e100a40fac (diff) |
2006-03-14 Jonathon Jongsma <jonathon.jongsma@gmail.com>
* configure.in:
* examples/Makefile.am:
* examples/text-rotate/.cvsignore:
* examples/text-rotate/Makefile.am:
* examples/text-rotate/text-rotate.cc: Added another basic example,
borrowed from a test-case in cairo. This one is just a simple example of
using text in cairomm
Diffstat (limited to 'examples')
-rw-r--r-- | examples/Makefile.am | 2 | ||||
-rw-r--r-- | examples/text-rotate/.cvsignore | 6 | ||||
-rw-r--r-- | examples/text-rotate/Makefile.am | 7 | ||||
-rw-r--r-- | examples/text-rotate/text-rotate.cc | 87 |
4 files changed, 101 insertions, 1 deletions
diff --git a/examples/Makefile.am b/examples/Makefile.am index 373c1ed..0c42e94 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -1,3 +1,3 @@ -SUBDIRS = png_file pdf-surface ps-surface svg-surface +SUBDIRS = png_file pdf-surface ps-surface svg-surface text-rotate EXTRA_DIST = README Makefile.am_fragment diff --git a/examples/text-rotate/.cvsignore b/examples/text-rotate/.cvsignore new file mode 100644 index 0000000..c64b95d --- /dev/null +++ b/examples/text-rotate/.cvsignore @@ -0,0 +1,6 @@ +.deps +.libs +Makefile +Makefile.in +text_rotate +text-rotate.png diff --git a/examples/text-rotate/Makefile.am b/examples/text-rotate/Makefile.am new file mode 100644 index 0000000..9809f5f --- /dev/null +++ b/examples/text-rotate/Makefile.am @@ -0,0 +1,7 @@ +include $(top_srcdir)/examples/Makefile.am_fragment + +# build the executable but don't install it +noinst_PROGRAMS = text_rotate +text_rotate_SOURCES = text-rotate.cc + +CLEANFILES = text-rotate.png diff --git a/examples/text-rotate/text-rotate.cc b/examples/text-rotate/text-rotate.cc new file mode 100644 index 0000000..3e210fa --- /dev/null +++ b/examples/text-rotate/text-rotate.cc @@ -0,0 +1,87 @@ +/* +/* Copyright (C) 2005 The cairomm Development Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + */ + +#include <string> +#include <cairomm/cairomm.h> + +// This example is based on the C cairo example of the same name + +const int WIDTH = 150; +const int HEIGHT = 150; +const int NUM_TEXT = 20; +const int TEXT_SIZE = 12; + +/* Draw the word cairo at NUM_TEXT different angles */ +void draw(Cairo::RefPtr<Cairo::Context> cr, int width, int height) +{ + int i, x_off, y_off; + Cairo::TextExtents extents; + std::string text("cairo"); + + cr->select_font_face("Bitstream Vera Sans", Cairo::FONT_SLANT_NORMAL, + Cairo::FONT_WEIGHT_NORMAL); + cr->set_font_size(TEXT_SIZE); + + Cairo::FontOptions font_options; + + font_options.set_hint_style(Cairo::HINT_STYLE_NONE); + font_options.set_hint_metrics(Cairo::HINT_METRICS_OFF); + font_options.set_antialias(Cairo::ANTIALIAS_GRAY); + + cr->set_font_options(font_options); + + cr->set_source_rgb(0.0, 0.0, 0.0); + + cr->translate(WIDTH / 2.0, HEIGHT / 2.0); + + cr->get_text_extents(text, extents); + + if (NUM_TEXT == 1) + { + x_off = y_off = 0; + } + else + { + y_off = (int) - floor(0.5 + extents.height / 2.0); + x_off = (int) floor(0.5 + (extents.height + 1.0) / (2.0 * tan (M_PI / NUM_TEXT))); + } + + for (i=0; i < NUM_TEXT; i++) + { + cr->save(); + cr->rotate(2 * M_PI * i / NUM_TEXT); + cr->set_line_width(1.0); + cr->rectangle(x_off - 0.5, y_off - 0.5, extents.width + 1, + extents.height + 1); + cr->set_source_rgb(1, 0, 0); + cr->stroke(); + cr->move_to(x_off - extents.x_bearing, y_off - extents.y_bearing); + cr->set_source_rgb(0, 0, 0); + cr->show_text("cairo"); + cr->restore(); + } +} + +int main (void) +{ + Cairo::RefPtr<Cairo::ImageSurface> surface = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, WIDTH, HEIGHT); + Cairo::RefPtr<Cairo::Context> cr = Cairo::Context::create(surface); + draw(cr, WIDTH, HEIGHT); + surface->write_to_png("text-rotate.png"); +} |