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.
This commit is contained in:
parent
4041608e94
commit
6546814a23
@ -6,6 +6,7 @@ SHELL = /bin/sh
|
|||||||
|
|
||||||
# Executables
|
# Executables
|
||||||
ALL = browser-simple$(EXEEXT) \
|
ALL = browser-simple$(EXEEXT) \
|
||||||
|
cairo-draw-x$(EXEEXT) \
|
||||||
chart-simple$(EXEEXT) \
|
chart-simple$(EXEEXT) \
|
||||||
draggable-group$(EXEEXT) \
|
draggable-group$(EXEEXT) \
|
||||||
howto-add_fd-and-popen$(EXEEXT) \
|
howto-add_fd-and-popen$(EXEEXT) \
|
||||||
@ -44,6 +45,14 @@ ALL = browser-simple$(EXEEXT) \
|
|||||||
# default target -- build everything
|
# default target -- build everything
|
||||||
default all: $(ALL)
|
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 everything
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(ALL)
|
$(RM) $(ALL)
|
||||||
|
@ -16,13 +16,15 @@ ifeq '$(OS)' "Windows_NT"
|
|||||||
EXEEXT = .exe
|
EXEEXT = .exe
|
||||||
endif
|
endif
|
||||||
|
|
||||||
FLTKCONFIG = ../fltk-config
|
FLTKCONFIG = ../fltk-config
|
||||||
CXX = $(shell $(FLTKCONFIG) --cxx)
|
CXX = $(shell $(FLTKCONFIG) --cxx)
|
||||||
CXXFLAGS = $(shell $(FLTKCONFIG) --cxxflags) -Wall -I.
|
CXXFLAGS = $(shell $(FLTKCONFIG) --cxxflags) -Wall -I.
|
||||||
LINKFLTK = $(shell $(FLTKCONFIG) --ldstaticflags)
|
LINKFLTK = $(shell $(FLTKCONFIG) --ldstaticflags)
|
||||||
LINKFLTK_GL = $(shell $(FLTKCONFIG) --use-gl --ldstaticflags)
|
LINKFLTK_GL = $(shell $(FLTKCONFIG) --use-gl --ldstaticflags)
|
||||||
LINKFLTK_IMG = $(shell $(FLTKCONFIG) --use-images --ldstaticflags)
|
LINKFLTK_IMG = $(shell $(FLTKCONFIG) --use-images --ldstaticflags)
|
||||||
LINKFLTK_ALL = $(shell $(FLTKCONFIG) --use-images --use-gl --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)
|
.SUFFIXES: .cxx .h .fl .o $(EXEEXT)
|
||||||
|
|
||||||
# HOW TO COMPILE
|
# HOW TO COMPILE
|
||||||
|
58
examples/cairo-draw-x.cxx
Normal file
58
examples/cairo-draw-x.cxx
Normal file
@ -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)
|
@ -49,6 +49,13 @@ LDLIBS="@LIBS@"
|
|||||||
OPTIM="@OPTIM@"
|
OPTIM="@OPTIM@"
|
||||||
CAIROFLAGS="@CAIROFLAGS@"
|
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...
|
# Check for local invocation, and update paths accordingly...
|
||||||
if test -f "$selfdir/FL/Fl_Window.H"; then
|
if test -f "$selfdir/FL/Fl_Window.H"; then
|
||||||
includedir="$selfdir"
|
includedir="$selfdir"
|
||||||
@ -75,7 +82,7 @@ if test -d $includedir/FL/images; then
|
|||||||
CXXFLAGS="-I$includedir/FL/images $CXXFLAGS"
|
CXXFLAGS="-I$includedir/FL/images $CXXFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f "$libdir/libfltk_cairo.a"; then
|
if [ $FLTK_HAVE_CAIRO = 1 ]; then
|
||||||
CFLAGS="$CAIROFLAGS $CFLAGS"
|
CFLAGS="$CAIROFLAGS $CFLAGS"
|
||||||
CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
|
CXXFLAGS="$CAIROFLAGS $CXXFLAGS"
|
||||||
fi
|
fi
|
||||||
@ -249,7 +256,7 @@ if test x$use_images = xyes; then
|
|||||||
LDSTATIC="$libdir/libfltk_images.a $STATICIMAGELIBS $LDSTATIC"
|
LDSTATIC="$libdir/libfltk_images.a $STATICIMAGELIBS $LDSTATIC"
|
||||||
fi
|
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"
|
LDLIBS="-lfltk_cairo$SHAREDSUFFIX $CAIROLIBS $LDLIBS"
|
||||||
LDSTATIC="$libdir/libfltk_cairo.a $CAIROLIBS $LDSTATIC"
|
LDSTATIC="$libdir/libfltk_cairo.a $CAIROLIBS $LDSTATIC"
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user