summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFabien Costantini <fabien@onepost.net>2008-09-25 18:26:33 +0000
committerFabien Costantini <fabien@onepost.net>2008-09-25 18:26:33 +0000
commitffad932289d17877a506a51c5f2f32c743d747d8 (patch)
treef45d4fa0e5b42f4faad7c5aba99a3da01d243a9c /test
parentf9dc24a096d98abf3d3176eee74a759f886c4134 (diff)
+ Cairo branch merged after successful testing on Mac OS X 10.5.4, Linux Ubuntu 8.04,Windows XPSP2.
This integration is minimum as discussed, in particular it does not feature any fltk cairo drawing substitution as in fltk2. Still it provides all the fundations to go further even in next 1.4 ... By default *no* cairo features are implemented nor linked, it can only be activated by --enable-cairo whose default is false. Please visit the README.cairo for complete description. + fixed UTF8 compilation pb on linux ubuntu + minor comments fixes on the fly git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6350 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
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 $".
+//