summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Cairo.H5
-rw-r--r--Makefile2
-rw-r--r--cairo/Fl_Cairo.cxx (renamed from src/Fl_Cairo.cxx)17
-rw-r--r--cairo/Makefile173
-rw-r--r--configh.in9
-rw-r--r--configure.in55
-rwxr-xr-xfltk-config.in20
-rw-r--r--makeinclude.in9
-rw-r--r--src/Fl.cxx2
-rw-r--r--src/Fl_Double_Window.cxx2
-rw-r--r--src/Fl_Menu_Window.cxx4
-rw-r--r--src/Fl_Overlay_Window.cxx2
-rw-r--r--src/Fl_Window.cxx2
-rw-r--r--src/Fl_mac.cxx8
-rw-r--r--src/Makefile10
-rw-r--r--test/Makefile3
-rw-r--r--test/cairo_test.cxx2
-rw-r--r--vc2005/fltk.lib.vcproj4
-rw-r--r--vc2005/fltkdll.vcproj38
19 files changed, 337 insertions, 30 deletions
diff --git a/FL/Fl_Cairo.H b/FL/Fl_Cairo.H
index c827216b3..e21373c03 100644
--- a/FL/Fl_Cairo.H
+++ b/FL/Fl_Cairo.H
@@ -44,6 +44,7 @@
# include <cairo-win32.h>
# elif defined(__APPLE_QUARTZ__)
# include <cairo-quartz.h>
+# else
# error Cairo is not supported on that platform.
# endif
@@ -65,7 +66,7 @@ public:
// access attributes
cairo_t* cc() const {return cc_;} ///< Gets the current cairo context
- bool autolink() const {return autolink_;} ///< Sets the autolink option. See Fl::cairo_autolink_context(bool)
+ bool autolink() const {return autolink_;} ///< Gets the autolink option. See Fl::cairo_autolink_context(bool)
/** Sets the current cairo context, \a own indicates cc deletion is handle externally by user */
void cc(cairo_t* c, bool own=true) {
if (cc_ && own_cc_) cairo_destroy(cc_);
@@ -73,7 +74,7 @@ public:
if (!cc_) window_=0;
own_cc_=own;
}
- void autolink(bool b) {autolink_ = b;} ///< Gets the autolink option
+ void autolink(bool b); ///< Sets the autolink option, only available with --enable-cairoext
void window(void* w) {window_=w;} ///< Sets the window \a w to keep track on
void* window() const {return window_;} ///< Gets the last window attached to a cc
void gc(void* c) {gc_=c;} ///< Sets the gc \a c to keep track on
diff --git a/Makefile b/Makefile
index be1381750..f21bd70ca 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@
include makeinclude
-DIRS = $(IMAGEDIRS) src fluid test documentation
+DIRS = $(IMAGEDIRS) $(CAIRODIR) src fluid test documentation
all: makeinclude fltk-config
for dir in $(DIRS); do\
diff --git a/src/Fl_Cairo.cxx b/cairo/Fl_Cairo.cxx
index eb79c37de..4fd456cce 100644
--- a/src/Fl_Cairo.cxx
+++ b/cairo/Fl_Cairo.cxx
@@ -34,8 +34,21 @@
// static Fl module initialization :
Fl_Cairo_State Fl::cairo_state_; ///< contains all necesary info for current cairo context mapping
+
+
// Fl cairo features implementation
+// Fl_Cairo_State class impl
+
+void Fl_Cairo_State::autolink(bool b) {
+#ifdef USE_CAIRO
+ autolink_ = b;
+#else
+ Fl::fatal("In Fl::autolink(bool) : Cairo autolink() feature is only "
+ "available with the enable-cairoext configure option, now quitting.");
+#endif
+}
+
/**
Provides a corresponding cairo context for window \a wi.
This is needed in a draw() override if Fl::cairo_autolink_context()
@@ -142,6 +155,10 @@ cairo_t * Fl::cairo_make_current(void *gc, int W, int H) {
Fl::cairo_cc(c);
return c;
}
+#else
+// just don't leave the libfltk_cairo lib empty to avoid warnings
+#include <FL/Fl_Export.H>
+FL_EXPORT int fltk_cairo_dummy() { return 1;}
#endif // HAVE_CAIRO
//
diff --git a/cairo/Makefile b/cairo/Makefile
new file mode 100644
index 000000000..8381369de
--- /dev/null
+++ b/cairo/Makefile
@@ -0,0 +1,173 @@
+#
+# "$Id: Makefile 5667 2007-02-07 02:35:44Z mike $"
+#
+# PNG library makefile for the Fast Light Toolkit (FLTK).
+#
+# Copyright 1997-2007 by Easy Software Products.
+#
+# 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 ../makeinclude
+
+#
+# Object files...
+#
+
+CAIROOBJECTS = Fl_Cairo.o
+
+$(CAIROLIBNAME): $(CAIROOBJECTS)
+ echo $(LIBCOMMAND) $@ ...
+ $(RM) $@
+ $(LIBCOMMAND) $@ $(CAIROOBJECTS)
+ $(RANLIB) $@
+
+libfltk_cairo.so.1.3: $(CAIROOBJECTS) libfltk.so.1.3
+ echo $(DSOCOMMAND) $@ ...
+ $(DSOCOMMAND) $@ $(CAIROOBJECTS) -L. $(IMAGELIBS) -lfltk
+ $(RM) libfltk_cairo.so
+ $(LN) libfltk_cairo.so.1.3 libfltk_cairo.so
+
+libfltk_cairo.sl.1.3: $(CAIROOBJECTS) libfltk.sl.1.3
+ echo $(DSOCOMMAND) $@ ...
+ $(DSOCOMMAND) $@ $(CAIROOBJECTS) -L. $(IMAGELIBS) -lfltk
+ $(RM) libfltk_cairo.sl
+ $(LN) libfltk_cairo.sl.1.3 libfltk_cairo.sl
+
+libfltk_cairo.1.3.dylib: $(CAIROOBJECTS) libfltk.1.3.dylib
+ echo $(DSOCOMMAND) $@ ...
+ $(DSOCOMMAND) $@ \
+ -install_name $(libdir)/$@ \
+ -current_version 1.3.0 \
+ -compatibility_version 1.3.0 \
+ $(CAIROOBJECTS) -L. $(LDLIBS) $(IMAGELIBS) -lfltk
+ $(RM) libfltk_cairo.dylib
+ $(LN) libfltk_cairo.1.3.dylib libfltk_cairo.dylib
+
+libfltk_cairo_s.a: $(CAIROOBJECTS)
+ echo $(DSOCOMMAND) libfltk_cairo_s.o ...
+ $(DSOCOMMAND) libfltk_cairo_s.o $(CAIROOBJECTS)
+ echo $(LIBCOMMAND) libfltk_cairo_s.a libfltk_cairo_s.o
+ $(RM) $@
+ $(LIBCOMMAND) libfltk_cairo_s.a libfltk_cairo_s.o
+ $(CHMOD) +x libfltk_cairo_s.a
+
+
+cygfltknox_cairo-1.3.dll: $(CAIROLIBNAME) cygfltknox-1.3.dll
+ echo $(DSOCOMMAND) $(CAIROLIBNAME) ...
+ $(DSOCOMMAND) $(CAIROLIBNAME) -Wl,--no-whole-archive \
+ -Wl,--out-implib=libfltk_cairo.dll.a \
+ -L. -lfltk $(CAIROLIBS) $(LDLIBS)
+
+mgwfltknox_cairo-1.3.dll: $(CAIROLIBNAME) mgwfltknox-1.3.dll
+ echo $(DSOCOMMAND) $(CAIROLIBNAME) ...
+ $(DSOCOMMAND) $(CAIROLIBNAME) -Wl,--no-whole-archive \
+ -Wl,--out-implib=libfltk_cairo.dll.a \
+ -L. -lfltk $(CAIROLIBS) $(LDLIBS)
+
+#
+# Make all of the targets...
+#
+
+all: $(CAIROLIBNAME) $(CAIRODSONAME)
+
+
+#
+# Clean all of the targets and object files...
+#
+
+clean:
+ -$(RM) *.o *.dll.a core.* *~ *.bak *.bck
+ -$(RM) $(CAIROOBJECTS) $(CAIROLIBNAME) $(CAIRODSONAME) \
+ libfltk_cairo.so libfltk_cairo.sl libfltk_cairo.dylib
+
+#
+# Install everything...
+#
+
+install: $(CAIROLIBNAME) $(CAIRODSONAME)
+ echo "Installing libfltk_cairo$(LIBEXT) in $(libdir)..."
+ -$(INSTALL_DIR) $(DESTDIR)$(libdir)
+ $(INSTALL_LIB) $(CAIROLIBNAME) $(DESTDIR)$(libdir)
+
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.so.1.3; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.so*;\
+ $(INSTALL_LIB) libfltk_cairo.so.1.3 $(DESTDIR)$(libdir); \
+ $(LN) libfltk_cairo.so.1.3 $(DESTDIR)$(libdir)/libfltk_cairo.so;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.sl.1.3; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.sl*;\
+ $(INSTALL_LIB) libfltk_cairo.sl.1.3 $(DESTDIR)$(libdir); \
+ $(LN) libfltk_cairo.sl.1.3 $(DESTDIR)$(libdir)/libfltk_cairo.sl;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.1.3.dylib; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.*dylib;\
+ $(INSTALL_LIB) libfltk_cairo.1.3.dylib $(DESTDIR)$(libdir); \
+ $(LN) libfltk_cairo.1.3.dylib $(DESTDIR)$(libdir)/libfltk_cairo.dylib;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo_s.a; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo_s.a;\
+ $(INSTALL_LIB) libfltk_cairo_s.a $(DESTDIR)$(libdir); \
+ fi
+ if test x$(CAIRODSONAME) = xcygfltknox_cairo-1.3.dll; then\
+ $(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
+ $(INSTALL_LIB) $(CAIRODSONAME) $(DESTDIR)$(bindir); \
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
+ $(INSTALL_LIB) libfltk_cairo.dll.a $(DESTDIR)$(libdir); \
+ fi
+ if test x$(CAIRODSONAME) = xmgwfltknox_cairo-1.3.dll; then\
+ $(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
+ $(INSTALL_LIB) $(CAIRODSONAME) $(DESTDIR)$(bindir); \
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
+ $(INSTALL_LIB) libfltk_cairo.dll.a $(DESTDIR)$(libdir); \
+ fi
+#
+# Uninstall everything...
+#
+
+uninstall:
+ echo "Uninstalling libfltk_cairo$(LIBEXT) in $(libdir)..."
+ if test x$(CAIROLIBNAME) != x; then\
+ $(RM) $(DESTDIR)$(libdir)/$(CAIROLIBNAME);\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.so.1.3; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.so*;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.sl.1.3; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.sl*;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo.1.3.dylib; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.*dylib;\
+ fi
+ if test x$(CAIRODSONAME) = xlibfltk_cairo_s.a; then\
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo_s.a;\
+ fi
+ if test x$(CAIRODSONAME) = xcygfltknox_cairo-1.3.dll; then\
+ $(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
+ fi
+ if test x$(CAIRODSONAME) = xmgwfltknox_cairo-1.3.dll; then\
+ $(RM) $(DESTDIR)$(bindir)/$(CAIRODSONAME); \
+ $(RM) $(DESTDIR)$(libdir)/libfltk_cairo.dll.a;\
+ fi
+
+$(CAIROOBJECTS): ../makeinclude
+
+#
+# End of "$Id: Makefile 5667 2007-02-07 02:35:44Z mike $".
+#
diff --git a/configh.in b/configh.in
index d99e95aa8..a2de8d568 100644
--- a/configh.in
+++ b/configh.in
@@ -247,6 +247,15 @@
#undef HAVE_LIBJPEG
/*
+ * USE_CAIRO
+ *
+ * Do we have the cairo library available and want extended cairo use in fltk ?
+ * will implies to link cairo.lib in all fltk based apps.
+ */
+
+#undef USE_CAIRO
+
+/*
* HAVE_CAIRO
*
* Do we have the cairo library available?
diff --git a/configure.in b/configure.in
index a46625ae1..d6acd8a7d 100644
--- a/configure.in
+++ b/configure.in
@@ -97,11 +97,13 @@ LIBNAME="../lib/libfltk.a"
FLLIBNAME="../lib/libfltk_forms.a"
GLLIBNAME="../lib/libfltk_gl.a"
IMGLIBNAME="../lib/libfltk_images.a"
+CAIROLIBNAME="../lib/libfltk_cairo.a"
AC_SUBST(FLLIBNAME)
AC_SUBST(GLDEMOS)
AC_SUBST(GLLIBNAME)
AC_SUBST(IMGLIBNAME)
+AC_SUBST(CAIROLIBNAME)
AC_SUBST(LIBEXT)
AC_SUBST(LIBNAME)
AC_SUBST(LINKFLTK)
@@ -131,6 +133,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.$FL_API_VERSION.dylib"
GLDSONAME="libfltk_gl.$FL_API_VERSION.dylib"
IMGDSONAME="libfltk_images.$FL_API_VERSION.dylib"
+ CAIRODSONAME="libfltk_cairo.$FL_API_VERSION.dylib"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -dynamiclib -lc -o"
;;
@@ -139,6 +142,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.so.$FL_API_VERSION"
GLDSONAME="libfltk_gl.so.$FL_API_VERSION"
IMGDSONAME="libfltk_images.so.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.so.$FL_API_VERSION"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -h \$@ \$(LDLIBS) -G $DEBUGFLAG -o"
if test "x$libdir" != "x/usr/lib"; then
DSOLINK="-R$libdir"
@@ -149,6 +153,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.sl.$FL_API_VERSION"
GLDSONAME="libfltk_gl.sl.$FL_API_VERSION"
IMGDSONAME="libfltk_images.sl.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.sl.$FL_API_VERSION"
DSOCOMMAND="ld \$(DSOFLAGS) -b -z +h \$@ $DEBUGFLAG -o"
if test "x$libdir" != "x/usr/lib"; then
DSOLINK="-Wl,-rpath,$libdir"
@@ -159,6 +164,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.so.$FL_API_VERSION"
GLDSONAME="libfltk_gl.so.$FL_API_VERSION"
IMGDSONAME="libfltk_images.so.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.so.$FL_API_VERSION"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@,-set_version,sgi1.1 \$(LDLIBS) -shared $DEBUGFLAG -o"
if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32" -a "x$libdir" != "x/usr/lib64"; then
DSOLINK="-Wl,-rpath,$libdir"
@@ -169,6 +175,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.so.$FL_API_VERSION"
GLDSONAME="libfltk_gl.so.$FL_API_VERSION"
IMGDSONAME="libfltk_images.so.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.so.$FL_API_VERSION"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
if test "x$libdir" != "x/usr/lib" -a "x$libdir" != "x/usr/lib32"; then
DSOLINK="-Wl,-rpath,$libdir"
@@ -179,6 +186,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.so.$FL_API_VERSION"
GLDSONAME="libfltk_gl.so.$FL_API_VERSION"
IMGDSONAME="libfltk_images.so.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.so.$FL_API_VERSION"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared -fPIC $DEBUGFLAG -o"
if test "x$libdir" != "x/usr/lib"; then
DSOLINK="-Wl,-rpath,$libdir"
@@ -189,6 +197,7 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms_s.a"
GLDSONAME="libfltk_gl_s.a"
IMGDSONAME="libfltk_images_s.a"
+ CAIRODSONAME="libfltk_cairo_s.a"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-bexpall,-bM:SRE,-bnoentry -o"
SHAREDSUFFIX="_s"
;;
@@ -199,11 +208,13 @@ if test x$enable_shared = xyes; then
FLDSONAME="mgwfltknox_forms-$FL_API_VERSION.dll"
GLDSONAME="mgwfltknox_gl-$FL_API_VERSION.dll"
IMGDSONAME="mgwfltknox_images-$FL_API_VERSION.dll"
+ CAIRODSONAME="mgwfltknox_cairo-$FL_API_VERSION.dll"
else
DSONAME="cygfltknox-$FL_API_VERSION.dll"
FLDSONAME="cygfltknox_forms-$FL_API_VERSION.dll"
GLDSONAME="cygfltknox_gl-$FL_API_VERSION.dll"
IMGDSONAME="cygfltknox_images-$FL_API_VERSION.dll"
+ CAIRODSONAME="cygfltknox_cairo-$FL_API_VERSION.dll"
fi
#-----------------------------------------------------------
# -Wl,--enable-runtime-pseudo-reloc: See str 1585
@@ -221,11 +232,12 @@ if test x$enable_shared = xyes; then
FLDSONAME="libfltk_forms.so.$FL_API_VERSION"
GLDSONAME="libfltk_gl.so.$FL_API_VERSION"
IMGDSONAME="libfltk_images.so.$FL_API_VERSION"
+ CAIRODSONAME="libfltk_cairo.so.$FL_API_VERSION"
DSOCOMMAND="\$(CXX) \$(DSOFLAGS) -Wl,-soname,\$@ \$(LDLIBS) -shared $DEBUGFLAG -o"
;;
esac
- LINKSHARED="-L../src -lfltk_images$SHAREDSUFFIX -lfltk_forms$SHAREDSUFFIX -lfltk$SHAREDSUFFIX"
+ LINKSHARED="-L../src -lfltk_cairo$SHAREDSUFFIX -lfltk_images$SHAREDSUFFIX -lfltk_forms$SHAREDSUFFIX -lfltk$SHAREDSUFFIX"
else
DSOCOMMAND="echo"
DSOLINK=""
@@ -233,10 +245,11 @@ else
FLDSONAME=""
GLDSONAME=""
IMGDSONAME=""
+ CAIRODSONAME=""
PICFLAG=0
SHAREDSUFFIX=""
FLUID="fluid"
- LINKSHARED="../lib/libfltk_images.a ../lib/libfltk_forms.a ../lib/libfltk.a"
+ LINKSHARED="../lib/libfltk_cairo.a ../lib/libfltk_images.a ../lib/libfltk_forms.a ../lib/libfltk.a"
fi
AC_SUBST(DSOCOMMAND)
@@ -246,6 +259,7 @@ AC_SUBST(DSONAME)
AC_SUBST(FLDSONAME)
AC_SUBST(GLDSONAME)
AC_SUBST(IMGDSONAME)
+AC_SUBST(CAIRODSONAME)
AC_SUBST(SHAREDSUFFIX)
AC_SUBST(LINKSHARED)
AC_SUBST(FLUID)
@@ -558,15 +572,41 @@ dnl See if we need a .exe extension on executables...
AC_EXEEXT
dnl Check for Cairo library unless disabled...
-AC_ARG_ENABLE(cairo,[ --enable-cairo use Cairo graphics (default=no)])
+CAIRODIR=""
+CAIROFLAGS=""
+LINKFLTKCAIRO=""
+CAIROLIBS=""
+
+AC_ARG_ENABLE(cairo,[ --enable-cairoext use fltk code instrumentation for cairo extended use (default=no)])
+if test x$enable_cairoext = xyes; then
+ AC_DEFINE(USE_CAIRO)
+ AC_DEFINE(HAVE_CAIRO)
+ dnl FIXME This part should be fixed so configure do not depend on
+ dnl we do not rely on pkg-config .
+ CAIRODIR="cairo"
+ CAIROFLAGS="`pkg-config --cflags cairo`"
+ CAIROLIBS="-lcairo -lpixman-1"
+ CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
+ LINKFLTKCAIRO="../lib/libfltk_cairo.a"
+ LIBS="$CAIROLIBS $LINKFLTKCAIRO $LIBS"
+fi
+
+dnl Check for Cairo library unless disabled...
+AC_ARG_ENABLE(cairo,[ --enable-cairo use lib Cairo (default=no)])
if test x$enable_cairo = xyes; then
AC_DEFINE(HAVE_CAIRO)
dnl FIXME This part should be fixed so configure do not depend on
dnl we do not rely on pkg-config .
- CXXFLAGS="`pkg-config --cflags cairo` $CXXFLAGS"
+ CAIRODIR="cairo"
+ CAIROFLAGS="`pkg-config --cflags cairo`"
CAIROLIBS="-lcairo -lpixman-1"
- LIBS="-lcairo -lpixman-1 $LIBS"
+ CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
+ LINKFLTKCAIRO="../lib/libfltk_cairo.a"
fi
+AC_SUBST(CAIRODIR)
+AC_SUBST(CAIROFLAGS)
+AC_SUBST(CAIROLIBS)
+AC_SUBST(LINKFLTKCAIRO)
dnl Check for pthreads for multi-threaded apps...
have_pthread=no
@@ -1130,7 +1170,10 @@ else
echo " ZLIB=Builtin"
fi
if test x$enable_cairo = xyes; then
- echo " CAIRO=System"
+ echo " CAIRO=lib"
+fi
+if test x$enable_cairoext = xyes; then
+ echo " CAIRO=internal_use"
fi
diff --git a/fltk-config.in b/fltk-config.in
index 24a379d74..5fd102155 100755
--- a/fltk-config.in
+++ b/fltk-config.in
@@ -56,6 +56,7 @@ CXXFLAGS="@CXXFLAGS@ @LARGEFILE@ @PTHREAD_FLAGS@"
LDFLAGS="@LDFLAGS@"
LDLIBS="@LIBS@"
OPTIM="@OPTIM@"
+CAIROFLAGS="@CAIROFLAGS@"
# Check for local invocation, and update paths accordingly...
if test -f "$selfdir/FL/Fl_Window.H"; then
@@ -84,11 +85,17 @@ if test -d $includedir/FL/images; then
CXXFLAGS="-I$includedir/FL/images $CXXFLAGS"
fi
+if test -f "$libdir/libfltk_cairo.a"; then
+ CFLAGS="$CAIROFLAGS $CFLAGS"
+ CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
+fi
+
# libraries to link with:
LIBNAME="@LIBNAME@"
DSONAME="@DSONAME@"
DSOLINK="@DSOLINK@"
IMAGELIBS="@IMAGELIBS@"
+CAIROLIBS="@CAIROLIBS@"
SHAREDSUFFIX="@SHAREDSUFFIX@"
usage ()
@@ -103,6 +110,7 @@ Options telling what we are doing:
[--use-images] use extra image formats (PNG, JPEG)
[--use-glut] use glut compatibility layer
[--use-forms] use forms compatibility layer
+ [--use-cairo] use cairo graphics lib
Options telling what information we request:
[--cc] return C compiler used to compile FLTK
@@ -170,6 +178,9 @@ do
--use-images)
use_images=yes
;;
+ --use-cairo)
+ use_cairo=yes
+ ;;
--cflags)
echo_cflags=yes
;;
@@ -235,6 +246,11 @@ if test x$use_images = xyes; then
LDSTATIC="$libdir/libfltk_images.a $IMAGELIBS $LDSTATIC"
fi
+if test x$use_cairo = xyes; then
+ LDLIBS="-lfltk_cairo$SHAREDSUFFIX $CAIROLIBS $LDLIBS"
+ LDSTATIC="$libdir/libfltk_cairo.a $CAIROLIBS $LDSTATIC"
+fi
+
LDLIBS="$DSOLINK $LDFLAGS $libs $LDLIBS"
LDSTATIC="$LDFLAGS $LDSTATIC"
@@ -351,6 +367,10 @@ if test "$echo_libs" = "yes"; then
echo $libdir/libfltk_gl.a
fi
+ if test x$use_cairo = xyes; then
+ echo $libdir/libfltk_cairo.a
+ fi
+
if test x$use_images = xyes; then
echo $libdir/libfltk_images.a
diff --git a/makeinclude.in b/makeinclude.in
index 500f3dbbe..88bcad9d8 100644
--- a/makeinclude.in
+++ b/makeinclude.in
@@ -64,6 +64,7 @@ LIBNAME = @LIBNAME@
FLLIBNAME = @FLLIBNAME@
GLLIBNAME = @GLLIBNAME@
IMGLIBNAME = @IMGLIBNAME@
+CAIROLIBNAME = @CAIROLIBNAME@
LIBCOMMAND = @LIBCOMMAND@
LIBEXT = @LIBEXT@
RANLIB = @RANLIB@
@@ -71,10 +72,13 @@ DSONAME = @DSONAME@
FLDSONAME = @FLDSONAME@
GLDSONAME = @GLDSONAME@
IMGDSONAME = @IMGDSONAME@
+CAIRODSONAME = @IMGDSONAME@
DSOCOMMAND = @DSOCOMMAND@
# libraries to link with:
AUDIOLIBS = @AUDIOLIBS@
+CAIROLIBS = @CAIROLIBS@
+CAIROFLAGS = @CAIROFLAGS@
DSOFLAGS = -L. @DSOFLAGS@
LDFLAGS = $(OPTIM) @LDFLAGS@
LDLIBS = @LIBS@
@@ -83,12 +87,13 @@ LINKFLTK = @LINKFLTK@
LINKFLTKGL = @LINKFLTKGL@
LINKFLTKFORMS = @LINKFLTKFORMS@ @LINKFLTK@
LINKFLTKIMG = @LINKFLTKIMG@ @LINKFLTK@ $(IMAGELIBS)
-LINKSHARED = @DSOLINK@ @LINKSHARED@ $(IMAGELIBS)
+LINKFLTKCAIRO = @LINKFLTKCAIRO@ $(CAIROLIBS)
+LINKSHARED = @DSOLINK@ @LINKSHARED@ $(IMAGELIBS) $(CAIROLIBS)
IMAGELIBS = -L../lib @IMAGELIBS@
# image libraries to build...
IMAGEDIRS = @JPEG@ @ZLIB@ @PNG@
-
+CAIRODIR = @CAIRODIR@
# The extension to use for executables...
EXEEXT = @EXEEXT@
diff --git a/src/Fl.cxx b/src/Fl.cxx
index 3c826e774..57d8cf778 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -1184,7 +1184,7 @@ void Fl_Window::hide() {
fl_release_dc(fl_window, fl_gc);
fl_window = (HWND)-1;
fl_gc = 0;
-# ifdef HAVE_CAIRO
+# ifdef USE_CAIRO
if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0);
# endif
}
diff --git a/src/Fl_Double_Window.cxx b/src/Fl_Double_Window.cxx
index ffaff2663..5dcd2dd5d 100644
--- a/src/Fl_Double_Window.cxx
+++ b/src/Fl_Double_Window.cxx
@@ -323,7 +323,7 @@ void Fl_Double_Window::flush(int eraseoverlay) {
RestoreDC(fl_gc, save);
DeleteDC(fl_gc);
fl_gc = _sgc;
- //# if defined(HAVE_CAIRO)
+ //# if defined(USE_CAIRO)
//if Fl::cairo_autolink_context() Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
//# endif
#elif defined(__APPLE__)
diff --git a/src/Fl_Menu_Window.cxx b/src/Fl_Menu_Window.cxx
index a7f17c7d0..ba6cb7043 100644
--- a/src/Fl_Menu_Window.cxx
+++ b/src/Fl_Menu_Window.cxx
@@ -69,8 +69,8 @@ void Fl_Menu_Window::flush() {
fl_window = myi->xid;
if (!gc) {
gc = XCreateGC(fl_display, myi->xid, 0, 0);
-# if defined(HAVE_CAIRO)
- Fl::cairo_make_current(gc); // capture gc changes automatically to update the cairo context adequately
+# if defined(USE_CAIRO)
+ if(Fl::autolink_context()) Fl::cairo_make_current(gc); // capture gc changes automatically to update the cairo context adequately
# endif
}
fl_gc = gc;
diff --git a/src/Fl_Overlay_Window.cxx b/src/Fl_Overlay_Window.cxx
index 4e76566c9..0d9551968 100644
--- a/src/Fl_Overlay_Window.cxx
+++ b/src/Fl_Overlay_Window.cxx
@@ -135,7 +135,7 @@ void _Fl_Overlay::flush() {
gc = XCreateGC(fl_display, fl_xid(this), 0, 0);
}
fl_gc = gc;
-#if defined(HAVE_CAIRO)
+#if defined(USE_CAIRO)
if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
#endif
fl_overlay = 1;
diff --git a/src/Fl_Window.cxx b/src/Fl_Window.cxx
index 70b9c7f47..3c6b17e0e 100644
--- a/src/Fl_Window.cxx
+++ b/src/Fl_Window.cxx
@@ -133,7 +133,7 @@ void Fl_Window::draw() {
y(savey);
x(savex);
-# if defined(HAVE_CAIRO)
+# if defined(USE_CAIRO)
Fl::cairo_make_current(this); // checkout if an update is necessary
# endif
}
diff --git a/src/Fl_mac.cxx b/src/Fl_mac.cxx
index e889db4d8..c7737213c 100644
--- a/src/Fl_mac.cxx
+++ b/src/Fl_mac.cxx
@@ -2351,7 +2351,7 @@ void Fl_Window::make_current()
fl_gc = i->gc;
CGContextSaveGState(fl_gc);
Fl_X::q_fill_context();
-#if defined(HAVE_CAIRO) && defined (__APPLE_QUARTZ__)
+#if defined(USE_CAIRO) && defined (__APPLE_QUARTZ__)
if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this); // capture gc changes automatically to update the cairo context adequately
#endif
@@ -2359,7 +2359,7 @@ void Fl_Window::make_current()
fl_clip_region( 0 );
SetPortClipRegion( GetWindowPort(i->xid), fl_window_region );
-#if defined(__APPLE_QUARTZ__) && defined(HAVE_CAIRO)
+#if defined(__APPLE_QUARTZ__) && defined(USE_CAIRO)
// update the cairo_t context
if (Fl::cairo_autolink_context()) Fl::cairo_make_current(this);
#endif
@@ -2410,8 +2410,8 @@ void Fl_X::q_release_context(Fl_X *x) {
fprintf(stderr, "Error %d in QDEndCGContext\n", (int)err);
}
fl_gc = 0;
-#if defined(HAVE_CAIRO) && defined (__APPLE_QUARTZ__)
- Fl::cairo_make_current((Fl_Window*) 0); // capture gc changes automatically to update the cairo context adequately
+#if defined(USE_CAIRO) && defined (__APPLE_QUARTZ__)
+ if (Fl::cairo_autolink_context()) Fl::cairo_make_current((Fl_Window*) 0); // capture gc changes automatically to update the cairo context adequately
#endif
}
diff --git a/src/Makefile b/src/Makefile
index f7d15b793..30a623d65 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -34,7 +34,6 @@ CPPFILES = \
Fl_Browser_load.cxx \
Fl_Box.cxx \
Fl_Button.cxx \
- Fl_Cairo.cxx \
Fl_Chart.cxx \
Fl_Check_Browser.cxx \
Fl_Check_Button.cxx \
@@ -188,6 +187,7 @@ IMGCPPFILES = \
Fl_PNG_Image.cxx \
Fl_PNM_Image.cxx
+
CFILES = fl_call_main.c flstring.c scandir.c numericsort.c vsnprintf.c fl_utf.c
UTF8CFILES = \
@@ -211,7 +211,7 @@ IMGOBJECTS = $(IMGCPPFILES:.cxx=.o)
all: $(LIBNAME) $(DSONAME) \
$(FLLIBNAME) $(FLDSONAME) \
$(GLLIBNAME) $(GLDSONAME) \
- $(IMGLIBNAME) $(IMGDSONAME)
+ $(IMGLIBNAME) $(IMGDSONAME)
$(LIBNAME): $(OBJECTS)
echo $(LIBCOMMAND) $@ ...
@@ -418,7 +418,7 @@ mgwfltknox_images-1.3.dll: $(IMGLIBNAME) mgwfltknox-1.3.dll
$(IMAGELIBS) $(LDLIBS)
clean:
- -$(RM) *.o *.dll.a core.* *~ *.bck *.bck
+ -$(RM) *.o *.dll.a core.* *~ *.bak *.bck
-$(RM) $(DSONAME) $(FLDSONAME) $(GLDSONAME) $(IMGDSONAME) \
$(LIBNAME) $(FLLIBNAME) $(GLLIBNAME) \
$(IMGLIBNAME) \
@@ -500,7 +500,7 @@ gl_start.o: ../FL/mac.H ../FL/win32.H
install: $(LIBNAME) $(DSONAME) \
$(FLLIBNAME) $(FLDSONAME) \
$(GLLIBNAME) $(GLDSONAME) \
- $(IMGLIBNAME) $(IMGDSONAME)
+ $(IMGLIBNAME) $(IMGDSONAME)
echo "Installing libraries in $(DESTDIR)$(libdir)..."
-$(INSTALL_DIR) $(DESTDIR)$(libdir)
-$(INSTALL_DIR) $(DESTDIR)$(bindir)
@@ -640,6 +640,7 @@ install: $(LIBNAME) $(DSONAME) \
$(INSTALL_LIB) libfltk_images.dll.a $(DESTDIR)$(libdir); \
fi
+
uninstall:
echo "Uninstalling libraries..."
$(RM) $(DESTDIR)$(libdir)/$(LIBNAME)
@@ -731,7 +732,6 @@ uninstall:
$(RM) $(DESTDIR)$(libdir)/libfltk_images.dll.a;\
fi
-
#
# End of "$Id$".
#
diff --git a/test/Makefile b/test/Makefile
index 7e46b93ba..5380661af 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -155,6 +155,7 @@ ALL = \
tile$(EXEEXT) \
tiled_image$(EXEEXT) \
valuators$(EXEEXT) \
+ cairotest$(EXEEXT) \
utf8$(EXEEXT)
@@ -464,6 +465,8 @@ shape$(EXEEXT): shape.o
$(CXX) $(ARCHFLAGS) $(LDFLAGS) -o $@ shape.o $(LINKFLTKGL) $(LINKFLTK) $(GLDLIBS)
cairo_test$(EXEEXT): cairo_test.o
+ echo Linking $@...
+ $(CXX) $(ARCHFLAGS) $(CAIROFLAGS) $(LDFLAGS) -o $@ cairo_test.o $(LINKFLTK) $(LINKFLTKCAIRO) $(GLDLIBS)
#
# End of "$Id$".
diff --git a/test/cairo_test.cxx b/test/cairo_test.cxx
index 6492d4d40..bbde8ef93 100644
--- a/test/cairo_test.cxx
+++ b/test/cairo_test.cxx
@@ -158,7 +158,7 @@ int main(int argc, char** argv) {
#include <FL/fl_ask.H>
int main(int argc, char** argv) {
- fl_message("please configure fltk with CAIRO enabled (--enable-cairo)");
+ fl_message("please configure fltk with CAIRO enabled (--enable-cairo or --enable-cairoext)");
return 0;
}
#endif
diff --git a/vc2005/fltk.lib.vcproj b/vc2005/fltk.lib.vcproj
index 31fbaf2cc..26c2c1a18 100644
--- a/vc2005/fltk.lib.vcproj
+++ b/vc2005/fltk.lib.vcproj
@@ -258,7 +258,7 @@
FavorSizeOrSpeed="0"
AdditionalIncludeDirectories="..\vc2005;..\zlib;..\png;..\jpeg;.."
PreprocessorDefinitions="HAVE_CAIRO=1, _CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_WINDOWS;WIN32_LEAN_AND_MEAN;VC_EXTRA_LEAN;WIN32_EXTRA_LEAN"
- RuntimeLibrary= "2"
+ RuntimeLibrary="2"
UsePrecompiledHeader="0"
PrecompiledHeaderFile=".\Release/fltk.lib.pch"
AssemblerListingLocation=".\Release/"
@@ -1772,7 +1772,7 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\src\Fl_Cairo.cxx"
+ RelativePath="..\cairo\Fl_Cairo.cxx"
>
</File>
<File
diff --git a/vc2005/fltkdll.vcproj b/vc2005/fltkdll.vcproj
index 9b61bff19..f90e119d0 100644
--- a/vc2005/fltkdll.vcproj
+++ b/vc2005/fltkdll.vcproj
@@ -1367,8 +1367,44 @@
</FileConfiguration>
</File>
<File
- RelativePath="..\src\Fl_Cairo.cxx"
+ RelativePath="..\cairo\Fl_Cairo.cxx"
>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Cairo|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Cairo|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ ObjectFile="$(IntDir)\$(InputName)1.obj"
+ XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
+ />
+ </FileConfiguration>
</File>
<File
RelativePath="..\src\Fl_Chart.cxx"