2008-09-25 22:26:33 +04:00
|
|
|
//
|
|
|
|
// Main header file for the Fast Light Tool Kit (FLTK).
|
|
|
|
//
|
2021-12-19 00:42:30 +03:00
|
|
|
// Copyright 1998-2021 by Bill Spitzak and others.
|
2008-09-25 22:26:33 +04:00
|
|
|
//
|
2011-07-19 08:49:30 +04:00
|
|
|
// 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:
|
|
|
|
//
|
2020-07-01 19:03:10 +03:00
|
|
|
// https://www.fltk.org/COPYING.php
|
2008-09-25 22:26:33 +04:00
|
|
|
//
|
2020-07-01 19:03:10 +03:00
|
|
|
// Please see the following page on how to report bugs and issues:
|
2008-09-25 22:26:33 +04:00
|
|
|
//
|
2020-07-01 19:03:10 +03:00
|
|
|
// https://www.fltk.org/bugs.php
|
2008-09-25 22:26:33 +04:00
|
|
|
//
|
|
|
|
|
2008-10-15 17:46:06 +04:00
|
|
|
/* \file
|
2020-07-01 19:03:10 +03:00
|
|
|
Handling transparently platform dependent cairo include files
|
2008-09-25 22:26:33 +04:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef FL_CAIRO_H
|
|
|
|
# define FL_CAIRO_H
|
2021-12-19 00:42:30 +03:00
|
|
|
|
|
|
|
# include <FL/fl_config.h> // build configuration
|
|
|
|
|
2011-01-06 13:24:58 +03:00
|
|
|
# ifdef FLTK_HAVE_CAIRO
|
2008-09-25 22:26:33 +04:00
|
|
|
|
|
|
|
// Cairo is currently supported for the following platforms:
|
|
|
|
// Win32, Apple Quartz, X11
|
|
|
|
|
|
|
|
# include <FL/Fl_Export.H>
|
|
|
|
|
2016-02-13 21:02:17 +03:00
|
|
|
# include <cairo.h>
|
2008-09-25 22:26:33 +04:00
|
|
|
|
2020-07-01 19:03:10 +03:00
|
|
|
/**
|
2008-09-25 22:26:33 +04:00
|
|
|
\addtogroup group_cairo
|
|
|
|
@{
|
|
|
|
*/
|
|
|
|
|
2020-07-01 19:03:10 +03:00
|
|
|
/**
|
2008-09-25 22:26:33 +04:00
|
|
|
Contains all the necessary info on the current cairo context.
|
|
|
|
A private internal & unique corresponding object is created to
|
|
|
|
permit cairo context state handling while keeping it opaque.
|
|
|
|
For internal use only.
|
2021-12-19 00:42:30 +03:00
|
|
|
\note Only available when configure has the --enable-cairo or
|
|
|
|
--enable-cairoext option or one or both of the CMake options
|
|
|
|
OPTION_CAIRO or OPTION_CAIROEXT is set (ON)
|
2008-09-25 22:26:33 +04:00
|
|
|
*/
|
|
|
|
class FL_EXPORT Fl_Cairo_State {
|
|
|
|
public:
|
|
|
|
Fl_Cairo_State() : cc_(0), own_cc_(false), autolink_(false), window_(0), gc_(0) {}
|
|
|
|
|
|
|
|
// access attributes
|
2020-07-01 19:03:10 +03:00
|
|
|
cairo_t* cc() const {return cc_;} ///< Gets the current cairo context
|
|
|
|
bool autolink() const {return autolink_;} ///< Gets the autolink option. See Fl::cairo_autolink_context(bool)
|
2016-02-13 21:02:17 +03:00
|
|
|
/** Sets the current cairo context.
|
|
|
|
|
2020-07-01 19:03:10 +03:00
|
|
|
\p own == \e true (the default) indicates that the cairo context \p c
|
|
|
|
will be deleted by FLTK internally when another cc is set later.
|
2016-02-13 21:02:17 +03:00
|
|
|
|
2020-07-01 19:03:10 +03:00
|
|
|
\p own == \e false indicates cc deletion is handled externally
|
|
|
|
by the user program.
|
2016-02-13 21:02:17 +03:00
|
|
|
*/
|
|
|
|
void cc(cairo_t* c, bool own=true) {
|
2020-07-01 19:03:10 +03:00
|
|
|
if (cc_ && own_cc_) cairo_destroy(cc_);
|
|
|
|
cc_=c;
|
|
|
|
if (!cc_) window_=0;
|
|
|
|
own_cc_=own;
|
2008-09-25 22:26:33 +04:00
|
|
|
}
|
Cairo increment 2: Finer cairo granularity, less deps, new fltk_cairo lib
+ added new USE_CAIRO config preprocessor def.
to differentiate from HAVE_CAIRO so that we can use the cairo lib
without forcing the full fltk lib to be linked against it.
In that case, cairo autolink context functionality which needs fltk lib
instrumentation is disabled.
+ added new --enable-cairoext, which correspond to previous --enable-cairo.
now, --enable-cairo only adds HAVE_CAIRO def. and keeps fltk lib
from referencing cairo.
In both cases (--enable-cairo & --enable-cairoext), a new fltk_cairo lib is
created. This lib, similarly to local versions of png,jpeg and zlib,
is not generated if cairo is not enabled.
+ added cairo to fltk-config : now new --use-cairo flag is available
+ modified all unix like makefiles to now generate minimum cairo deps and also
new libfltk_cairo lib.
+ added new cairo subdir to permit conditional fltk_cairo lib generation.
+ vc2005 project minimum update to compile without be broken, but still needs
to create a similar fltk_cairo independent lib. For now, it works as before
with a dedicated cairo env. similar to --enable-cairoext context in unix.
+ regression tested ok with cairo disabled on win32, mac osx, mingw.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6462 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
2008-10-19 05:42:35 +04:00
|
|
|
void autolink(bool b); ///< Sets the autolink option, only available with --enable-cairoext
|
2020-07-01 19:03:10 +03:00
|
|
|
void window(void* w) {window_=w;} ///< Sets the window \p 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 \p c to keep track on
|
|
|
|
void* gc() const {return gc_;} ///< Gets the last gc attached to a cc
|
2008-09-25 22:26:33 +04:00
|
|
|
|
|
|
|
private:
|
2020-07-01 19:03:10 +03:00
|
|
|
cairo_t * cc_; // contains the unique autoupdated cairo context
|
|
|
|
bool own_cc_; // indicates whether we must delete the cc, useful for internal cleanup
|
|
|
|
bool autolink_; // false by default, prevents the automatic cairo mapping on fltk windows
|
|
|
|
// for custom cairo implementations.
|
2008-09-25 22:26:33 +04:00
|
|
|
void* window_, *gc_; // for keeping track internally of last win+gc treated
|
|
|
|
};
|
|
|
|
|
|
|
|
/** @} */
|
|
|
|
|
2011-01-06 13:24:58 +03:00
|
|
|
# endif // FLTK_HAVE_CAIRO
|
2008-09-25 22:26:33 +04:00
|
|
|
#endif // FL_CAIRO_H
|