Separate platform init functions from platform-specific driver files

This commit is contained in:
ManoloFLTK
2022-03-13 08:56:23 +01:00
parent e8461a6191
commit b549cfaaea
51 changed files with 905 additions and 476 deletions
+30 -6
View File
@@ -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
)
+13 -6
View File
@@ -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 \
@@ -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
@@ -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;
}
@@ -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...
@@ -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)
@@ -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);
}
@@ -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
@@ -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);
}
@@ -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
+1 -19
View File
@@ -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());
+2
View File
@@ -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();
+4 -19
View File
@@ -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
@@ -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
@@ -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();
@@ -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;
@@ -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);
@@ -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) {
}
@@ -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
@@ -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;
@@ -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
@@ -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);
@@ -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
@@ -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;
}
@@ -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_);
@@ -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
@@ -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;
@@ -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;
@@ -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)
@@ -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;
@@ -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);
}
@@ -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);
}
@@ -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
@@ -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();
@@ -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);
@@ -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...
}
@@ -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)
{
@@ -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);
}
@@ -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);
}
+58
View File
@@ -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
+1 -33
View File
@@ -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);
-18
View File
@@ -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);
-11
View File
@@ -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
-5
View File
@@ -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)
@@ -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);
}
+66
View File
@@ -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);
}
@@ -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
@@ -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());
@@ -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;
@@ -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

Some files were not shown because too many files have changed in this diff Show More