|
|
commit 6546814a23ac8653916ca9a5e97f2110889ade3d
Author: Greg Ercolano <erco@seriss.com>
AuthorDate: Sun Jan 16 15:22:16 2022 -0800
Commit: Greg Ercolano <erco@seriss.com>
CommitDate: Sun Jan 16 15:22:16 2022 -0800
For issue #358 - adds examples/cairo-draw-x.cxx
Since this is the first cairo example in the examples directory,
it necessarily involved changes to the Makefile and to fltk-config
to properly handle the absence/existance of the cairo libs.
TBD: Add docs to the cario widget describing coordinate system
and how it differs from the default cairo normalized coordinate system.
examples/Makefile | 9 ++++++++
examples/Makefile.FLTK | 16 +++++++------
examples/cairo-draw-x.cxx | 58 +++++++++++++++++++++++++++++++++++++++++++++++
fltk-config.in | 11 +++++++--
4 files changed, 85 insertions(+), 9 deletions(-)
diff --git examples/Makefile examples/Makefile
index 0ef8550..00b8aca 100644
--- examples/Makefile
+++ examples/Makefile
@@ -6,6 +6,7 @@ SHELL = /bin/sh
# Executables
ALL = browser-simple$(EXEEXT) \
+ cairo-draw-x$(EXEEXT) \
chart-simple$(EXEEXT) \
draggable-group$(EXEEXT) \
howto-add_fd-and-popen$(EXEEXT) \
@@ -44,6 +45,14 @@ ALL = browser-simple$(EXEEXT) \
# default target -- build everything
default all: $(ALL)
+# Special rules for building cairo app
+cairo-draw-x.o: cairo-draw-x.cxx
+ @echo "*** Compile $<..."
+ $(CXX) -I.. $(CXXFLAGS_CAIRO) -c $< -o $@
+cairo-draw-x$(EXEEXT): cairo-draw-x.o
+ @echo "*** Link $<..."
+ $(CXX) $< $(LINKFLTK) $(LINKFLTK_CAIRO) -o $@
+
# clean everything
clean:
$(RM) $(ALL)
diff --git examples/Makefile.FLTK examples/Makefile.FLTK
index 52b7299..902797c 100644
--- examples/Makefile.FLTK
+++ examples/Makefile.FLTK
@@ -16,13 +16,15 @@ ifeq '$(OS)' "Windows_NT"
EXEEXT = .exe
endif
-FLTKCONFIG = ../fltk-config
-CXX = $(shell $(FLTKCONFIG) --cxx)
-CXXFLAGS = $(shell $(FLTKCONFIG) --cxxflags) -Wall -I.
-LINKFLTK = $(shell $(FLTKCONFIG) --ldstaticflags)
-LINKFLTK_GL = $(shell $(FLTKCONFIG) --use-gl --ldstaticflags)
-LINKFLTK_IMG = $(shell $(FLTKCONFIG) --use-images --ldstaticflags)
-LINKFLTK_ALL = $(shell $(FLTKCONFIG) --use-images --use-gl --ldstaticflags)
+FLTKCONFIG = ../fltk-config
+CXX = $(shell $(FLTKCONFIG) --cxx)
+CXXFLAGS = $(shell $(FLTKCONFIG) --cxxflags) -Wall -I.
+LINKFLTK = $(shell $(FLTKCONFIG) --ldstaticflags)
+LINKFLTK_GL = $(shell $(FLTKCONFIG) --use-gl --ldstaticflags)
+LINKFLTK_IMG = $(shell $(FLTKCONFIG) --use-images --ldstaticflags)
+LINKFLTK_ALL = $(shell $(FLTKCONFIG) --use-images --use-gl --ldstaticflags)
+CXXFLAGS_CAIRO = $(shell $(FLTKCONFIG) --use-cairo --cxxflags)
+LINKFLTK_CAIRO = $(shell $(FLTKCONFIG) --use-cairo --ldstaticflags)
.SUFFIXES: .cxx .h .fl .o $(EXEEXT)
# HOW TO COMPILE
diff --git examples/cairo-draw-x.cxx examples/cairo-draw-x.cxx
new file mode 100644
index 0000000..8129e60
--- /dev/null
+++ examples/cairo-draw-x.cxx
@@ -0,0 +1,58 @@
+//
+// Simple demo of drawing an "X" in Cairo (antialiased lines)
+//
+// Copyright 1998-2022 by Bill Spitzak and others.
+//
+// This library is free software. Distribution and use rights are outlined in
+// the file "COPYING" which should have been included with this file. If this
+// file is missing or damaged, see the license at:
+//
+// https://www.fltk.org/COPYING.php
+//
+// Please see the following page on how to report bugs and issues:
+//
+// https://www.fltk.org/bugs.php
+//
+
+#include <FL/Fl.H> // includes <FL/fl_config.h>
+
+#ifdef FLTK_HAVE_CAIRO // Builds example code only if cairo enabled
+#include <FL/Fl_Cairo_Window.H>
+
+// Cairo rendering cb called during Fl_Cairo_Window::draw()
+static void my_cairo_draw_cb(Fl_Cairo_Window *window, cairo_t *cr) {
+ const double xmax = (window->w() - 1);
+ const double ymax = (window->h() - 1);
+
+ // Draw green "X"
+ // Draws an X to four corners of resizable window.
+ // See Fl_Cairo_Window docs for more info.
+ //
+ cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST); // use best antialiasing
+ cairo_set_line_width(cr, 1.00); // line width for drawing
+ cairo_set_source_rgb(cr, 1.0, 0.5, 0.0); // orange
+ cairo_move_to(cr, 0.0, 0.0); cairo_line_to(cr, xmax, ymax); // draw diagonal "\"
+ cairo_move_to(cr, 0.0, ymax); cairo_line_to(cr, xmax, 0.0); // draw diagonal "/"
+ cairo_stroke(cr); // stroke the lines
+}
+
+int main(int argc, char **argv) {
+ Fl_Cairo_Window window(300, 300, "Cairo Draw 'X'");
+ window.color(FL_BLACK); // cairo window's default bg color
+ window.size_range(50,50,-1,-1); // allow resize 50,50 and up
+ window.resizable(&window); // allow window to be resized
+ window.set_draw_cb(my_cairo_draw_cb); // draw callback for cairo drawing
+ window.show(argc, argv);
+ return Fl::run();
+}
+
+// The code that follows just allows the example to build even if cairo wasn't enabled.
+#else // (!FLTK_HAVE_CAIRO)
+#include <FL/fl_ask.H>
+int main(int argc, char **argv) {
+ fl_message_title("This program needs a Cairo enabled FLTK library");
+ fl_message("Please configure FLTK with Cairo enabled (--enable-cairo or --enable-cairoext)\n"
+ "or one of the CMake options OPTION_CAIRO or OPTION_CAIROEXT, respectively.");
+ return 0;
+}
+#endif // (FLTK_HAVE_CAIRO)
diff --git fltk-config.in fltk-config.in
index bf0bdef..dd549dd 100644
--- fltk-config.in
+++ fltk-config.in
@@ -49,6 +49,13 @@ LDLIBS="@LIBS@"
OPTIM="@OPTIM@"
CAIROFLAGS="@CAIROFLAGS@"
+# Config
+if grep -q '^#define FLTK_HAVE_CAIRO 1' $selfdir/FL/fl_config.h; then
+ FLTK_HAVE_CAIRO=1
+else
+ FLTK_HAVE_CAIRO=0
+fi
+
# Check for local invocation, and update paths accordingly...
if test -f "$selfdir/FL/Fl_Window.H"; then
includedir="$selfdir"
@@ -75,7 +82,7 @@ if test -d $includedir/FL/images; then
CXXFLAGS="-I$includedir/FL/images $CXXFLAGS"
fi
-if test -f "$libdir/libfltk_cairo.a"; then
+if [ $FLTK_HAVE_CAIRO = 1 ]; then
CFLAGS="$CAIROFLAGS $CFLAGS"
CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
fi
@@ -249,7 +256,7 @@ if test x$use_images = xyes; then
LDSTATIC="$libdir/libfltk_images.a $STATICIMAGELIBS $LDSTATIC"
fi
-if test x$use_cairo = xyes; then
+if test x$use_cairo = xyes -a $FLTK_HAVE_CAIRO = 1; then
LDLIBS="-lfltk_cairo$SHAREDSUFFIX $CAIROLIBS $LDLIBS"
LDSTATIC="$libdir/libfltk_cairo.a $CAIROLIBS $LDSTATIC"
fi
[ Direct Link to Message ] | |
|
| |