|
commit c798581e4e25188d400c9a58653cf9c876efa9c6
Author: Albrecht Schlosser <albrechts.fltk@online.de>
AuthorDate: Sun Jan 29 15:18:12 2023 +0100
Commit: Albrecht Schlosser <albrechts.fltk@online.de>
CommitDate: Sun Jan 29 15:18:12 2023 +0100
Cairo: Remove compiler warning and improve formatting
... for better readability and CMP compliance.
No functionality changes.
cairo/Fl_Cairo.cxx | 48 +++++++++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 17 deletions(-)
diff --git cairo/Fl_Cairo.cxx cairo/Fl_Cairo.cxx
index 0b65503..a8a63b3 100644
--- cairo/Fl_Cairo.cxx
+++ cairo/Fl_Cairo.cxx
@@ -52,21 +52,24 @@
// static initialization
-Fl_Cairo_State Fl::cairo_state_; ///< contains all necessary info for current Cairo context mapping
+Fl_Cairo_State Fl::cairo_state_; ///< current Cairo context information
-// Fl_Cairo_State class
+// Fl_Cairo_State
void Fl_Cairo_State::autolink(bool b) {
#ifdef FLTK_HAVE_CAIROEXT
autolink_ = b;
#else
- Fl::fatal("In Fl::autolink(bool) : Cairo autolink() feature is only "
- "available with the enable-cairoext configure option, now quitting.");
+ Fl::fatal("In Fl::autolink(bool): Cairo autolink() feature is only "
+ "available with CMake OPTION_CAIROEXT "
+ "or the enable-cairoext configure option.\n"
+ "Quitting now.");
#endif
}
/**
- Provides a corresponding Cairo context for window \a wi.
+ Provides a Cairo context for window \a wi.
+
This is needed in a draw() override if Fl::cairo_autolink_context()
returns false, which is the default.
The cairo_context() does not need to be freed as it is freed every time
@@ -82,7 +85,7 @@ void Fl_Cairo_State::autolink(bool b) {
\note Only available when configure has the --enable-cairo option
- \return the valid cairo_t* Cairo context associated to this window.
+ \return The valid cairo_t *cairo context associated to this window.
\retval NULL if \a wi is NULL or maybe with GL windows under Wayland
*/
cairo_t *Fl::cairo_make_current(Fl_Window *wi) {
@@ -107,7 +110,7 @@ cairo_t *Fl::cairo_make_current(Fl_Window *wi) {
return 0;
}
- // don't re-create a context if it's the same gc/window couple
+ // 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())
return Fl::cairo_cc();
@@ -118,12 +121,14 @@ cairo_t *Fl::cairo_make_current(Fl_Window *wi) {
#ifndef __APPLE__
float scale = Fl::screen_scale(wi->screen_num()); // get the screen scaling factor
#endif
+
#if defined(FLTK_USE_X11)
cairo_ctxt = Fl::cairo_make_current(0, wi->w() * scale, wi->h() * scale);
#else
// on macOS, scaling is done before by Fl_Window::make_current(), on Windows, the size is not used
cairo_ctxt = Fl::cairo_make_current(fl_gc, wi->w(), wi->h());
#endif
+
#ifndef __APPLE__
cairo_scale(cairo_ctxt, scale, scale);
#endif
@@ -131,10 +136,10 @@ cairo_t *Fl::cairo_make_current(Fl_Window *wi) {
}
/*
- Creates transparently a cairo_surface_t object.
- gc is an HDC context in Windows, a CGContext* in Quartz, and
- a display on X11 (not used on this platform)
- */
+ Creates transparently a cairo_surface_t object.
+ gc is an HDC context in Windows, a CGContext* in Quartz, and
+ a display on X11 (not used on this platform)
+*/
static cairo_surface_t *cairo_create_surface(void *gc, int W, int H) {
#if defined(FLTK_USE_X11)
@@ -153,7 +158,9 @@ static cairo_surface_t *cairo_create_surface(void *gc, int W, int H) {
/**
Creates a Cairo context from a \a gc only, gets its window size or
offscreen size if fl_window is null.
- \note Only available when configure has the --enable-cairo option
+
+ \note Only available if CMake OPTION_CAIRO is enabled
+ or configure has the --enable-cairo option.
*/
cairo_t *Fl::cairo_make_current(void *gc) {
int W = 0, H = 0;
@@ -174,12 +181,14 @@ cairo_t *Fl::cairo_make_current(void *gc) {
#else
#error Cairo is not supported on this platform.
#endif
+
if (!gc) {
Fl::cairo_cc(0);
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::cairo_state_.gc() &&
+ fl_window == (Window)Fl::cairo_state_.window() &&
cairo_state_.cc() != 0)
return Fl::cairo_cc();
cairo_state_.gc(fl_gc); // keep track for next time
@@ -191,27 +200,33 @@ cairo_t *Fl::cairo_make_current(void *gc) {
}
/**
- Creates a Cairo context from a \a gc and its size
+ Creates a Cairo context from a \p gc and the given size.
- \note Only available if FLTK has been configured with one of the Cairo options
+ \note Only available if CMake OPTION_CAIRO is enabled
+ or configure has the --enable-cairo option.
*/
cairo_t *Fl::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::cairo_state_.gc() &&
+ fl_window == (Window)Fl::cairo_state_.window() &&
cairo_state_.cc() != 0) // no need to create a cc, just return that one
return cairo_state_.cc();
// we need to (re-)create a fresh cc ...
cairo_state_.gc(gc); // keep track for next time
cairo_surface_t *s = cairo_create_surface(gc, W, H);
+
#if defined(__APPLE__) && defined(FLTK_HAVE_CAIROEXT)
CGAffineTransform at = CGContextGetCTM((CGContextRef)gc);
CGContextSaveGState((CGContextRef)gc);
CGContextConcatCTM((CGContextRef)gc, CGAffineTransformInvert(at));
#endif
+
cairo_t *c = cairo_create(s);
+
#if defined(__APPLE__) && defined(FLTK_HAVE_CAIROEXT)
CGContextRestoreGState((CGContextRef)gc);
#endif
+
cairo_state_.cc(c); // and purge any previously owned context
cairo_surface_destroy(s);
return c;
@@ -220,7 +235,6 @@ cairo_t *Fl::cairo_make_current(void *gc, int W, int H) {
// Silence compiler warning if none of the Cairo options has been configured
#else
-#warning xxx
FL_EXPORT int fltk_cairo_dummy() {
return 1;
}
[ Direct Link to Message ] | |