summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/Makefile3
-rw-r--r--test/cairo_test.cxx168
2 files changed, 171 insertions, 0 deletions
diff --git a/test/Makefile b/test/Makefile
index 2dc3145ea..7e46b93ba 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -38,6 +38,7 @@ CPPFILES =\
browser.cxx \
button.cxx \
buttons.cxx \
+ cairo_test.cxx \
checkers.cxx \
clock.cxx \
colbrowser.cxx \
@@ -106,6 +107,7 @@ ALL = \
browser$(EXEEXT) \
button$(EXEEXT) \
buttons$(EXEEXT) \
+ cairo_test$(EXEEXT) \
checkers$(EXEEXT) \
clock$(EXEEXT) \
colbrowser$(EXEEXT) \
@@ -461,6 +463,7 @@ shape$(EXEEXT): shape.o
echo Linking $@...
$(CXX) $(ARCHFLAGS) $(LDFLAGS) -o $@ shape.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
+cairo_test$(EXEEXT): cairo_test.o
#
# End of "$Id$".
diff --git a/test/cairo_test.cxx b/test/cairo_test.cxx
new file mode 100644
index 000000000..6492d4d40
--- /dev/null
+++ b/test/cairo_test.cxx
@@ -0,0 +1,168 @@
+//
+// "$Id: arc.cxx 5115 2006-05-12 16:00:00Z fabien $"
+//
+// Arc drawing test program for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2006 by Bill Spitzak and others.
+//
+// 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+// USA.
+//
+// Please report all bugs and problems to "fltk-bugs@fltk.org".
+//
+
+#include <config.h>
+
+#ifdef HAVE_CAIRO
+
+#include <FL/Fl_Cairo_Window.H>
+#include <FL/Fl_Box.H>
+#include <FL/x.H>
+#include <FL/fl_draw.H>
+#include <FL/math.h>
+#define DEF_WIDTH 0.03
+
+// uncomment the following line to enable cairo context autolink feature:
+// #define AUTOLINK
+
+// put your drawing stuff here
+float drawargs[7] = {90, 90, 100, 100, 0, 360, 0};
+const char* name[7] = {"X", "Y", "W", "H", "start", "end", "rotate"};
+
+
+static void centered_text(cairo_t* cr, double x0,double y0,double w0,double h0, const char * my_text) {
+ cairo_select_font_face (cr, "Sans", CAIRO_FONT_SLANT_OBLIQUE,CAIRO_FONT_WEIGHT_BOLD);
+ cairo_set_source_rgba (cr, 0.9, 0.9, 0.4, 0.6);
+ cairo_text_extents_t extents;
+ cairo_text_extents (cr, my_text, &extents);
+ double x = (extents.width/2 + extents.x_bearing);
+ double y = (extents.height/2 + extents.y_bearing);
+ cairo_move_to (cr, x0+w0/2-x, y0+h0/2 - y);
+ cairo_text_path(cr,my_text);
+ cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0,1);
+ cairo_set_line_width (cr, 0.004);
+ cairo_stroke (cr);
+ cairo_set_line_width (cr, DEF_WIDTH);
+
+
+}
+
+static void round_button(cairo_t* cr, double x0, double y0,
+ double rect_width, double rect_height, double radius,
+ double r, double g, double b) {
+
+ double x1,y1;
+
+
+ x1=x0+rect_width;
+ y1=y0+rect_height;
+ if (!rect_width || !rect_height)
+ return;
+ if (rect_width/2<radius) {
+ if (rect_height/2<radius) {
+ cairo_move_to (cr, x0, (y0 + y1)/2);
+ cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
+ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
+ } else {
+ cairo_move_to (cr, x0, y0 + radius);
+ cairo_curve_to (cr, x0 ,y0, x0, y0, (x0 + x1)/2, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
+ cairo_line_to (cr, x1 , y1 - radius);
+ cairo_curve_to (cr, x1, y1, x1, y1, (x1 + x0)/2, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
+ }
+ } else {
+ if (rect_height/2<radius) {
+ cairo_move_to (cr, x0, (y0 + y1)/2);
+ cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
+ cairo_line_to (cr, x1 - radius, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, (y0 + y1)/2);
+ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+ cairo_line_to (cr, x0 + radius, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, (y0 + y1)/2);
+ } else {
+ cairo_move_to (cr, x0, y0 + radius);
+ cairo_curve_to (cr, x0 , y0, x0 , y0, x0 + radius, y0);
+ cairo_line_to (cr, x1 - radius, y0);
+ cairo_curve_to (cr, x1, y0, x1, y0, x1, y0 + radius);
+ cairo_line_to (cr, x1 , y1 - radius);
+ cairo_curve_to (cr, x1, y1, x1, y1, x1 - radius, y1);
+ cairo_line_to (cr, x0 + radius, y1);
+ cairo_curve_to (cr, x0, y1, x0, y1, x0, y1- radius);
+ }
+ }
+ cairo_close_path (cr);
+
+ cairo_pattern_t *pat=
+ //cairo_pattern_create_linear (0.0, 0.0, 0.0, 1.0);
+ cairo_pattern_create_radial (0.25, 0.24, 0.11, 0.24, 0.14, 0.35);
+ cairo_pattern_set_extend (pat, CAIRO_EXTEND_REFLECT);
+
+ cairo_pattern_add_color_stop_rgba (pat, 1.0, r, g, b, 1);
+ cairo_pattern_add_color_stop_rgba (pat, 0.0, 1, 1, 1, 1);
+ cairo_set_source (cr, pat);
+ cairo_fill_preserve (cr);
+ cairo_pattern_destroy (pat);
+
+ //cairo_set_source_rgb (cr, 0.5,0.5,1); cairo_fill_preserve (cr);
+ cairo_set_source_rgba (cr, 0, 0, 0.5, 0.3);
+ cairo_stroke (cr);
+
+ cairo_set_font_size (cr, 0.08);
+ centered_text(cr,x0,y0,rect_width, rect_height, "FLTK loves Cairo!");
+
+}
+// The cairo rendering cb called during Fl_Cairo_Window::draw() :
+static void my_cairo_draw_cb(Fl_Cairo_Window* window, cairo_t* cr) {
+
+ int w= window->w(), h = window->h();
+
+ cairo_set_line_width (cr, DEF_WIDTH);
+ cairo_scale (cr, w,h);
+
+ round_button(cr,0.1,0.05,0.8,0.2,0.4,0,0,1);
+ round_button(cr,0.1,0.35,0.8,0.2,0.4,1,0,0);
+ round_button(cr,0.1,0.65,0.8,0.2,0.4,0,1,0);
+ return;
+}
+
+int main(int argc, char** argv) {
+#ifdef AUTOLINK
+ Fl::cairo_autolink_context(true);
+#endif
+ Fl_Cairo_Window window(300,300);
+
+ window.resizable(&window);
+ window.color(FL_WHITE);
+ window.show(argc,argv);
+ window.set_draw_cb(my_cairo_draw_cb);
+
+ return Fl::run();
+}
+#else
+#include <FL/fl_ask.H>
+
+int main(int argc, char** argv) {
+ fl_message("please configure fltk with CAIRO enabled (--enable-cairo)");
+ return 0;
+}
+#endif
+
+//
+// End of "$Id: arc.cxx 5115 2006-05-12 16:00:00Z fabien $".
+//