FLTK logo

[master] 6546814 - For issue #358 - adds examples/cairo-draw-x.cxx

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 6546814 - For issue #358 - adds examples/cairo-draw-x.cxx "Greg Ercolano" Jan 16, 2022  
 
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 ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.