summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml8
-rw-r--r--FL/Fl.H41
-rw-r--r--src/Fl_Cairo.cxx58
3 files changed, 54 insertions, 53 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 81d55a758..09bc5d0a6 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -21,7 +21,7 @@ jobs:
- uses: actions/checkout@v4
- name: install prerequisites
- run: sudo apt-get update -y && sudo apt-get install -y libasound2-dev libglew-dev libglu1-mesa-dev libx11-dev libxcursor-dev libxft-dev libxinerama-dev
+ run: sudo apt-get update -y && sudo apt-get install -y libasound2-dev libglew-dev libglu1-mesa-dev libcairo2-dev libx11-dev libxcursor-dev libxft-dev libxinerama-dev
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
@@ -36,7 +36,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D FLTK_BACKEND_WAYLAND=OFF -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused"
+ run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D FLTK_BACKEND_WAYLAND=OFF -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D FLTK_OPTION_CAIRO_WINDOW=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused"
- name: Build
working-directory: ${{github.workspace}}/build
@@ -57,7 +57,7 @@ jobs:
- uses: actions/checkout@v4
- name: Install prerequisites
- run: sudo apt-get update -y && sudo apt-get install -y libasound2-dev libglu1-mesa-dev libwayland-dev wayland-protocols libdbus-1-dev libxkbcommon-dev libegl-dev libopengl-dev libpango1.0-dev libdecor-0-dev libxfixes-dev libxcursor-dev libxinerama-dev
+ run: sudo apt-get update -y && sudo apt-get install -y libasound2-dev libglu1-mesa-dev libcairo2-dev libwayland-dev wayland-protocols libdbus-1-dev libxkbcommon-dev libegl-dev libopengl-dev libpango1.0-dev libdecor-0-dev libxfixes-dev libxcursor-dev libxinerama-dev
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
@@ -72,7 +72,7 @@ jobs:
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
+ run: cmake $GITHUB_WORKSPACE -D CMAKE_BUILD_TYPE=$BUILD_TYPE -D CMAKE_CXX_STANDARD=11 -D CMAKE_CXX_EXTENSIONS=OFF -D FLTK_BUILD_FORMS=ON -D FLTK_OPTION_CAIRO_WINDOW=ON -D CMAKE_C_FLAGS_INIT="-Wall -Wunused" -D CMAKE_CXX_FLAGS_INIT="-Wall -Wunused -Wsuggest-override"
- name: Build
working-directory: ${{github.workspace}}/build
diff --git a/FL/Fl.H b/FL/Fl.H
index 73f824bb4..60bf6b005 100644
--- a/FL/Fl.H
+++ b/FL/Fl.H
@@ -749,50 +749,11 @@ FL_EXPORT extern int args_to_utf8(int argc, char ** &argv);
// Cairo support API
FL_EXPORT extern cairo_t *cairo_make_current(Fl_Window *w);
-
FL_EXPORT extern void cairo_autolink_context(bool alink);
FL_EXPORT extern bool cairo_autolink_context();
FL_EXPORT extern cairo_t *cairo_cc();
FL_EXPORT extern void cairo_cc(cairo_t *c, bool own=false);
-
-/** Flush Cairo drawings on Cairo context \p c.
- This is \b required on Windows if you use the Cairo context provided
- by the "Cairo autolink" option. Call this when all your drawings on
- the Cairo context are finished. This is maybe not necessary on other
- platforms than Windows but it does no harm if you call it always.
-
- You don't need to use this if you use an Fl_Cairo_Window which does
- this automatically after the draw callback returns.
-
- Code example for "Cairo autolink" mode:
-
- In the overridden draw() method of your subclass of Fl_Window or any
- widget:
- \code
- cairo_t *cc = Fl::cairo_cc(); // get the "autolink" Cairo context
- // ... your Cairo drawings are here ...
- Fl::cairo_flush(cc); // flush Cairo drawings to the device
- \endcode
-
- If you configure FLTK with CMake option
- \c 'FLTK_OPTION_CAIRO_WINDOW' (i.e. without CMake option
- \c 'FLTK_OPTION_CAIRO_EXT') or if you don't enable the \c 'autolink' Cairo
- context you may do the equivalent to use Cairo drawings in an
- overridden draw() method of derived classes by using
- \code
- // get the Cairo context for the \c window
- cairo_t *cc = Fl::cairo_make_current(window);
- // ... your Cairo drawings are here ...
- Fl::cairo_flush(cc); // flush Cairo drawings to the device
- \endcode
- \see Fl::cairo_autolink_context(bool)
- \see Fl::cairo_make_current(Fl_Window*);
-*/
-FL_EXPORT extern void cairo_flush(cairo_t *c) {
- // flush Cairo drawings: necessary at least for Windows
- cairo_surface_t *s = cairo_get_target(c);
- cairo_surface_flush(s);
-}
+FL_EXPORT extern void cairo_flush(cairo_t *c);
/** @} */
diff --git a/src/Fl_Cairo.cxx b/src/Fl_Cairo.cxx
index 85b19c343..c69af2c55 100644
--- a/src/Fl_Cairo.cxx
+++ b/src/Fl_Cairo.cxx
@@ -104,7 +104,7 @@ cairo_t *Fl::cairo_cc() {
\note Only available if built with CMake option FLTK_OPTION_CAIRO_WINDOW=ON.
*/
-void Fl::cairo_cc(cairo_t *c, bool own=false) {
+void Fl::cairo_cc(cairo_t *c, bool own /* = false */) {
Private::cairo_state_.cc(c, own);
}
@@ -153,22 +153,22 @@ cairo_t *Fl::cairo_make_current(Fl_Window *wi) {
if (!xid->buffer)
return NULL; // this may happen with GL windows
cairo_ctxt = xid->buffer->draw_buffer.cairo_;
- cairo_state_.cc(cairo_ctxt, false);
+ Fl::Private::cairo_state_.cc(cairo_ctxt, false);
return cairo_ctxt;
}
#endif
if (fl_gc == 0) { // means remove current cc
Fl::cairo_cc(0); // destroy any previous cc
- cairo_state_.window(0);
+ Fl::Private::cairo_state_.window(0);
return 0;
}
// don't re-create a context if it's the same gc/window combination
- if (fl_gc == Fl::cairo_state_.gc() && fl_xid(wi) == (Window)Fl::cairo_state_.window())
+ if (fl_gc == Fl::Private::cairo_state_.gc() && fl_xid(wi) == (Window)Fl::Private::cairo_state_.window())
return Fl::cairo_cc();
- cairo_state_.window((void *)fl_xid(wi));
+ Fl::Private::cairo_state_.window((void *)fl_xid(wi));
// Scale the Cairo context appropriately. This is platform dependent
@@ -240,8 +240,8 @@ cairo_t *Fl::Private::cairo_make_current(void *gc) {
cairo_state_.gc(0); // keep track for next time
return 0;
}
- if (gc == Fl::cairo_state_.gc() &&
- fl_window == (Window)Fl::cairo_state_.window() &&
+ if (gc == Fl::Private::cairo_state_.gc() &&
+ fl_window == (Window)Fl::Private::cairo_state_.window() &&
cairo_state_.cc() != 0)
return Fl::cairo_cc();
cairo_state_.gc(fl_gc); // keep track for next time
@@ -258,8 +258,8 @@ cairo_t *Fl::Private::cairo_make_current(void *gc) {
\note Only available if CMake FLTK_OPTION_CAIRO_WINDOW is enabled.
*/
cairo_t *Fl::Private::cairo_make_current(void *gc, int W, int H) {
- if (gc == Fl::cairo_state_.gc() &&
- fl_window == (Window)Fl::cairo_state_.window() &&
+ if (gc == Fl::Private::cairo_state_.gc() &&
+ fl_window == (Window)Fl::Private::cairo_state_.window() &&
cairo_state_.cc() != 0) // no need to create a cc, just return that one
return cairo_state_.cc();
@@ -284,9 +284,49 @@ cairo_t *Fl::Private::cairo_make_current(void *gc, int W, int H) {
return c;
}
+/** Flush Cairo drawings on Cairo context \p c.
+ This is \b required on Windows if you use the Cairo context provided
+ by the "Cairo autolink" option. Call this when all your drawings on
+ the Cairo context are finished. This is maybe not necessary on other
+ platforms than Windows but it does no harm if you call it always.
+
+ You don't need to use this if you use an Fl_Cairo_Window which does
+ this automatically after the draw callback returns.
+
+ Code example for "Cairo autolink" mode:
+
+ In the overridden draw() method of your subclass of Fl_Window or any
+ widget:
+ \code
+ cairo_t *cc = Fl::cairo_cc(); // get the "autolink" Cairo context
+ // ... your Cairo drawings are here ...
+ Fl::cairo_flush(cc); // flush Cairo drawings to the device
+ \endcode
+
+ If you configure FLTK with CMake option
+ \c 'FLTK_OPTION_CAIRO_WINDOW' (i.e. without CMake option
+ \c 'FLTK_OPTION_CAIRO_EXT') or if you don't enable the \c 'autolink' Cairo
+ context you may do the equivalent to use Cairo drawings in an
+ overridden draw() method of derived classes by using
+ \code
+ // get the Cairo context for the \c window
+ cairo_t *cc = Fl::cairo_make_current(window);
+ // ... your Cairo drawings are here ...
+ Fl::cairo_flush(cc); // flush Cairo drawings to the device
+ \endcode
+ \see Fl::cairo_autolink_context(bool)
+ \see Fl::cairo_make_current(Fl_Window*);
+*/
+FL_EXPORT extern void Fl::cairo_flush(cairo_t *c) {
+ // flush Cairo drawings: necessary at least for Windows
+ cairo_surface_t *s = cairo_get_target(c);
+ cairo_surface_flush(s);
+}
+
// Silence compiler warning if none of the Cairo options has been selected
#else
+
FL_EXPORT int fltk_cairo_dummy() {
return 1;
}