summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJonathon Jongsma <jjongsma@gnome.org>2006-03-15 01:42:52 +0000
committerJonathon Jongsma <jjongsma@gnome.org>2006-03-15 01:42:52 +0000
commit0c9f20acf8577a4bf79e977600ba2ce31ef98021 (patch)
tree6669764db7f90ef5e86a16d430a3809d9a5a0432 /examples
parentb752651e1f5d319db40c5525798523e100a40fac (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.am2
-rw-r--r--examples/text-rotate/.cvsignore6
-rw-r--r--examples/text-rotate/Makefile.am7
-rw-r--r--examples/text-rotate/text-rotate.cc87
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");
+}