summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-03-13 08:56:23 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-03-13 08:56:35 +0100
commitb549cfaaea11ce5e881e2151a838c91a031ad9ba (patch)
treea8a34a8cd7270a4d4ca68bca08c1b6e6388220d4 /src
parente8461a6191e0afa5fd96290856d1a056437469d0 (diff)
Separate platform init functions from platform-specific driver files
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt36
-rw-r--r--src/Makefile19
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.H60
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx29
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx20
-rw-r--r--src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx17
-rw-r--r--src/drivers/Cocoa/fl_macOS_gl_platform_init.cxx24
-rw-r--r--src/drivers/Darwin/Fl_Darwin_System_Driver.cxx10
-rw-r--r--src/drivers/Darwin/fl_macOS_platform_init.cxx59
-rw-r--r--src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.H35
-rw-r--r--src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.cxx20
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver.H2
-rw-r--r--src/drivers/GDI/Fl_GDI_Graphics_Driver.cxx23
-rw-r--r--src/drivers/GDI/Fl_GDI_Image_Surface_Driver.H38
-rw-r--r--src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx22
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H1
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx15
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx8
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.H35
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx32
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.H34
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx19
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H67
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx38
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx7
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.H33
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx17
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx10
-rw-r--r--src/drivers/Wayland/Fl_Wayland_System_Driver.cxx10
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx6
-rw-r--r--src/drivers/Wayland/fl_wayland_gl_platform_init.cxx24
-rw-r--r--src/drivers/Wayland/fl_wayland_platform_init.cxx60
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H64
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx35
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx11
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx9
-rw-r--r--src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx6
-rw-r--r--src/drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx24
-rw-r--r--src/drivers/WinAPI/fl_WinAPI_platform_init.cxx69
-rw-r--r--src/drivers/X11/Fl_X11_Gl_Window_Driver.H58
-rw-r--r--src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx34
-rw-r--r--src/drivers/X11/Fl_X11_Screen_Driver.cxx18
-rw-r--r--src/drivers/X11/Fl_X11_System_Driver.cxx11
-rw-r--r--src/drivers/X11/Fl_X11_Window_Driver.cxx5
-rw-r--r--src/drivers/X11/fl_X11_gl_platform_init.cxx24
-rw-r--r--src/drivers/X11/fl_X11_platform_init.cxx66
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.H36
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx21
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx8
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.H34
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx18
51 files changed, 905 insertions, 476 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7d3b9a59d..1fa1a7401 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -210,6 +210,7 @@ if (FLTK_USE_X11)
drivers/Xlib/Fl_Xlib_Graphics_Driver_vertex.cxx
drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
+ drivers/X11/fl_X11_platform_init.cxx
Fl_x.cxx
fl_dnd_x.cxx
Fl_Native_File_Chooser_FLTK.cxx
@@ -240,7 +241,10 @@ if (FLTK_USE_X11)
drivers/X11/Fl_X11_Window_Driver.H
drivers/X11/Fl_X11_System_Driver.H
drivers/Xlib/Fl_Font.H
- )
+ drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.H
+ drivers/Xlib/Fl_Xlib_Image_Surface_Driver.H
+ drivers/Unix/Fl_Unix_System_Driver.H
+ )
elseif (OPTION_USE_WAYLAND)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_BINARY_DIR}")
@@ -255,11 +259,22 @@ elseif (OPTION_USE_WAYLAND)
drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx
drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx
drivers/Wayland/fl_wayland_clipboard_dnd.cxx
+ drivers/Wayland/fl_wayland_platform_init.cxx
drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx
Fl_Native_File_Chooser_FLTK.cxx
Fl_Native_File_Chooser_GTK.cxx
Fl_Native_File_Chooser_Kdialog.cxx
)
+ set (DRIVER_HEADER_FILES
+ drivers/Posix/Fl_Posix_System_Driver.H
+ drivers/Wayland/Fl_Wayland_System_Driver.H
+ drivers/Wayland/Fl_Wayland_Screen_Driver.H
+ drivers/Wayland/Fl_Wayland_Window_Driver.H
+ drivers/Wayland/Fl_Wayland_Graphics_Driver.H
+ drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.H
+ drivers/Wayland/Fl_Wayland_Image_Surface_Driver.H
+ drivers/Unix/Fl_Unix_System_Driver.H
+ )
elseif (APPLE)
@@ -281,6 +296,7 @@ elseif (APPLE)
drivers/Posix/Fl_Posix_System_Driver.cxx
drivers/Darwin/Fl_Darwin_System_Driver.cxx
Fl_get_key_mac.cxx
+ drivers/Darwin/fl_macOS_platform_init.cxx
)
set (DRIVER_HEADER_FILES
drivers/Posix/Fl_Posix_System_Driver.H
@@ -291,6 +307,7 @@ elseif (APPLE)
drivers/Quartz/Fl_Quartz_Graphics_Driver.H
drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H
drivers/Quartz/Fl_Font.H
+ drivers/Quartz/Fl_Quartz_Image_Surface_Driver.H
)
else ()
@@ -316,6 +333,7 @@ else ()
fl_dnd_win32.cxx
Fl_Native_File_Chooser_WIN32.cxx
Fl_get_key_win32.cxx
+ drivers/WinAPI/fl_WinAPI_platform_init.cxx
)
set (DRIVER_HEADER_FILES
drivers/WinAPI/Fl_WinAPI_System_Driver.H
@@ -323,6 +341,8 @@ else ()
drivers/WinAPI/Fl_WinAPI_Window_Driver.H
drivers/GDI/Fl_GDI_Graphics_Driver.H
drivers/GDI/Fl_Font.H
+ drivers/GDI/Fl_GDI_Copy_Surface_Driver.H
+ drivers/GDI/Fl_GDI_Image_Surface_Driver.H
)
endif (FLTK_USE_X11)
@@ -372,16 +392,20 @@ set (GL_DRIVER_FILES
drivers/OpenGL/Fl_OpenGL_Graphics_Driver_vertex.cxx
)
if (FLTK_USE_X11)
- set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/X11/Fl_X11_Gl_Window_Driver.cxx)
+ set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/X11/Fl_X11_Gl_Window_Driver.cxx drivers/X11/fl_X11_gl_platform_init.cxx)
+ set (GL_DRIVER_HEADER_FILES drivers/X11/Fl_X11_Gl_Window_Driver.H)
elseif (OPTION_USE_WAYLAND)
- set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx)
+ set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx drivers/Wayland/fl_wayland_gl_platform_init.cxx)
+ set (GL_DRIVER_HEADER_FILES drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H)
elseif (APPLE)
- set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx)
+ set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx drivers/Cocoa/fl_macOS_gl_platform_init.cxx)
+ set (GL_DRIVER_HEADER_FILES drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.H)
elseif (WIN32)
- set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx)
+ set (GL_DRIVER_FILES ${GL_DRIVER_FILES} drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx)
+ set (GL_DRIVER_HEADER_FILES drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H)
endif (FLTK_USE_X11)
-set (GL_DRIVER_HEADER_FILES
+set (GL_DRIVER_HEADER_FILES ${GL_DRIVER_FILES}
drivers/OpenGL/Fl_OpenGL_Display_Device.H
drivers/OpenGL/Fl_OpenGL_Graphics_Driver.H
)
diff --git a/src/Makefile b/src/Makefile
index dab3f75bb..c33847790 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -201,12 +201,15 @@ GLCPPFILES = \
drivers/OpenGL/Fl_OpenGL_Graphics_Driver_rect.cxx \
drivers/OpenGL/Fl_OpenGL_Graphics_Driver_vertex.cxx
-GLCPPFILES_OSX = drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx
-GLCPPFILES_X11 = drivers/X11/Fl_X11_Gl_Window_Driver.cxx
+GLCPPFILES_OSX = drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx \
+ drivers/Cocoa/fl_macOS_gl_platform_init.cxx
+GLCPPFILES_X11 = drivers/X11/Fl_X11_Gl_Window_Driver.cxx \
+ drivers/X11/fl_X11_gl_platform_init.cxx
GLCPPFILES_XFT = $(GLCPPFILES_X11)
-GLCPPFILES_WIN = drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx
-
-GLCPPFILES_WAYLAND = drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
+GLCPPFILES_WIN = drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx \
+ drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx
+GLCPPFILES_WAYLAND = drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx \
+ drivers/Wayland/fl_wayland_gl_platform_init.cxx
GLCPPFILES += $(GLCPPFILES_$(BUILD))
@@ -249,6 +252,7 @@ QUARTZCPPFILES = \
drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx \
drivers/Posix/Fl_Posix_System_Driver.cxx \
drivers/Darwin/Fl_Darwin_System_Driver.cxx \
+ drivers/Darwin/fl_macOS_platform_init.cxx \
Fl_get_key_mac.cxx
# These C++ files are used under condition: BUILD_X11
@@ -268,6 +272,7 @@ XLIBCPPFILES = \
drivers/Unix/Fl_Unix_System_Driver.cxx \
drivers/X11/Fl_X11_System_Driver.cxx \
drivers/Posix/Fl_Posix_Printer_Driver.cxx \
+ drivers/X11/fl_X11_platform_init.cxx \
Fl_x.cxx \
fl_dnd_x.cxx \
Fl_Native_File_Chooser_FLTK.cxx \
@@ -289,7 +294,8 @@ WLCPPFILES = \
drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx \
drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx \
drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx \
- drivers/Wayland/fl_wayland_clipboard_dnd.cxx
+ drivers/Wayland/fl_wayland_platform_init.cxx \
+ drivers/Wayland/fl_wayland_clipboard_dnd.cxx
# fl_dnd_x.cxx Fl_Native_File_Chooser_GTK.cxx
@@ -338,6 +344,7 @@ GDICPPFILES = \
drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx \
drivers/WinAPI/Fl_WinAPI_System_Driver.cxx \
drivers/WinAPI/Fl_WinAPI_Printer_Driver.cxx \
+ drivers/WinAPI/fl_WinAPI_platform_init.cxx \
Fl_win32.cxx \
fl_dnd_win32.cxx \
Fl_Native_File_Chooser_WIN32.cxx \
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.H
new file mode 100644
index 000000000..0ae5020fb
--- /dev/null
+++ b/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.H
@@ -0,0 +1,60 @@
+//
+// Class Fl_Cocoa_Gl_Window_Driver for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2021 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 <config.h>
+#if HAVE_GL
+#include <FL/platform.H>
+#include <FL/gl.h>
+#include "../../Fl_Gl_Choice.H"
+//#include "../../Fl_Screen_Driver.H"
+#include "Fl_Cocoa_Window_Driver.H"
+#include "../../Fl_Gl_Window_Driver.H"
+//#include <FL/Fl_Graphics_Driver.H>
+#include <OpenGL/OpenGL.h>
+//#include <FL/Fl_Image_Surface.H>
+
+extern void gl_texture_reset();
+
+#ifdef __OBJC__
+@class NSOpenGLPixelFormat;
+#else
+class NSOpenGLPixelFormat;
+#endif // __OBJC__
+
+class Fl_Cocoa_Gl_Window_Driver : public Fl_Gl_Window_Driver {
+ friend class Fl_Gl_Window_Driver;
+ Fl_Cocoa_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
+ virtual float pixels_per_unit();
+ virtual void before_show(int& need_after);
+ virtual void after_show();
+ virtual int mode_(int m, const int *a);
+ virtual void make_current_before();
+ virtual void swap_buffers();
+ virtual void resize(int is_a_resize, int w, int h);
+ virtual char swap_type();
+ virtual Fl_Gl_Choice *find(int m, const int *alistp);
+ virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
+ virtual void set_gl_context(Fl_Window* w, GLContext context);
+ virtual void delete_gl_context(GLContext);
+ virtual void make_overlay_current();
+ virtual void redraw_overlay();
+ virtual void gl_start();
+ virtual char *alpha_mask_for_string(const char *str, int n, int w, int h, Fl_Fontsize fs);
+ virtual Fl_RGB_Image* capture_gl_rectangle(int x, int y, int w, int h);
+};
+
+
+#endif // HAVE_GL
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx
index af36b1fd1..6491332e3 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Gl_Window_Driver.cxx
@@ -21,7 +21,7 @@
#include "../../Fl_Gl_Choice.H"
#include "../../Fl_Screen_Driver.H"
#include "Fl_Cocoa_Window_Driver.H"
-#include "../../Fl_Gl_Window_Driver.H"
+#include "Fl_Cocoa_Gl_Window_Driver.H"
#include <FL/Fl_Graphics_Driver.H>
#include <OpenGL/OpenGL.h>
#include <FL/Fl_Image_Surface.H>
@@ -34,27 +34,6 @@ extern void gl_texture_reset();
class NSOpenGLPixelFormat;
#endif // __OBJC__
-class Fl_Cocoa_Gl_Window_Driver : public Fl_Gl_Window_Driver {
- friend class Fl_Gl_Window_Driver;
- Fl_Cocoa_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
- virtual float pixels_per_unit();
- virtual void before_show(int& need_after);
- virtual void after_show();
- virtual int mode_(int m, const int *a);
- virtual void make_current_before();
- virtual void swap_buffers();
- virtual void resize(int is_a_resize, int w, int h);
- virtual char swap_type();
- virtual Fl_Gl_Choice *find(int m, const int *alistp);
- virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
- virtual void set_gl_context(Fl_Window* w, GLContext context);
- virtual void delete_gl_context(GLContext);
- virtual void make_overlay_current();
- virtual void redraw_overlay();
- virtual void gl_start();
- virtual char *alpha_mask_for_string(const char *str, int n, int w, int h, Fl_Fontsize fs);
- virtual Fl_RGB_Image* capture_gl_rectangle(int x, int y, int w, int h);
-};
// Describes crap needed to create a GLContext.
class Fl_Cocoa_Gl_Choice : public Fl_Gl_Choice {
@@ -121,12 +100,6 @@ void Fl_Cocoa_Gl_Window_Driver::redraw_overlay() {
pWindow->redraw();
}
-
-Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
-{
- return new Fl_Cocoa_Gl_Window_Driver(w);
-}
-
void Fl_Cocoa_Gl_Window_Driver::before_show(int& need_after) {
need_after = 1;
}
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
index e213e5fd0..33f92a6db 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Screen_Driver.cxx
@@ -34,26 +34,6 @@ extern void (*fl_unlock_function)();
int Fl_Cocoa_Screen_Driver::next_marked_length = 0;
-/**
- \cond DriverDev
- \addtogroup DriverDeveloper
- \{
- */
-
-/**
- Creates a driver that manages all screen and display related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
-{
- return new Fl_Cocoa_Screen_Driver();
-}
-
-/**
- \}
- \endcond
- */
static Fl_Text_Editor::Key_Binding extra_bindings[] = {
// Define CMD+key accelerators...
diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
index 7cb411418..e91342c8a 100644
--- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
+++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx
@@ -27,23 +27,6 @@
#include <FL/platform.H>
#include <math.h>
-/**
- \cond DriverDev
- \addtogroup DriverDeveloper
- \{
- */
-
-Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
-{
- return new Fl_Cocoa_Window_Driver(w);
-}
-
-/**
- \}
- \endcond
- */
-
-
Fl_Cocoa_Window_Driver::Fl_Cocoa_Window_Driver(Fl_Window *win)
: Fl_Window_Driver(win)
diff --git a/src/drivers/Cocoa/fl_macOS_gl_platform_init.cxx b/src/drivers/Cocoa/fl_macOS_gl_platform_init.cxx
new file mode 100644
index 000000000..421c665d2
--- /dev/null
+++ b/src/drivers/Cocoa/fl_macOS_gl_platform_init.cxx
@@ -0,0 +1,24 @@
+//
+// Wayland-specific code to initialize wayland support.
+//
+// Copyright 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_Cocoa_Gl_Window_Driver.H"
+
+
+Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
+{
+ return new Fl_Cocoa_Gl_Window_Driver(w);
+}
diff --git a/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx b/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
index dad46dfc7..9f59d8cae 100644
--- a/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
+++ b/src/drivers/Darwin/Fl_Darwin_System_Driver.cxx
@@ -89,16 +89,6 @@ const char *Fl_Darwin_System_Driver::control_name() {
return "⌃\\"; // "\xe2\x8c\x83\\"; // U+2303 (up arrowhead)
}
-/*
- Creates a driver that manages all system related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_System_Driver *Fl_System_Driver::newSystemDriver()
-{
- return new Fl_Darwin_System_Driver();
-}
-
Fl_Darwin_System_Driver::Fl_Darwin_System_Driver() : Fl_Posix_System_Driver() {
if (fl_mac_os_version == 0) fl_mac_os_version = calc_mac_os_version();
// initialize key table
diff --git a/src/drivers/Darwin/fl_macOS_platform_init.cxx b/src/drivers/Darwin/fl_macOS_platform_init.cxx
new file mode 100644
index 000000000..fc18e90db
--- /dev/null
+++ b/src/drivers/Darwin/fl_macOS_platform_init.cxx
@@ -0,0 +1,59 @@
+//
+// macOS-specific code to initialize macOS support.
+//
+// Copyright 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 "../Quartz/Fl_Quartz_Copy_Surface_Driver.H"
+#include "../Quartz/Fl_Quartz_Graphics_Driver.H"
+#include "../Cocoa/Fl_Cocoa_Screen_Driver.H"
+#include "../Darwin/Fl_Darwin_System_Driver.H"
+#include "../Cocoa/Fl_Cocoa_Window_Driver.H"
+#include "../Quartz/Fl_Quartz_Image_Surface_Driver.H"
+
+
+Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
+{
+ return new Fl_Quartz_Copy_Surface_Driver(w, h);
+}
+
+
+Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
+{
+ return new Fl_Quartz_Graphics_Driver();
+}
+
+
+Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
+{
+ return new Fl_Cocoa_Screen_Driver();
+}
+
+
+Fl_System_Driver *Fl_System_Driver::newSystemDriver()
+{
+ return new Fl_Darwin_System_Driver();
+}
+
+
+Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
+{
+ return new Fl_Cocoa_Window_Driver(w);
+}
+
+
+Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
+{
+ return new Fl_Quartz_Image_Surface_Driver(w, h, high_res, off);
+}
diff --git a/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.H b/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.H
new file mode 100644
index 000000000..6d8923c99
--- /dev/null
+++ b/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.H
@@ -0,0 +1,35 @@
+//
+// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_GDI_COPY_SURFACE_DRIVER_H
+#define FL_GDI_COPY_SURFACE_DRIVER_H
+
+#include <FL/Fl_Copy_Surface.H>
+#include <FL/platform.H>
+
+class Fl_GDI_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
+ friend class Fl_Copy_Surface_Driver;
+protected:
+ HDC oldgc;
+ HDC gc;
+ Fl_GDI_Copy_Surface_Driver(int w, int h);
+ ~Fl_GDI_Copy_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+};
+
+#endif // FL_GDI_COPY_SURFACE_DRIVER_H
diff --git a/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.cxx b/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.cxx
index c1d845e6a..29478a9c4 100644
--- a/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.cxx
+++ b/src/drivers/GDI/Fl_GDI_Copy_Surface_Driver.cxx
@@ -15,31 +15,13 @@
//
#include <config.h>
-#include <FL/Fl_Copy_Surface.H>
+#include "Fl_GDI_Copy_Surface_Driver.H"
#include <FL/platform.H>
#include "Fl_GDI_Graphics_Driver.H"
#include "../WinAPI/Fl_WinAPI_Screen_Driver.H"
#include <FL/Fl_Image_Surface.H>
#include <windows.h>
-class Fl_GDI_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
- friend class Fl_Copy_Surface_Driver;
-protected:
- HDC oldgc;
- HDC gc;
- Fl_GDI_Copy_Surface_Driver(int w, int h);
- ~Fl_GDI_Copy_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
-};
-
-
-Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
-{
- return new Fl_GDI_Copy_Surface_Driver(w, h);
-}
-
Fl_GDI_Copy_Surface_Driver::Fl_GDI_Copy_Surface_Driver(int w, int h) : Fl_Copy_Surface_Driver(w, h) {
driver(Fl_Graphics_Driver::newMainGraphicsDriver());
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
index 824ad2fa7..59c111a39 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.H
@@ -177,10 +177,12 @@ public:
#if USE_GDIPLUS
class Fl_GDIplus_Graphics_Driver : public Fl_GDI_Graphics_Driver {
+ friend class Fl_Graphics_Driver;
private:
Gdiplus::Color gdiplus_color_;
Gdiplus::Pen *pen_;
Gdiplus::SolidBrush *brush_;
+ static ULONG_PTR gdiplusToken;
public:
Fl_GDIplus_Graphics_Driver();
virtual ~Fl_GDIplus_Graphics_Driver();
diff --git a/src/drivers/GDI/Fl_GDI_Graphics_Driver.cxx b/src/drivers/GDI/Fl_GDI_Graphics_Driver.cxx
index 484830e2a..caa8d6746 100644
--- a/src/drivers/GDI/Fl_GDI_Graphics_Driver.cxx
+++ b/src/drivers/GDI/Fl_GDI_Graphics_Driver.cxx
@@ -24,7 +24,6 @@
#include "Fl_Font.H"
#if USE_GDIPLUS
-static ULONG_PTR gdiplusToken = 0;
Fl_GDIplus_Graphics_Driver::Fl_GDIplus_Graphics_Driver() : Fl_GDI_Graphics_Driver() {
if (!fl_current_xmap) color(FL_BLACK);
@@ -51,27 +50,13 @@ int Fl_GDIplus_Graphics_Driver::antialias() {
#endif
-/*
- * By linking this module, the following static method will instantiate the
- * Windows GDI Graphics driver as the main display driver.
- */
-Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
-{
-#if USE_GDIPLUS
- // Initialize GDI+.
- static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
- if (gdiplusToken == 0) GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
-
- Fl_Graphics_Driver *driver = new Fl_GDIplus_Graphics_Driver();
- return driver;
-#else
- return new Fl_GDI_Graphics_Driver();
-#endif
-}
#if USE_GDIPLUS
+
+ULONG_PTR Fl_GDIplus_Graphics_Driver::gdiplusToken = 0;
+
void Fl_GDIplus_Graphics_Driver::shutdown() {
- Gdiplus::GdiplusShutdown(gdiplusToken);
+ Gdiplus::GdiplusShutdown(Fl_GDIplus_Graphics_Driver::gdiplusToken);
}
#endif
diff --git a/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.H b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.H
new file mode 100644
index 000000000..979b7bd3a
--- /dev/null
+++ b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.H
@@ -0,0 +1,38 @@
+//
+// Draw-to-image code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_GDI_IMAGE_SURFACE_DRIVER_H
+#define FL_GDI_IMAGE_SURFACE_DRIVER_H
+
+#include <FL/Fl_Image_Surface.H>
+#include <FL/Fl_RGB_Image.H>
+#include <FL/platform.H>
+
+class Fl_GDI_Image_Surface_Driver : public Fl_Image_Surface_Driver {
+ virtual void end_current();
+public:
+ Window pre_window;
+ int _savedc;
+ Fl_GDI_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
+ ~Fl_GDI_Image_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+ Fl_RGB_Image *image();
+ POINT origin;
+};
+
+#endif // FL_GDI_IMAGE_SURFACE_DRIVER_H
diff --git a/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
index 09a1a7e2a..7f655e291 100644
--- a/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
+++ b/src/drivers/GDI/Fl_GDI_Image_Surface_Driver.cxx
@@ -17,30 +17,10 @@
#include "Fl_GDI_Graphics_Driver.H"
#include "../WinAPI/Fl_WinAPI_Screen_Driver.H"
-#include <FL/Fl_Image_Surface.H>
+#include "Fl_GDI_Image_Surface_Driver.H"
#include <FL/platform.H>
#include <windows.h>
-class Fl_GDI_Image_Surface_Driver : public Fl_Image_Surface_Driver {
- virtual void end_current();
-public:
- Window pre_window;
- int _savedc;
- Fl_GDI_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
- ~Fl_GDI_Image_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
- Fl_RGB_Image *image();
- POINT origin;
-};
-
-
-Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
-{
- return new Fl_GDI_Image_Surface_Driver(w, h, high_res, off);
-}
-
Fl_GDI_Image_Surface_Driver::Fl_GDI_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off) : Fl_Image_Surface_Driver(w, h, high_res, off) {
float d = fl_graphics_driver->scale();
diff --git a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H
index 6aab63978..14d469dbe 100644
--- a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H
+++ b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.H
@@ -20,6 +20,7 @@
#define Fl_Quartz_Copy_Surface_Driver_H
#include <FL/Fl_Copy_Surface.H>
+#include <FL/platform.H>
class Fl_Quartz_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
friend class Fl_Copy_Surface_Driver;
diff --git a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx
index 401fd1daf..3ededb5ab 100644
--- a/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx
+++ b/src/drivers/Quartz/Fl_Quartz_Copy_Surface_Driver.cxx
@@ -20,21 +20,6 @@
#include "Fl_Quartz_Copy_Surface_Driver.H"
#include "../Cocoa/Fl_Cocoa_Window_Driver.H"
-/**
- \cond DriverDev
- \addtogroup DriverDeveloper
- \{
- */
-
-Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
-{
- return new Fl_Quartz_Copy_Surface_Driver(w, h);
-}
-
-/**
- \}
- \endcond
- */
Fl_Quartz_Copy_Surface_Driver::Fl_Quartz_Copy_Surface_Driver(int w, int h) : Fl_Copy_Surface_Driver(w, h) {
driver(new Fl_Quartz_Printer_Graphics_Driver);
diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx
index 85872f9ed..ee9542c21 100644
--- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx
+++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.cxx
@@ -43,14 +43,6 @@ void Fl_Quartz_Graphics_Driver::init_CoreText_or_ATSU()
}
#endif
-/*
- * By linking this module, the following static method will instantiate the
- * OS X Quartz Graphics driver as the main display driver.
- */
-Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
-{
- return new Fl_Quartz_Graphics_Driver();
-}
void Fl_Quartz_Graphics_Driver::antialias(int state) {
}
diff --git a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.H b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.H
new file mode 100644
index 000000000..4e6f8c79d
--- /dev/null
+++ b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.H
@@ -0,0 +1,35 @@
+//
+// Draw-to-image code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2021 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_QUARTZ_IMAGE_SURFACE_DRIVER_H
+#define FL_QUARTZ_IMAGE_SURFACE_DRIVER_H
+
+#include <FL/Fl_Image_Surface.H>
+#include <FL/platform.H>
+
+class Fl_Quartz_Image_Surface_Driver : public Fl_Image_Surface_Driver {
+ virtual void end_current();
+public:
+ Window pre_window;
+ Fl_Quartz_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
+ ~Fl_Quartz_Image_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+ Fl_RGB_Image *image();
+};
+
+#endif // FL_QUARTZ_IMAGE_SURFACE_DRIVER_H
diff --git a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
index 388d2d246..ff18c2626 100644
--- a/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
+++ b/src/drivers/Quartz/Fl_Quartz_Image_Surface_Driver.cxx
@@ -16,41 +16,11 @@
#include <FL/platform.H>
#include <FL/fl_draw.H>
-#include <FL/Fl_Image_Surface.H>
+#include "Fl_Quartz_Image_Surface_Driver.H"
#include "Fl_Quartz_Graphics_Driver.H"
#include "../Cocoa/Fl_Cocoa_Window_Driver.H"
#include <ApplicationServices/ApplicationServices.h>
-class Fl_Quartz_Image_Surface_Driver : public Fl_Image_Surface_Driver {
- virtual void end_current();
-public:
- Window pre_window;
- Fl_Quartz_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
- ~Fl_Quartz_Image_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
- Fl_RGB_Image *image();
-};
-
-
-/**
- \cond DriverDev
- \addtogroup DriverDeveloper
- \{
- */
-
-Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
-{
- return new Fl_Quartz_Image_Surface_Driver(w, h, high_res, off);
-}
-
-/**
- \}
- \endcond
- */
-
-
Fl_Quartz_Image_Surface_Driver::Fl_Quartz_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off) : Fl_Image_Surface_Driver(w, h, high_res, off) {
int W = w, H = h;
diff --git a/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.H b/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.H
new file mode 100644
index 000000000..f5f6eee11
--- /dev/null
+++ b/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.H
@@ -0,0 +1,34 @@
+//
+// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_WAYLAND_COPY_SURFACE_DRIVER_H
+#define FL_WAYLAND_COPY_SURFACE_DRIVER_H
+
+#include <FL/Fl_Copy_Surface.H>
+#include <FL/Fl_Image_Surface.H>
+
+class Fl_Wayland_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
+ friend class Fl_Copy_Surface_Driver;
+ Fl_Image_Surface *img_surf;
+protected:
+ Fl_Wayland_Copy_Surface_Driver(int w, int h);
+ ~Fl_Wayland_Copy_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+};
+
+#endif // FL_WAYLAND_COPY_SURFACE_DRIVER_H
diff --git a/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx
index addcfbebd..2759c7d60 100644
--- a/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Copy_Surface_Driver.cxx
@@ -15,30 +15,13 @@
//
#include <config.h>
-#include <FL/Fl_Copy_Surface.H>
+#include "Fl_Wayland_Copy_Surface_Driver.H"
#include <FL/Fl_Image_Surface.H>
#include "Fl_Wayland_Graphics_Driver.H"
#include "Fl_Wayland_Screen_Driver.H"
#include "Fl_Wayland_Window_Driver.H"
#include <FL/platform.H>
-class Fl_Wayland_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
- friend class Fl_Copy_Surface_Driver;
- Fl_Image_Surface *img_surf;
-protected:
- Fl_Wayland_Copy_Surface_Driver(int w, int h);
- ~Fl_Wayland_Copy_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
-};
-
-
-Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
-{
- return new Fl_Wayland_Copy_Surface_Driver(w, h);
-}
-
Fl_Wayland_Copy_Surface_Driver::Fl_Wayland_Copy_Surface_Driver(int w, int h) : Fl_Copy_Surface_Driver(w, h) {
int os_scale = (fl_window ? fl_window->scale : 1);
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H
new file mode 100644
index 000000000..486051f6f
--- /dev/null
+++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.H
@@ -0,0 +1,67 @@
+//
+// Class Fl_Wayland_Gl_Window_Driver for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2021-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
+//
+
+#ifndef FL_WAYLAND_GL_WINDOW_DRIVER_H
+#define FL_WAYLAND_GL_WINDOW_DRIVER_H
+
+#include <config.h>
+#if HAVE_GL
+#include <FL/platform.H>
+#include "../../Fl_Gl_Window_Driver.H"
+#include <wayland-egl.h>
+#include <EGL/egl.h>
+#include <FL/gl.h>
+
+/* Implementation note about OpenGL drawing on the Wayland platform
+
+After eglCreateWindowSurface() with attributes {EGL_RENDER_BUFFER, EGL_SINGLE_BUFFER, EGL_NONE},
+eglQueryContext() reports that EGL_RENDER_BUFFER equals EGL_BACK_BUFFER.
+This experiment suggests that the platform only supports double-buffer drawing.
+Consequently, FL_DOUBLE is enforced in all Fl_Gl_Window::mode_ values under Wayland.
+*/
+
+class Fl_Wayland_Gl_Window_Driver : public Fl_Gl_Window_Driver {
+ friend class Fl_Gl_Window_Driver;
+ bool egl_resize_in_progress;
+protected:
+ Fl_Wayland_Gl_Window_Driver(Fl_Gl_Window *win);
+ virtual float pixels_per_unit();
+ virtual void make_current_before();
+ virtual int mode_(int m, const int *a);
+ virtual void swap_buffers();
+ virtual void resize(int is_a_resize, int w, int h);
+ virtual char swap_type();
+ virtual Fl_Gl_Choice *find(int m, const int *alistp);
+ virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
+ virtual void set_gl_context(Fl_Window* w, GLContext context);
+ virtual void delete_gl_context(GLContext);
+ virtual void make_overlay_current();
+ virtual void redraw_overlay();
+ virtual void waitGL();
+ virtual void gl_start();
+ virtual Fl_RGB_Image* capture_gl_rectangle(int x, int y, int w, int h);
+ char *alpha_mask_for_string(const char *str, int n, int w, int h, Fl_Fontsize fs);
+public:
+ static EGLDisplay egl_display;
+ static EGLint configs_count;
+ static struct wl_event_queue *gl_event_queue;
+ void init();
+ struct wl_egl_window *egl_window;
+ EGLSurface egl_surface;
+};
+
+#endif // HAVE_GL
+#endif // FL_WAYLAND_GL_WINDOW_DRIVER_H
diff --git a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
index 290a52361..4d8f478e3 100644
--- a/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Gl_Window_Driver.cxx
@@ -22,7 +22,7 @@
#include "../../Fl_Screen_Driver.H"
#include "Fl_Wayland_Window_Driver.H"
#include "Fl_Wayland_Graphics_Driver.H"
-#include "../../Fl_Gl_Window_Driver.H"
+#include "Fl_Wayland_Gl_Window_Driver.H"
#include <wayland-egl.h>
#include <EGL/egl.h>
#include <FL/gl.h>
@@ -35,36 +35,6 @@ This experiment suggests that the platform only supports double-buffer drawing.
Consequently, FL_DOUBLE is enforced in all Fl_Gl_Window::mode_ values under Wayland.
*/
-class Fl_Wayland_Gl_Window_Driver : public Fl_Gl_Window_Driver {
- friend class Fl_Gl_Window_Driver;
- bool egl_resize_in_progress;
-protected:
- Fl_Wayland_Gl_Window_Driver(Fl_Gl_Window *win);
- virtual float pixels_per_unit();
- virtual void make_current_before();
- virtual int mode_(int m, const int *a);
- virtual void swap_buffers();
- virtual void resize(int is_a_resize, int w, int h);
- virtual char swap_type();
- virtual Fl_Gl_Choice *find(int m, const int *alistp);
- virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
- virtual void set_gl_context(Fl_Window* w, GLContext context);
- virtual void delete_gl_context(GLContext);
- virtual void make_overlay_current();
- virtual void redraw_overlay();
- virtual void waitGL();
- virtual void gl_start();
- virtual Fl_RGB_Image* capture_gl_rectangle(int x, int y, int w, int h);
- char *alpha_mask_for_string(const char *str, int n, int w, int h, Fl_Fontsize fs);
-public:
- static EGLDisplay egl_display;
- static EGLint configs_count;
- static struct wl_event_queue *gl_event_queue;
- void init();
- struct wl_egl_window *egl_window;
- EGLSurface egl_surface;
-};
-
// Describes crap needed to create a GLContext.
class Fl_Wayland_Gl_Choice : public Fl_Gl_Choice {
friend class Fl_Wayland_Gl_Window_Driver;
@@ -247,12 +217,6 @@ void Fl_Wayland_Gl_Window_Driver::redraw_overlay() {
}
-Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
-{
- return new Fl_Wayland_Gl_Window_Driver(w);
-}
-
-
static void gl_frame_ready(void *data, struct wl_callback *cb, uint32_t time) {
*(bool*)data = true;
}
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 2e50f2e2b..9a337dde8 100644
--- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -152,13 +152,6 @@ Fl_Wayland_Graphics_Driver::Fl_Wayland_Graphics_Driver () : Fl_Cairo_Graphics_Dr
}
-Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
-{
- fl_graphics_driver = new Fl_Wayland_Graphics_Driver();
- return fl_graphics_driver;
-}
-
-
void Fl_Wayland_Graphics_Driver::activate(struct fl_wld_buffer *buffer, float scale) {
if (dummy_pango_layout_) {
cairo_surface_t *surf = cairo_get_target(cairo_);
diff --git a/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.H b/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.H
new file mode 100644
index 000000000..cb80d355a
--- /dev/null
+++ b/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.H
@@ -0,0 +1,33 @@
+//
+// Draw-to-image code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 1998-2021 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_WAYLAND_IMAGE_SURFACE_DRIVER_H
+#define FL_WAYLAND_IMAGE_SURFACE_DRIVER_H
+
+#include <FL/Fl_Image_Surface.H>
+
+class Fl_Wayland_Image_Surface_Driver : public Fl_Image_Surface_Driver {
+ virtual void end_current();
+public:
+ Fl_Wayland_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
+ ~Fl_Wayland_Image_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+ Fl_RGB_Image *image();
+};
+
+#endif // FL_WAYLAND_IMAGE_SURFACE_DRIVER_H
diff --git a/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx
index d79ad0f2e..d30356396 100644
--- a/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Image_Surface_Driver.cxx
@@ -18,23 +18,8 @@
#include <FL/platform.H>
#include "Fl_Wayland_Graphics_Driver.H"
#include "Fl_Wayland_Window_Driver.H"
-#include <FL/Fl_Image_Surface.H>
+#include "Fl_Wayland_Image_Surface_Driver.H"
-class Fl_Wayland_Image_Surface_Driver : public Fl_Image_Surface_Driver {
- virtual void end_current();
-public:
- Fl_Wayland_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
- ~Fl_Wayland_Image_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
- Fl_RGB_Image *image();
-};
-
-Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
-{
- return new Fl_Wayland_Image_Surface_Driver(w, h, high_res, off);
-}
Fl_Wayland_Image_Surface_Driver::Fl_Wayland_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off) : Fl_Image_Surface_Driver(w, h, high_res, off) {
float d = 1;
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
index 84b2c8c91..f4ba06d56 100644
--- a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.cxx
@@ -157,16 +157,6 @@ extern const char *fl_bg2;
// end of extern additions workaround
-/**
- Creates a driver that manages all screen and display related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
-{
- return new Fl_Wayland_Screen_Driver();
-}
-
FL_EXPORT struct wl_display *fl_display = NULL;
static bool has_xrgb = false;
diff --git a/src/drivers/Wayland/Fl_Wayland_System_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_System_Driver.cxx
index 46351646c..a54e2ac5f 100644
--- a/src/drivers/Wayland/Fl_Wayland_System_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_System_Driver.cxx
@@ -21,16 +21,6 @@
#include <FL/platform.H>
#include "../../../libdecor/src/libdecor.h"
-/**
- Creates a driver that manages all system related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_System_Driver *Fl_System_Driver::newSystemDriver()
-{
- return new Fl_Wayland_System_Driver();
-}
-
int Fl_Wayland_System_Driver::event_key(int k) {
if (k > FL_Button && k <= FL_Button+8)
diff --git a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 6241d5af8..1e3990559 100644
--- a/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ b/src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -60,12 +60,6 @@ void Fl_Wayland_Window_Driver::destroy_double_buffer() {
}
-Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
-{
- return new Fl_Wayland_Window_Driver(w);
-}
-
-
Fl_Wayland_Window_Driver::Fl_Wayland_Window_Driver(Fl_Window *win) : Fl_Window_Driver(win)
{
icon_ = new icon_data;
diff --git a/src/drivers/Wayland/fl_wayland_gl_platform_init.cxx b/src/drivers/Wayland/fl_wayland_gl_platform_init.cxx
new file mode 100644
index 000000000..5a2a78bee
--- /dev/null
+++ b/src/drivers/Wayland/fl_wayland_gl_platform_init.cxx
@@ -0,0 +1,24 @@
+//
+// Wayland-specific code to initialize wayland support.
+//
+// Copyright 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_Wayland_Gl_Window_Driver.H"
+
+
+Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
+{
+ return new Fl_Wayland_Gl_Window_Driver(w);
+}
diff --git a/src/drivers/Wayland/fl_wayland_platform_init.cxx b/src/drivers/Wayland/fl_wayland_platform_init.cxx
new file mode 100644
index 000000000..e6aebd174
--- /dev/null
+++ b/src/drivers/Wayland/fl_wayland_platform_init.cxx
@@ -0,0 +1,60 @@
+//
+// Wayland-specific code to initialize wayland support.
+//
+// Copyright 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_Wayland_Copy_Surface_Driver.H"
+#include "Fl_Wayland_Graphics_Driver.H"
+#include "Fl_Wayland_Screen_Driver.H"
+#include "Fl_Wayland_System_Driver.H"
+#include "Fl_Wayland_Window_Driver.H"
+#include "Fl_Wayland_Image_Surface_Driver.H"
+
+
+Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
+{
+ return new Fl_Wayland_Copy_Surface_Driver(w, h);
+}
+
+
+Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
+{
+ fl_graphics_driver = new Fl_Wayland_Graphics_Driver();
+ return fl_graphics_driver;
+}
+
+
+Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
+{
+ return new Fl_Wayland_Screen_Driver();
+}
+
+
+Fl_System_Driver *Fl_System_Driver::newSystemDriver()
+{
+ return new Fl_Wayland_System_Driver();
+}
+
+
+Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
+{
+ return new Fl_Wayland_Window_Driver(w);
+}
+
+
+Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
+{
+ return new Fl_Wayland_Image_Surface_Driver(w, h, high_res, off);
+}
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H
new file mode 100644
index 000000000..efece9d19
--- /dev/null
+++ b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.H
@@ -0,0 +1,64 @@
+//
+// Class Fl_Wayland_Gl_Window_Driver for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2021-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
+//
+
+#ifndef FL_WINAPI_GL_WINDOW_DRIVER_H
+#define FL_WINAPI_GL_WINDOW_DRIVER_H
+
+#include <config.h>
+#if HAVE_GL
+#include <FL/platform.H>
+#include "../../Fl_Gl_Window_Driver.H"
+#include <FL/gl.h>
+
+/* Implementation note about OpenGL drawing on the Wayland platform
+
+After eglCreateWindowSurface() with attributes {EGL_RENDER_BUFFER, EGL_SINGLE_BUFFER, EGL_NONE},
+eglQueryContext() reports that EGL_RENDER_BUFFER equals EGL_BACK_BUFFER.
+This experiment suggests that the platform only supports double-buffer drawing.
+Consequently, FL_DOUBLE is enforced in all Fl_Gl_Window::mode_ values under Wayland.
+*/
+
+class Fl_WinAPI_Gl_Window_Driver : public Fl_Gl_Window_Driver {
+ friend class Fl_Gl_Window_Driver;
+ Fl_WinAPI_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
+ virtual float pixels_per_unit();
+ virtual int mode_(int m, const int *a);
+ virtual void make_current_after();
+ virtual void swap_buffers();
+ virtual void invalidate() {}
+ virtual int flush_begin(char& valid_f);
+ virtual Fl_Gl_Choice *find(int m, const int *alistp);
+ virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
+ virtual void set_gl_context(Fl_Window* w, GLContext context);
+ virtual void delete_gl_context(GLContext);
+ virtual void make_overlay_current();
+ virtual void redraw_overlay();
+ virtual void* GetProcAddress(const char *procName);
+ virtual void draw_string_legacy(const char* str, int n);
+ virtual void gl_bitmap_font(Fl_Font_Descriptor *fl_fontsize);
+ virtual void get_list(Fl_Font_Descriptor *fd, int r);
+ virtual int genlistsize();
+#if HAVE_GL_OVERLAY
+ virtual void gl_hide_before(void *& overlay);
+ virtual int can_do_overlay();
+ virtual int overlay_color(Fl_Color i);
+ void make_overlay(void*&overlay);
+#endif
+};
+
+#endif // HAVE_GL
+
+#endif // FL_WINAPI_GL_WINDOW_DRIVER_H
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx
index 1dbc9f77d..cd6e98646 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Gl_Window_Driver.cxx
@@ -19,7 +19,7 @@
#include <FL/platform.H>
#include "../../Fl_Screen_Driver.H"
#include <FL/gl.h>
-#include "../../Fl_Gl_Window_Driver.H"
+#include "Fl_WinAPI_Gl_Window_Driver.H"
#include "../../Fl_Gl_Choice.H"
#include "Fl_WinAPI_Window_Driver.H"
#include "../GDI/Fl_Font.H"
@@ -36,34 +36,6 @@ extern void fl_save_dc(HWND, HDC);
#define DEBUG_PFD (0) // 1 = PFD selection debug output, 0 = no debug output
-class Fl_WinAPI_Gl_Window_Driver : public Fl_Gl_Window_Driver {
- friend class Fl_Gl_Window_Driver;
- Fl_WinAPI_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
- virtual float pixels_per_unit();
- virtual int mode_(int m, const int *a);
- virtual void make_current_after();
- virtual void swap_buffers();
- virtual void invalidate() {}
- virtual int flush_begin(char& valid_f);
- virtual Fl_Gl_Choice *find(int m, const int *alistp);
- virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
- virtual void set_gl_context(Fl_Window* w, GLContext context);
- virtual void delete_gl_context(GLContext);
- virtual void make_overlay_current();
- virtual void redraw_overlay();
- virtual void* GetProcAddress(const char *procName);
- virtual void draw_string_legacy(const char* str, int n);
- virtual void gl_bitmap_font(Fl_Font_Descriptor *fl_fontsize);
- virtual void get_list(Fl_Font_Descriptor *fd, int r);
- virtual int genlistsize();
-#if HAVE_GL_OVERLAY
- virtual void gl_hide_before(void *& overlay);
- virtual int can_do_overlay();
- virtual int overlay_color(Fl_Color i);
- void make_overlay(void*&overlay);
-#endif
-};
-
// Describes crap needed to create a GLContext.
class Fl_WinAPI_Gl_Choice : public Fl_Gl_Choice {
friend class Fl_WinAPI_Gl_Window_Driver;
@@ -292,11 +264,6 @@ int Fl_WinAPI_Gl_Window_Driver::overlay_color(Fl_Color i) {
#endif // HAVE_GL_OVERLAY
-Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
-{
- return new Fl_WinAPI_Gl_Window_Driver(w);
-}
-
float Fl_WinAPI_Gl_Window_Driver::pixels_per_unit()
{
int ns = Fl_Window_Driver::driver(pWindow)->screen_num();
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
index 489e7fe8d..be9dac6bd 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
@@ -39,17 +39,6 @@ extern const char *fl_bg2;
#endif // !HMONITOR_DECLARED && _WIN32_WINNT < 0x0500
-/*
- Creates a driver that manages all screen and display related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
-{
- return new Fl_WinAPI_Screen_Driver();
-}
-
-
int Fl_WinAPI_Screen_Driver::visual(int flags)
{
fl_GetDC(0);
diff --git a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
index e88ac8e9b..18f6b3e3e 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
@@ -144,15 +144,6 @@ static char *wchar_to_utf8(const wchar_t *wstr, char *&utf8) {
return utf8;
}
-/*
- Creates a driver that manages all system related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_System_Driver *Fl_System_Driver::newSystemDriver() {
- return new Fl_WinAPI_System_Driver();
-}
-
void Fl_WinAPI_System_Driver::warning(const char *format, va_list args) {
// Show nothing for warnings under Windows...
}
diff --git a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
index a3bf07a82..52116778c 100644
--- a/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
+++ b/src/drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
@@ -35,12 +35,6 @@ extern HPALETTE fl_select_palette(void); // in fl_color_win32.cxx
#endif
-Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
-{
- return new Fl_WinAPI_Window_Driver(w);
-}
-
-
Fl_WinAPI_Window_Driver::Fl_WinAPI_Window_Driver(Fl_Window *win)
: Fl_Window_Driver(win)
{
diff --git a/src/drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx b/src/drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx
new file mode 100644
index 000000000..f5b26be64
--- /dev/null
+++ b/src/drivers/WinAPI/fl_WinAPI_gl_platform_init.cxx
@@ -0,0 +1,24 @@
+//
+// Wayland-specific code to initialize wayland support.
+//
+// Copyright 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_WinAPI_Gl_Window_Driver.H"
+
+
+Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
+{
+ return new Fl_WinAPI_Gl_Window_Driver(w);
+}
diff --git a/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx b/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx
new file mode 100644
index 000000000..bf5e34d36
--- /dev/null
+++ b/src/drivers/WinAPI/fl_WinAPI_platform_init.cxx
@@ -0,0 +1,69 @@
+//
+// Windows-specific code to initialize Windows support.
+//
+// Copyright 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 "../GDI/Fl_GDI_Copy_Surface_Driver.H"
+#include "../GDI/Fl_GDI_Graphics_Driver.H"
+#include "Fl_WinAPI_Screen_Driver.H"
+#include "Fl_WinAPI_System_Driver.H"
+#include "Fl_WinAPI_Window_Driver.H"
+#include "../GDI/Fl_GDI_Image_Surface_Driver.H"
+
+
+Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
+{
+ return new Fl_GDI_Copy_Surface_Driver(w, h);
+}
+
+
+Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
+{
+#if USE_GDIPLUS
+ // Initialize GDI+.
+ static Gdiplus::GdiplusStartupInput gdiplusStartupInput;
+ if (Fl_GDIplus_Graphics_Driver::gdiplusToken == 0) {
+ GdiplusStartup(&Fl_GDIplus_Graphics_Driver::gdiplusToken, &gdiplusStartupInput, NULL);
+ }
+ Fl_Graphics_Driver *driver = new Fl_GDIplus_Graphics_Driver();
+ return driver;
+#else
+ return new Fl_GDI_Graphics_Driver();
+#endif
+}
+
+
+Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
+{
+ return new Fl_WinAPI_Screen_Driver();
+}
+
+
+Fl_System_Driver *Fl_System_Driver::newSystemDriver()
+{
+ return new Fl_WinAPI_System_Driver();
+}
+
+
+Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
+{
+ return new Fl_WinAPI_Window_Driver(w);
+}
+
+
+Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
+{
+ return new Fl_GDI_Image_Surface_Driver(w, h, high_res, off);
+}
diff --git a/src/drivers/X11/Fl_X11_Gl_Window_Driver.H b/src/drivers/X11/Fl_X11_Gl_Window_Driver.H
new file mode 100644
index 000000000..a7694d1a9
--- /dev/null
+++ b/src/drivers/X11/Fl_X11_Gl_Window_Driver.H
@@ -0,0 +1,58 @@
+//
+// Class Fl_X11_Gl_Window_Driver for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_X11_GL_WINDOW_DRIVER_H
+#define FL_X11_GL_WINDOW_DRIVER_H
+
+#include <config.h>
+#if HAVE_GL
+#include <FL/platform.H>
+#include "../../Fl_Gl_Choice.H"
+#include "../../Fl_Gl_Window_Driver.H"
+
+
+class Fl_X11_Gl_Window_Driver : public Fl_Gl_Window_Driver {
+ friend class Fl_Gl_Window_Driver;
+ Fl_X11_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
+ virtual float pixels_per_unit();
+ virtual void before_show(int& need_after);
+ virtual int mode_(int m, const int *a);
+ virtual void swap_buffers();
+ virtual char swap_type();
+ virtual Fl_Gl_Choice *find(int m, const int *alistp);
+ virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
+ virtual void set_gl_context(Fl_Window* w, GLContext context);
+ virtual void delete_gl_context(GLContext);
+ virtual void make_overlay_current();
+ virtual void redraw_overlay();
+ virtual void waitGL();
+ virtual void gl_visual(Fl_Gl_Choice*); // support for Fl::gl_visual()
+ virtual void gl_start();
+ virtual void draw_string_legacy(const char* str, int n);
+ virtual void gl_bitmap_font(Fl_Font_Descriptor *fl_fontsize);
+ virtual void get_list(Fl_Font_Descriptor *fd, int r);
+ virtual int genlistsize();
+#if !USE_XFT
+ virtual Fl_Font_Descriptor** fontnum_to_fontdescriptor(int fnum);
+#endif
+ public:
+ static GLContext create_gl_context(XVisualInfo* vis);
+};
+
+
+#endif // HAVE_GL
+
+#endif // FL_X11_GL_WINDOW_DRIVER_H
diff --git a/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
index 1b411c704..9a092756a 100644
--- a/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Gl_Window_Driver.cxx
@@ -20,7 +20,7 @@
#include "../../Fl_Gl_Choice.H"
#include "../../Fl_Screen_Driver.H"
#include "../../Fl_Window_Driver.H"
-#include "../../Fl_Gl_Window_Driver.H"
+#include "Fl_X11_Gl_Window_Driver.H"
#include "../Xlib/Fl_Font.H"
#include "../Xlib/Fl_Xlib_Graphics_Driver.H"
# include <GL/glx.h>
@@ -28,33 +28,6 @@
# typedef void *GLXFBConfig;
# endif
-class Fl_X11_Gl_Window_Driver : public Fl_Gl_Window_Driver {
- friend class Fl_Gl_Window_Driver;
- Fl_X11_Gl_Window_Driver(Fl_Gl_Window *win) : Fl_Gl_Window_Driver(win) {}
- virtual float pixels_per_unit();
- virtual void before_show(int& need_after);
- virtual int mode_(int m, const int *a);
- virtual void swap_buffers();
- virtual char swap_type();
- virtual Fl_Gl_Choice *find(int m, const int *alistp);
- virtual GLContext create_gl_context(Fl_Window* window, const Fl_Gl_Choice* g, int layer = 0);
- virtual void set_gl_context(Fl_Window* w, GLContext context);
- virtual void delete_gl_context(GLContext);
- virtual void make_overlay_current();
- virtual void redraw_overlay();
- virtual void waitGL();
- virtual void gl_visual(Fl_Gl_Choice*); // support for Fl::gl_visual()
- virtual void gl_start();
- virtual void draw_string_legacy(const char* str, int n);
- virtual void gl_bitmap_font(Fl_Font_Descriptor *fl_fontsize);
- virtual void get_list(Fl_Font_Descriptor *fd, int r);
- virtual int genlistsize();
-#if !USE_XFT
- virtual Fl_Font_Descriptor** fontnum_to_fontdescriptor(int fnum);
-#endif
- public:
- static GLContext create_gl_context(XVisualInfo* vis);
-};
// Describes crap needed to create a GLContext.
class Fl_X11_Gl_Choice : public Fl_Gl_Choice {
@@ -360,11 +333,6 @@ void Fl_X11_Gl_Window_Driver::redraw_overlay() {
}
-Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
-{
- return new Fl_X11_Gl_Window_Driver(w);
-}
-
void Fl_X11_Gl_Window_Driver::before_show(int&) {
Fl_X11_Gl_Choice *g = (Fl_X11_Gl_Choice*)this->g();
Fl_X::make_xid(pWindow, g->vis, g->colormap);
diff --git a/src/drivers/X11/Fl_X11_Screen_Driver.cxx b/src/drivers/X11/Fl_X11_Screen_Driver.cxx
index d033f4cb7..3c942d654 100644
--- a/src/drivers/X11/Fl_X11_Screen_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Screen_Driver.cxx
@@ -58,24 +58,6 @@ extern const char *fl_bg2;
// end of extern additions workaround
-/**
- Creates a driver that manages all screen and display related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
-{
- Fl_X11_Screen_Driver *d = new Fl_X11_Screen_Driver();
-#if USE_XFT
- for (int i = 0; i < MAX_SCREENS; i++) d->screens[i].scale = 1;
- d->current_xft_dpi = 0.; // means the value of the Xft.dpi resource is still unknown
-#else
- secret_input_character = '*';
-#endif
- return d;
-}
-
-
void Fl_X11_Screen_Driver::display(const char *d)
{
if (d) setenv("DISPLAY", d, 1);
diff --git a/src/drivers/X11/Fl_X11_System_Driver.cxx b/src/drivers/X11/Fl_X11_System_Driver.cxx
index 40a98d32e..cbd97b509 100644
--- a/src/drivers/X11/Fl_X11_System_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_System_Driver.cxx
@@ -70,17 +70,6 @@ extern "C" {
#endif
-/**
- Creates a driver that manages all system related calls.
-
- This function must be implemented once for every platform.
- */
-Fl_System_Driver *Fl_System_Driver::newSystemDriver()
-{
- return new Fl_X11_System_Driver();
-}
-
-
// Find a program in the path...
static char *path_find(const char *program, char *filename, int filesize) {
const char *path; // Search path
diff --git a/src/drivers/X11/Fl_X11_Window_Driver.cxx b/src/drivers/X11/Fl_X11_Window_Driver.cxx
index 9b5196358..a91dadec3 100644
--- a/src/drivers/X11/Fl_X11_Window_Driver.cxx
+++ b/src/drivers/X11/Fl_X11_Window_Driver.cxx
@@ -43,11 +43,6 @@ void Fl_X11_Window_Driver::destroy_double_buffer() {
other_xid = 0;
}
-Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
-{
- return new Fl_X11_Window_Driver(w);
-}
-
Fl_X11_Window_Driver::Fl_X11_Window_Driver(Fl_Window *win)
: Fl_Window_Driver(win)
diff --git a/src/drivers/X11/fl_X11_gl_platform_init.cxx b/src/drivers/X11/fl_X11_gl_platform_init.cxx
new file mode 100644
index 000000000..66cfb6989
--- /dev/null
+++ b/src/drivers/X11/fl_X11_gl_platform_init.cxx
@@ -0,0 +1,24 @@
+//
+// X11-specific code to initialize wayland support.
+//
+// Copyright 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_X11_Gl_Window_Driver.H"
+
+
+Fl_Gl_Window_Driver *Fl_Gl_Window_Driver::newGlWindowDriver(Fl_Gl_Window *w)
+{
+ return new Fl_X11_Gl_Window_Driver(w);
+}
diff --git a/src/drivers/X11/fl_X11_platform_init.cxx b/src/drivers/X11/fl_X11_platform_init.cxx
new file mode 100644
index 000000000..6c528a7cb
--- /dev/null
+++ b/src/drivers/X11/fl_X11_platform_init.cxx
@@ -0,0 +1,66 @@
+//
+// X11-specific code to initialize wayland support.
+//
+// Copyright 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 "../Xlib/Fl_Xlib_Copy_Surface_Driver.H"
+#include "../Xlib/Fl_Xlib_Graphics_Driver.H"
+#include "Fl_X11_Screen_Driver.H"
+#include "Fl_X11_System_Driver.H"
+#include "Fl_X11_Window_Driver.H"
+#include "../Xlib/Fl_Xlib_Image_Surface_Driver.H"
+
+
+Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
+{
+ return new Fl_Xlib_Copy_Surface_Driver(w, h);
+}
+
+
+Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
+{
+ return new Fl_Xlib_Graphics_Driver();
+}
+
+
+Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
+{
+ Fl_X11_Screen_Driver *d = new Fl_X11_Screen_Driver();
+#if USE_XFT
+ for (int i = 0; i < MAX_SCREENS; i++) d->screens[i].scale = 1;
+ d->current_xft_dpi = 0.; // means the value of the Xft.dpi resource is still unknown
+#else
+ secret_input_character = '*';
+#endif
+ return d;
+}
+
+
+Fl_System_Driver *Fl_System_Driver::newSystemDriver()
+{
+ return new Fl_X11_System_Driver();
+}
+
+
+Fl_Window_Driver *Fl_Window_Driver::newWindowDriver(Fl_Window *w)
+{
+ return new Fl_X11_Window_Driver(w);
+}
+
+
+Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
+{
+ return new Fl_Xlib_Image_Surface_Driver(w, h, high_res, off);
+}
diff --git a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.H b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.H
new file mode 100644
index 000000000..a0b0db171
--- /dev/null
+++ b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.H
@@ -0,0 +1,36 @@
+//
+// Copy-to-clipboard code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_XLIB_COPY_SURFACE_DRIVER_H
+#define FL_XLIB_COPY_SURFACE_DRIVER_H
+
+#include <FL/Fl_Copy_Surface.H>
+#include <FL/platform.H>
+
+class Fl_Xlib_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
+ friend class Fl_Copy_Surface_Driver;
+ virtual void end_current();
+protected:
+ Fl_Offscreen xid;
+ Window oldwindow;
+ Fl_Xlib_Copy_Surface_Driver(int w, int h);
+ ~Fl_Xlib_Copy_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+};
+
+#endif // FL_XLIB_COPY_SURFACE_DRIVER_H
diff --git a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
index 0343e9a9c..f87ae55a2 100644
--- a/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Copy_Surface_Driver.cxx
@@ -15,32 +15,13 @@
//
#include <config.h>
-#include <FL/Fl_Copy_Surface.H>
+#include "Fl_Xlib_Copy_Surface_Driver.H"
#include <FL/Fl.H>
#include <FL/platform.H>
#include <FL/fl_draw.H>
#include "Fl_Xlib_Graphics_Driver.H"
#include "../X11/Fl_X11_Screen_Driver.H"
-class Fl_Xlib_Copy_Surface_Driver : public Fl_Copy_Surface_Driver {
- friend class Fl_Copy_Surface_Driver;
- virtual void end_current();
-protected:
- Fl_Offscreen xid;
- Window oldwindow;
- Fl_Xlib_Copy_Surface_Driver(int w, int h);
- ~Fl_Xlib_Copy_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
-};
-
-
-Fl_Copy_Surface_Driver *Fl_Copy_Surface_Driver::newCopySurfaceDriver(int w, int h)
-{
- return new Fl_Xlib_Copy_Surface_Driver(w, h);
-}
-
Fl_Xlib_Copy_Surface_Driver::Fl_Xlib_Copy_Surface_Driver(int w, int h) : Fl_Copy_Surface_Driver(w, h) {
driver(new Fl_Xlib_Graphics_Driver());
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
index 14c56c040..697acecb3 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
@@ -30,14 +30,6 @@ extern char fl_is_over_the_spot;
extern char *fl_get_font_xfld(int fnum, int size);
#endif
-/*
- * By linking this module, the following static method will instantiate the
- * X11 Xlib Graphics driver as the main display driver.
- */
-Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
-{
- return new Fl_Xlib_Graphics_Driver();
-}
GC Fl_Xlib_Graphics_Driver::gc_ = NULL;
int Fl_Xlib_Graphics_Driver::fl_overlay = 0;
diff --git a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.H b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.H
new file mode 100644
index 000000000..b7cb48010
--- /dev/null
+++ b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.H
@@ -0,0 +1,34 @@
+//
+// Draw-to-image code for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 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
+//
+
+#ifndef FL_XLIB_IMAGE_SURFACE_DRIVER_H
+#define FL_XLIB_IMAGE_SURFACE_DRIVER_H
+
+#include <FL/Fl_Image_Surface.H>
+
+class Fl_Xlib_Image_Surface_Driver : public Fl_Image_Surface_Driver {
+ virtual void end_current();
+public:
+ Window pre_window;
+ Fl_Xlib_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
+ ~Fl_Xlib_Image_Surface_Driver();
+ void set_current();
+ void translate(int x, int y);
+ void untranslate();
+ Fl_RGB_Image *image();
+};
+
+#endif // FL_XLIB_IMAGE_SURFACE_DRIVER_H
diff --git a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
index 89fe4a100..e1a33c746 100644
--- a/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Image_Surface_Driver.cxx
@@ -15,25 +15,9 @@
//
#include "Fl_Xlib_Graphics_Driver.H"
-#include <FL/Fl_Image_Surface.H>
+#include "Fl_Xlib_Image_Surface_Driver.H"
#include "../../Fl_Screen_Driver.H"
-class Fl_Xlib_Image_Surface_Driver : public Fl_Image_Surface_Driver {
- virtual void end_current();
-public:
- Window pre_window;
- Fl_Xlib_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off);
- ~Fl_Xlib_Image_Surface_Driver();
- void set_current();
- void translate(int x, int y);
- void untranslate();
- Fl_RGB_Image *image();
-};
-
-Fl_Image_Surface_Driver *Fl_Image_Surface_Driver::newImageSurfaceDriver(int w, int h, int high_res, Fl_Offscreen off)
-{
- return new Fl_Xlib_Image_Surface_Driver(w, h, high_res, off);
-}
Fl_Xlib_Image_Surface_Driver::Fl_Xlib_Image_Surface_Driver(int w, int h, int high_res, Fl_Offscreen off) : Fl_Image_Surface_Driver(w, h, high_res, off) {
float d = 1;