summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--FL/Fl_Graphics_Driver.H135
-rw-r--r--src/Fl_Gl_Window.cxx1
-rw-r--r--src/Fl_Graphics_Driver.cxx3
-rw-r--r--src/Fl_Scalable_Graphics_Driver.H156
-rw-r--r--src/drivers/Cairo/Fl_Cairo_Graphics_Driver.H1
-rw-r--r--src/drivers/GDI/Fl_Font.H1
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver.H2
-rw-r--r--src/drivers/Quartz/Fl_Font.H1
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx1
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx1
-rw-r--r--src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx1
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.cxx1
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H1
-rw-r--r--src/gl_draw.cxx1
14 files changed, 170 insertions, 136 deletions
diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H
index 4b5578f15..13287943a 100644
--- a/FL/Fl_Graphics_Driver.H
+++ b/FL/Fl_Graphics_Driver.H
@@ -1,8 +1,8 @@
//
-// Declaration of classes Fl_Graphics_Driver, Fl_Scalable_Graphics_Driver,
+// Declaration of classes Fl_Graphics_Driver,
// and Fl_Font_Descriptor for the Fast Light Tool Kit (FLTK).
//
-// Copyright 2010-2024 by Bill Spitzak and others.
+// Copyright 2010-2025 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
@@ -379,137 +379,6 @@ public:
virtual void delete_bitmask(fl_uintptr_t bm);
};
-#ifndef FL_DOXYGEN
-
-/* This class is not part of FLTK's public API.
- Platforms usually define a derived class called Fl_XXX_Font_Descriptor
- containing extra platform-specific data/functions.
- This is a class for an actual system font, with junk to
- help choose it and info on character sizes. Each Fl_Fontdesc has a
- linked list of these. These are created the first time each system
- font/size combination is used.
- */
-class Fl_Font_Descriptor {
-public:
- /** linked list for this Fl_Fontdesc */
- Fl_Font_Descriptor *next;
- Fl_Fontsize size; /**< font size */
- Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
- virtual FL_EXPORT ~Fl_Font_Descriptor() {}
- int ascent, descent;
- unsigned int listbase;// base of display list, 0 = none
-};
-
-// This struct is not part of FLTK's public API.
-struct Fl_Fontdesc {
- const char *name;
- char fontname[128]; // "Pretty" font name
- Fl_Font_Descriptor *first; // linked list of sizes of this style
-};
-
-/* Abstract class Fl_Scalable_Graphics_Driver is platform-independent.
- It supports the scaling of all graphics coordinates by a
- float factor helpful to support HiDPI displays.
- This class does :
- - compute scaled coordinates
- - scale the cached offscreen of image objects
- - scale the pixel arrays used when performing direct image draws
- - call the member functions of a platform-specific,
- Fl_Scalable_Graphics_Driver-derived class that do the drawings with adequately
- scaled coordinates. The member functions are named with the _unscaled suffix.
- - scale and unscale the clipping region.
-
- This class is presently used by the X11 and Windows platforms to support HiDPI displays.
- In the future, it may also be used by other platforms.
- */
-class FL_EXPORT Fl_Scalable_Graphics_Driver : public Fl_Graphics_Driver {
- Fl_Fontsize fontsize_; // scale-independent font size value
-public:
- Fl_Scalable_Graphics_Driver();
- static int floor(int x, float s);
- inline int floor(int x) { return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
-protected:
- int line_width_;
- bool is_solid_;
- virtual Fl_Region scale_clip(float f);
- void unscale_clip(Fl_Region r);
- void point(int x, int y) FL_OVERRIDE;
- virtual void point_unscaled(float x, float y);
- void rect(int x, int y, int w, int h) FL_OVERRIDE;
- void rectf(int x, int y, int w, int h) FL_OVERRIDE;
- virtual void rect_unscaled(int x, int y, int w, int h);
- virtual void rectf_unscaled(int x, int y, int w, int h);
- void line(int x, int y, int x1, int y1) FL_OVERRIDE;
- virtual void line_unscaled(int x, int y, int x1, int y1);
- void line(int x, int y, int x1, int y1, int x2, int y2) FL_OVERRIDE;
- virtual void line_unscaled(int x, int y, int x1, int y1, int x2, int y2);
- void xyline(int x, int y, int x1) FL_OVERRIDE;
- virtual void xyline_unscaled(int x, int y, int x1);
- void xyline(int x, int y, int x1, int y2) FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2);}
- void xyline(int x, int y, int x1, int y2, int x3) FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2, x3);}
- void yxline(int x, int y, int y1) FL_OVERRIDE;
- virtual void yxline_unscaled(int x, int y, int y1);
- void yxline(int x, int y, int y1, int x2) FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2);}
- void yxline(int x, int y, int y1, int x2, int y3) FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2, y3);}
- void loop(int x0, int y0, int x1, int y1, int x2, int y2) FL_OVERRIDE;
- virtual void loop_unscaled(int x0, int y0, int x1, int y1, int x2, int y2);
- void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) FL_OVERRIDE;
- virtual void loop_unscaled(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
- void polygon(int x0, int y0, int x1, int y1, int x2, int y2) FL_OVERRIDE;
- virtual void polygon_unscaled(int x0, int y0, int x1, int y1, int x2, int y2);
- void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) FL_OVERRIDE;
- virtual void polygon_unscaled(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
- void circle(double x, double y, double r) FL_OVERRIDE;
- virtual void ellipse_unscaled(double xt, double yt, double rx, double ry);
- void font(Fl_Font face, Fl_Fontsize size) FL_OVERRIDE;
- Fl_Font font() FL_OVERRIDE;
- virtual void font_unscaled(Fl_Font face, Fl_Fontsize size);
- double width(const char *str, int n) FL_OVERRIDE;
- double width(unsigned int c) FL_OVERRIDE;
- virtual double width_unscaled(const char *str, int n);
- virtual double width_unscaled(unsigned int c);
- Fl_Fontsize size() FL_OVERRIDE;
- virtual Fl_Fontsize size_unscaled();
- void text_extents(const char *str, int n, int &dx, int &dy, int &w, int &h) FL_OVERRIDE;
- virtual void text_extents_unscaled(const char *str, int n, int &dx, int &dy, int &w, int &h);
- int height() FL_OVERRIDE;
- int descent() FL_OVERRIDE;
- virtual int height_unscaled();
- virtual int descent_unscaled();
- void draw(const char *str, int n, int x, int y) FL_OVERRIDE;
- virtual void draw_unscaled(const char *str, int n, int x, int y);
- void draw(int angle, const char *str, int n, int x, int y) FL_OVERRIDE;
- virtual void draw_unscaled(int angle, const char *str, int n, int x, int y);
- void draw(const char *str, int nChars, float x, float y) FL_OVERRIDE;
- void rtl_draw(const char* str, int n, int x, int y) FL_OVERRIDE;
- virtual void rtl_draw_unscaled(const char* str, int n, int x, int y);
- void arc(double x, double y, double r, double start, double end) FL_OVERRIDE;
- void arc(int x, int y, int w, int h, double a1, double a2) FL_OVERRIDE;
- virtual void arc_unscaled(int x, int y, int w, int h, double a1, double a2);
- void pie(int x, int y, int w, int h, double a1, double a2) FL_OVERRIDE;
- virtual void pie_unscaled(int x, int y, int w, int h, double a1, double a2);
- void draw_circle(int x, int y, int d, Fl_Color c) FL_OVERRIDE;
- void line_style(int style, int width=0, char* dashes=0) FL_OVERRIDE;
- virtual void line_style_unscaled(int style, int width, char* dashes);
- void draw_image_rescale(void *buf, Fl_Draw_Image_Cb cb, int X, int Y, int W, int H, int D, int L, bool mono);
- virtual void draw_image_unscaled(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
- virtual void draw_image_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
- void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) FL_OVERRIDE;
- void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) FL_OVERRIDE;
- virtual void draw_image_mono_unscaled(const uchar* buf, int x, int y, int w, int h, int d, int l);
- void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) FL_OVERRIDE;
- virtual void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
- void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) FL_OVERRIDE;
-
- void transformed_vertex(double xf, double yf) FL_OVERRIDE;
- void vertex(double x, double y) FL_OVERRIDE;
- float override_scale() FL_OVERRIDE;
- void restore_scale(float) FL_OVERRIDE;
- virtual void *change_pen_width(int lwidth);
- virtual void reset_pen_width(void *data);
-};
-#endif // FL_DOXYGEN
-
#endif // FL_GRAPHICS_DRIVER_H
/**
diff --git a/src/Fl_Gl_Window.cxx b/src/Fl_Gl_Window.cxx
index 3e87a880a..b56bd30f9 100644
--- a/src/Fl_Gl_Window.cxx
+++ b/src/Fl_Gl_Window.cxx
@@ -24,6 +24,7 @@ extern int fl_gl_load_plugin;
#include "Fl_Gl_Window_Driver.H"
#include "Fl_Window_Driver.H"
#include <FL/Fl_Graphics_Driver.H>
+#include "Fl_Scalable_Graphics_Driver.H" // Fl_Fontdesc
#include <FL/fl_utf8.h>
#include "drivers/OpenGL/Fl_OpenGL_Display_Device.H"
#include "drivers/OpenGL/Fl_OpenGL_Graphics_Driver.H"
diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx
index 9ef46f9f3..dcdc25834 100644
--- a/src/Fl_Graphics_Driver.cxx
+++ b/src/Fl_Graphics_Driver.cxx
@@ -1,7 +1,7 @@
//
// Fl_Graphics_Driver class for the Fast Light Tool Kit (FLTK).
//
-// Copyright 2010-2023 by Bill Spitzak and others.
+// Copyright 2010-2025 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
@@ -19,6 +19,7 @@
*/
#include <config.h> // for HAVE_GL
#include <FL/Fl_Graphics_Driver.H>
+#include "Fl_Scalable_Graphics_Driver.H" // Fl_Fontdesc
/** Points to the driver that currently receives all graphics requests */
FL_EXPORT Fl_Graphics_Driver *fl_graphics_driver;
diff --git a/src/Fl_Scalable_Graphics_Driver.H b/src/Fl_Scalable_Graphics_Driver.H
new file mode 100644
index 000000000..326ca313e
--- /dev/null
+++ b/src/Fl_Scalable_Graphics_Driver.H
@@ -0,0 +1,156 @@
+//
+// Declaration of Fl_Scalable_Graphics_Driver, Fl_Font_Descriptor, Fl_Fontdesc
+// for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2025 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
+//
+
+#ifndef FL_SCALABLE_GRAPHICS_DRIVER_H
+#define FL_SCALABLE_GRAPHICS_DRIVER_H
+
+#include <FL/Fl_Graphics_Driver.H>
+
+#ifndef FL_DOXYGEN
+
+
+/* Class Fl_Scalable_Graphics_Driver is platform-independent.
+ It supports the scaling of all graphics coordinates by a
+ float factor helpful to support HiDPI displays.
+ This class does :
+ - compute scaled coordinates
+ - scale the cached offscreen of image objects
+ - scale the pixel arrays used when performing direct image draws
+ - call the member functions of a platform-specific,
+ Fl_Scalable_Graphics_Driver-derived class that do the drawings with adequately
+ scaled coordinates. These member functions are named with the _unscaled suffix.
+ - scale and unscale the clipping region.
+
+ This class is presently used by the X11 and Windows platforms.
+ */
+class FL_EXPORT Fl_Scalable_Graphics_Driver : public Fl_Graphics_Driver {
+ Fl_Fontsize fontsize_; // scale-independent font size value
+public:
+ static int floor(int x, float s);
+ inline int floor(int x) { return Fl_Scalable_Graphics_Driver::floor(x, scale()); }
+protected:
+ int line_width_;
+ bool is_solid_;
+ Fl_Scalable_Graphics_Driver();
+ virtual Fl_Region scale_clip(float f);
+ void unscale_clip(Fl_Region r);
+ void point(int x, int y) FL_OVERRIDE;
+ virtual void point_unscaled(float x, float y);
+ void rect(int x, int y, int w, int h) FL_OVERRIDE;
+ void rectf(int x, int y, int w, int h) FL_OVERRIDE;
+ virtual void rect_unscaled(int x, int y, int w, int h);
+ virtual void rectf_unscaled(int x, int y, int w, int h);
+ void line(int x, int y, int x1, int y1) FL_OVERRIDE;
+ virtual void line_unscaled(int x, int y, int x1, int y1);
+ void line(int x, int y, int x1, int y1, int x2, int y2) FL_OVERRIDE;
+ virtual void line_unscaled(int x, int y, int x1, int y1, int x2, int y2);
+ void xyline(int x, int y, int x1) FL_OVERRIDE;
+ virtual void xyline_unscaled(int x, int y, int x1);
+ void xyline(int x, int y, int x1, int y2) FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2);}
+ void xyline(int x, int y, int x1, int y2, int x3) FL_OVERRIDE {Fl_Graphics_Driver::xyline(x, y, x1, y2, x3);}
+ void yxline(int x, int y, int y1) FL_OVERRIDE;
+ virtual void yxline_unscaled(int x, int y, int y1);
+ void yxline(int x, int y, int y1, int x2) FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2);}
+ void yxline(int x, int y, int y1, int x2, int y3) FL_OVERRIDE {Fl_Graphics_Driver::yxline(x, y, y1, x2, y3);}
+ void loop(int x0, int y0, int x1, int y1, int x2, int y2) FL_OVERRIDE;
+ virtual void loop_unscaled(int x0, int y0, int x1, int y1, int x2, int y2);
+ void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) FL_OVERRIDE;
+ virtual void loop_unscaled(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+ void polygon(int x0, int y0, int x1, int y1, int x2, int y2) FL_OVERRIDE;
+ virtual void polygon_unscaled(int x0, int y0, int x1, int y1, int x2, int y2);
+ void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) FL_OVERRIDE;
+ virtual void polygon_unscaled(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+ void circle(double x, double y, double r) FL_OVERRIDE;
+ virtual void ellipse_unscaled(double xt, double yt, double rx, double ry);
+ void font(Fl_Font face, Fl_Fontsize size) FL_OVERRIDE;
+ Fl_Font font() FL_OVERRIDE;
+ virtual void font_unscaled(Fl_Font face, Fl_Fontsize size);
+ double width(const char *str, int n) FL_OVERRIDE;
+ double width(unsigned int c) FL_OVERRIDE;
+ virtual double width_unscaled(const char *str, int n);
+ virtual double width_unscaled(unsigned int c);
+ Fl_Fontsize size() FL_OVERRIDE;
+ virtual Fl_Fontsize size_unscaled();
+ void text_extents(const char *str, int n, int &dx, int &dy, int &w, int &h) FL_OVERRIDE;
+ virtual void text_extents_unscaled(const char *str, int n, int &dx, int &dy, int &w, int &h);
+ int height() FL_OVERRIDE;
+ int descent() FL_OVERRIDE;
+ virtual int height_unscaled();
+ virtual int descent_unscaled();
+ void draw(const char *str, int n, int x, int y) FL_OVERRIDE;
+ virtual void draw_unscaled(const char *str, int n, int x, int y);
+ void draw(int angle, const char *str, int n, int x, int y) FL_OVERRIDE;
+ virtual void draw_unscaled(int angle, const char *str, int n, int x, int y);
+ void draw(const char *str, int nChars, float x, float y) FL_OVERRIDE;
+ void rtl_draw(const char* str, int n, int x, int y) FL_OVERRIDE;
+ virtual void rtl_draw_unscaled(const char* str, int n, int x, int y);
+ void arc(double x, double y, double r, double start, double end) FL_OVERRIDE;
+ void arc(int x, int y, int w, int h, double a1, double a2) FL_OVERRIDE;
+ virtual void arc_unscaled(int x, int y, int w, int h, double a1, double a2);
+ void pie(int x, int y, int w, int h, double a1, double a2) FL_OVERRIDE;
+ virtual void pie_unscaled(int x, int y, int w, int h, double a1, double a2);
+ void draw_circle(int x, int y, int d, Fl_Color c) FL_OVERRIDE;
+ void line_style(int style, int width=0, char* dashes=0) FL_OVERRIDE;
+ virtual void line_style_unscaled(int style, int width, char* dashes);
+ void draw_image_rescale(void *buf, Fl_Draw_Image_Cb cb, int X, int Y, int W, int H, int D, int L, bool mono);
+ virtual void draw_image_unscaled(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0);
+ virtual void draw_image_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3);
+ void draw_image(const uchar* buf, int X,int Y,int W,int H, int D=3, int L=0) FL_OVERRIDE;
+ void draw_image(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=3) FL_OVERRIDE;
+ virtual void draw_image_mono_unscaled(const uchar* buf, int x, int y, int w, int h, int d, int l);
+ void draw_image_mono(const uchar* buf, int X,int Y,int W,int H, int D=1, int L=0) FL_OVERRIDE;
+ virtual void draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1);
+ void draw_image_mono(Fl_Draw_Image_Cb cb, void* data, int X,int Y,int W,int H, int D=1) FL_OVERRIDE;
+
+ void transformed_vertex(double xf, double yf) FL_OVERRIDE;
+ void vertex(double x, double y) FL_OVERRIDE;
+ float override_scale() FL_OVERRIDE;
+ void restore_scale(float) FL_OVERRIDE;
+ virtual void *change_pen_width(int lwidth);
+ virtual void reset_pen_width(void *data);
+};
+
+
+/*
+ Platforms usually define a derived class called Fl_XXX_Font_Descriptor
+ containing extra platform-specific data/functions.
+ This is a class for an actual system font, with junk to
+ help choose it and info on character sizes. Each Fl_Fontdesc has a
+ linked list of these. These are created the first time each system
+ font/size combination is used.
+ */
+class Fl_Font_Descriptor {
+public:
+ /** linked list for this Fl_Fontdesc */
+ Fl_Font_Descriptor *next;
+ Fl_Fontsize size; /**< font size */
+ Fl_Font_Descriptor(const char* fontname, Fl_Fontsize size);
+ virtual FL_EXPORT ~Fl_Font_Descriptor() {}
+ int ascent, descent;
+ unsigned int listbase;// base of display list, 0 = none
+};
+
+
+struct Fl_Fontdesc {
+ const char *name;
+ char fontname[128]; // "Pretty" font name
+ Fl_Font_Descriptor *first; // linked list of sizes of this style
+};
+
+#endif // FL_DOXYGEN
+
+#endif // FL_SCALABLE_GRAPHICS_DRIVER_H
diff --git a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.H b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.H
index 5045790cc..eee10900d 100644
--- a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.H
+++ b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.H
@@ -22,6 +22,7 @@
# define FL_CAIRO_GRAPHICS_DRIVER_H
#include <FL/Fl_Graphics_Driver.H>
+#include "../../Fl_Scalable_Graphics_Driver.H" // Fl_Font_Descriptor
#include <cairo/cairo.h>
typedef struct _PangoLayout PangoLayout;
diff --git a/src/drivers/GDI/Fl_Font.H b/src/drivers/GDI/Fl_Font.H
index d160c55e9..3e8b1296f 100644
--- a/src/drivers/GDI/Fl_Font.H
+++ b/src/drivers/GDI/Fl_Font.H
@@ -23,6 +23,7 @@
#define FL_FONT_
#include <config.h>
+#include "../../Fl_Scalable_Graphics_Driver.H"
class Fl_GDI_Font_Descriptor : public Fl_Font_Descriptor {
public:
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
index 01ecf9531..336fa1ebc 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
@@ -23,7 +23,7 @@
#ifndef FL_GDI_GRAPHICS_DRIVER_H
#define FL_GDI_GRAPHICS_DRIVER_H
-#include <FL/Fl_Graphics_Driver.H>
+#include "../../Fl_Scalable_Graphics_Driver.H"
#include <windows.h>
#include <stdlib.h>
#include <config.h>
diff --git a/src/drivers/Quartz/Fl_Font.H b/src/drivers/Quartz/Fl_Font.H
index be571ece1..c700568a2 100644
--- a/src/drivers/Quartz/Fl_Font.H
+++ b/src/drivers/Quartz/Fl_Font.H
@@ -24,6 +24,7 @@
#include <config.h>
#include "Fl_Quartz_Graphics_Driver.H"
+#include "../../Fl_Scalable_Graphics_Driver.H" // Fl_Font_Descriptor
#include <ApplicationServices/ApplicationServices.h>
class Fl_Quartz_Font_Descriptor : public Fl_Font_Descriptor {
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
index 8cb90d995..e6f4ad65f 100644
--- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
@@ -17,6 +17,7 @@
#include "Fl_Wayland_Screen_Driver.H"
#include "Fl_Wayland_Window_Driver.H"
#include "Fl_Wayland_Graphics_Driver.H"
+#include "../../Fl_Scalable_Graphics_Driver.H"
#include <wayland-cursor.h>
#include "../../../libdecor/build/fl_libdecor.h"
#include "xdg-shell-client-protocol.h"
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
index a3a7ccf47..b1ddc9f91 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
@@ -20,7 +20,6 @@
#include "../GDI/Fl_Font.H"
#include <FL/Fl.H>
#include <FL/platform.H>
-#include "../GDI/Fl_GDI_Graphics_Driver.H"
#include <FL/Fl_RGB_Image.H>
#include <FL/fl_ask.H>
#include <stdio.h>
diff --git a/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
index 938c61a7b..a1b998b8e 100644
--- a/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
@@ -20,6 +20,7 @@
#include "../../Fl_Gl_Choice.H"
#include "../../Fl_Screen_Driver.H"
#include "Fl_X11_Gl_Window_Driver.H"
+#include "Fl_Scalable_Graphics_Driver.H" // Fl_Font_Descriptor
#include <GL/glx.h>
#if ! (USE_XFT || FLTK_USE_CAIRO)
# include "../Xlib/Fl_Font.H"
diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx
index f9cff395d..ad2958a36 100644
--- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx
@@ -18,6 +18,7 @@
#include <config.h>
#include "Fl_X11_Screen_Driver.H"
#include "Fl_X11_Window_Driver.H"
+#include "../../Fl_Scalable_Graphics_Driver.H"
#include "../Posix/Fl_Posix_System_Driver.H"
#include <FL/Fl.H>
#include <FL/platform.H>
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
index b3e9ad444..83146aef0 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
@@ -24,6 +24,7 @@
#include <config.h>
#include <FL/Fl_Graphics_Driver.H>
+#include "../../Fl_Scalable_Graphics_Driver.H"
#include <FL/platform.H>
#if HAVE_X11_XREGION_H
diff --git a/src/gl_draw.cxx b/src/gl_draw.cxx
index 367990da5..ae0dc94db 100644
--- a/src/gl_draw.cxx
+++ b/src/gl_draw.cxx
@@ -40,6 +40,7 @@
#include <FL/math.h> // for ceil()
#include "Fl_Gl_Window_Driver.H"
#include <FL/Fl_Image_Surface.H>
+#include "Fl_Scalable_Graphics_Driver.H" // Fl_Font_Descriptor
#if HAVE_GL_GLU_H
# include <FL/glu.h> // for gluUnProject()
#endif