Add System Driver and Window Driver.

Adding two new driver types for each platform. Fl_..._System_Drivers exist once per application and provide an interface for to file and filename handling, timers, locking, multithreading, etc. .

 The Fl_..._Window_Driver class is instantiated once for every window in the system and corresponds closely to (and actually inherits from) Fl_X. The difference now is, that there is one Fl_X/Fl_Window_Driver base class, and one platform version that derives from it.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11193 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2016-02-19 21:41:02 +00:00
parent 2b6482263b
commit 22d302e242
21 changed files with 520 additions and 18 deletions

View File

@ -25,13 +25,13 @@
#ifndef Fl_Device_H
#define Fl_Device_H
#include <FL/x.H>
#include <FL/Fl_Plugin.H>
#include <stdlib.h>
class Fl_Graphics_Driver;
class Fl_Font_Descriptor;
class Fl_RGB_Image;
class Fl_Widget;
/**
All graphical output devices and all graphics systems.

View File

@ -20,6 +20,7 @@
#define FL_SCREEN_DRIVER_H
#include <FL/Fl_Device.H>
#include <FL/x.H>
// TODO: add text composition?
// TODO: add Fl::display

44
FL/Fl_System_Driver.H Normal file
View File

@ -0,0 +1,44 @@
//
// "$Id$"
//
// A base class for platform specific system calls
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file Fl_System_Driver.H
\brief declaration of classe Fl_System_Driver.
*/
#ifndef FL_SYSTEM_DRIVER_H
#define FL_SYSTEM_DRIVER_H
#include <FL/Fl_Device.H>
/**
\brief A base class for platform specific window handling code.
*/
class FL_EXPORT Fl_System_Driver : public Fl_Device {
public:
Fl_System_Driver();
virtual ~Fl_System_Driver();
};
#endif // FL_SYSTEM_DRIVER_H
//
// End of "$Id$".
//

44
FL/Fl_Window_Driver.H Normal file
View File

@ -0,0 +1,44 @@
//
// "$Id$"
//
// A base class for platform specific window handling code
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/** \file Fl_Window_Driver.H
\brief declaration of classe Fl_Window_Driver.
*/
#ifndef FL_WINDOW_DRIVER_H
#define FL_WINDOW_DRIVER_H
#include <FL/x.H>
/**
\brief A base class for platform specific window handling code.
*/
class FL_EXPORT Fl_Window_Driver : public Fl_X {
public:
Fl_Window_Driver();
virtual ~Fl_Window_Driver();
};
#endif // FL_WINDOW_DRIVER_H
//
// End of "$Id$".
//

View File

@ -32,6 +32,8 @@ typedef FLWindow *Window;
typedef class FLWindow *Window; // pointer to the FLWindow objective-c class
#endif // __OBJC__
#include <FL/Fl_Device.H>
#if !(defined(FL_LIBRARY) || defined(FL_INTERNALS)) // this part is used when compiling an application program
# include <FL/Fl_Widget.H>
@ -137,7 +139,7 @@ extern NSCursor *fl_default_cursor;
// This object contains all mac-specific stuff about a window:
// WARNING: this object is highly subject to change!
class Fl_X {
class Fl_X : public Fl_Device {
public:
Window xid; // pointer to the Cocoa window object (FLWindow*)
Fl_Offscreen other_xid; // pointer for offscreen bitmaps (overlay window)

View File

@ -30,6 +30,7 @@ typedef HRGN Fl_Region;
typedef HWND Window;
typedef POINT XPoint;
#include <FL/Fl_Device.H>
#include <FL/Fl_Window.H>
// this part is included only when compiling the FLTK library or if requested explicitly
@ -62,7 +63,7 @@ inline void XClipBox(Fl_Region r,XRectangle* rect) {
// this object contains all win32-specific stuff about a window:
// Warning: this object is highly subject to change!
class FL_EXPORT Fl_X {
class FL_EXPORT Fl_X : public Fl_Device {
public:
// member variables - add new variables only at the end of this block
Window xid;

3
FL/x.H
View File

@ -25,6 +25,7 @@
# define Fl_X_H
# include "Enumerations.H"
# include <FL/Fl_Device.H>
# ifdef WIN32
# include "win32.H"
@ -132,7 +133,7 @@ extern FL_EXPORT XFontStruct* fl_X_core_font();
// this object contains all X-specific stuff about a window:
// Warning: this object is highly subject to change!
// FL_LIBRARY or FL_INTERNALS must be defined to access this class.
class FL_EXPORT Fl_X {
class FL_EXPORT Fl_X : public Fl_Device {
public:
Window xid;
Window other_xid;

View File

@ -167,7 +167,9 @@ if (USE_X11)
# X11 (including APPLE with X11)
set(DRIVER_FILES
drivers/Posix/Fl_Posix_System_Driver.cxx
drivers/X11/Fl_X11_Screen_Driver.cxx
drivers/X11/Fl_X11_Window_Driver.cxx
drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
drivers/Xlib/Fl_Xlib_Graphics_Driver_arci.cxx
drivers/Xlib/Fl_Xlib_Graphics_Driver_color.cxx
@ -186,8 +188,10 @@ if (USE_X11)
)
endif (USE_XFT)
set(DRIVER_HEADER_FILES
drivers/Quartz/Fl_Quartz_Graphics_Driver.h
drivers/Posix/Fl_Posix_System_Driver.h
drivers/X11/Fl_X11_Screen_Driver.h
drivers/X11/Fl_X11_Window_Driver.h
drivers/Quartz/Fl_Quartz_Graphics_Driver.h
)
elseif (APPLE)
@ -210,10 +214,10 @@ elseif (APPLE)
drivers/Darwin/Fl_Darwin_System_Driver.cxx
)
set(DRIVER_HEADER_FILES
drivers/Quartz/Fl_Quartz_Graphics_Driver.h
drivers/Cocoa/Fl_Cocoa_Window_Driver.h
drivers/Cocoa/Fl_Cocoa_Screen_Driver.h
drivers/Darwin/Fl_Darwin_System_Driver.h
drivers/Cocoa/Fl_Cocoa_Screen_Driver.h
drivers/Cocoa/Fl_Cocoa_Window_Driver.h
drivers/Quartz/Fl_Quartz_Graphics_Driver.h
)
else ()
@ -221,6 +225,9 @@ else ()
# Windows (GDI)
set(DRIVER_FILES
drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx
drivers/GDI/Fl_GDI_Graphics_Driver.cxx
drivers/GDI/Fl_GDI_Graphics_Driver_arci.cxx
drivers/GDI/Fl_GDI_Graphics_Driver_color.cxx
@ -229,11 +236,12 @@ else ()
drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx
drivers/GDI/Fl_GDI_Graphics_Driver_rect.cxx
drivers/GDI/Fl_GDI_Graphics_Driver_vertex.cxx
drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
)
set(DRIVER_HEADER_FILES
drivers/GDI/Fl_GDI_Graphics_Driver.h
drivers/WinAPI/Fl_WinAPI_System_Driver.h
drivers/WinAPI/Fl_WinAPI_Screen_Driver.h
drivers/WinAPI/Fl_WinAPI_Window_Driver.h
drivers/GDI/Fl_GDI_Graphics_Driver.h
)
endif (USE_X11)

36
src/Fl_System_Driver.cxx Normal file
View File

@ -0,0 +1,36 @@
//
// "$Id$"
//
// A base class for platform specific system calls.
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "config_lib.h"
#include <FL/Fl_System_Driver.H>
Fl_System_Driver::Fl_System_Driver()
{
}
Fl_System_Driver::~Fl_System_Driver()
{
}
//
// End of "$Id$".
//

39
src/Fl_Window_Driver.cxx Normal file
View File

@ -0,0 +1,39 @@
//
// "$Id$"
//
// A base class for platform specific window handling code
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "config.h"
#include "config_lib.h"
#include <FL/Fl_Window_Driver.H>
#include <FL/Fl.H>
Fl_Window_Driver::Fl_Window_Driver()
{
}
Fl_Window_Driver::~Fl_Window_Driver()
{
}
//
// End of "$Id$".
//

View File

@ -99,6 +99,7 @@ CPPFILES = \
Fl_Value_Slider.cxx \
Fl_Widget.cxx \
Fl_Window.cxx \
Fl_Window_Driver.cxx \
Fl_Window_fullscreen.cxx \
Fl_Window_hotspot.cxx \
Fl_Window_iconize.cxx \
@ -165,10 +166,10 @@ CPPFILES = \
ps_image.cxx
OBJCPPFILES = \
Fl_cocoa.mm \
Fl_Quartz_Printer.mm \
Fl_Native_File_Chooser_MAC.mm \
Fl_Sys_Menu_Bar.mm
Fl_cocoa.mm \
Fl_Quartz_Printer.mm \
Fl_Native_File_Chooser_MAC.mm \
Fl_Sys_Menu_Bar.mm
FLCPPFILES = \
forms_compatability.cxx \
@ -245,7 +246,9 @@ XLIBCPPFILES = \
drivers/Xlib/Fl_Xlib_Graphics_Driver_line_style.cxx \
drivers/Xlib/Fl_Xlib_Graphics_Driver_rect.cxx \
drivers/Xlib/Fl_Xlib_Graphics_Driver_vertex.cxx \
drivers/X11/Fl_X11_Screen_Driver.cxx
drivers/X11/Fl_X11_Window_Driver.cxx \
drivers/X11/Fl_X11_Screen_Driver.cxx \
drivers/X11/Fl_Posix_System_Driver.cxx
XLIBFONTFILES = \
drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx
@ -262,7 +265,9 @@ GDICPPFILES = \
drivers/GDI/Fl_GDI_Graphics_Driver_line_style.cxx \
drivers/GDI/Fl_GDI_Graphics_Driver_rect.cxx \
drivers/GDI/Fl_GDI_Graphics_Driver_vertex.cxx \
drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx
drivers/WinAPI/Fl_WinAPI_Window_Driver.cxx \
drivers/WinAPI/Fl_WinAPI_Screen_Driver.cxx \
drivers/WinAPI/Fl_WinAPI_System_Driver.cxx
################################################################
FLTKFLAGS = -DFL_LIBRARY

View File

@ -21,8 +21,6 @@
#include "Fl_Cocoa_Window_Driver.h"
// Fl_Cocoa_Window_Driver
//
// End of "$Id$".
//

View File

@ -25,6 +25,8 @@
#ifndef FL_DARWIN_SYSTEM_DRIVER_H
#define FL_DARWIN_SYSTEM_DRIVER_H
#include <FL/Fl_System_Driver.H>
/*
Move everything here that manages the system interface.
@ -36,6 +38,11 @@
- multithreading
*/
class Fl_Darwin_System_Driver : public Fl_System_Driver
{
public:
};
#endif // FL_DARWIN_SYSTEM_DRIVER_H
//

View File

@ -0,0 +1,26 @@
//
// "$Id$"
//
// Definition of Apple Darwin system driver.
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "../../config_lib.h"
#include "Fl_Posix_System_Driver.h"
//
// End of "$Id$".
//

View File

@ -0,0 +1,50 @@
//
// "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $"
//
// Definition of Posix system driver
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/**
\file Fl_Posix_System_Driver.h
\brief Definition of Posix system driver.
*/
#ifndef FL_POSIX_SYSTEM_DRIVER_H
#define FL_POSIX_SYSTEM_DRIVER_H
#include <FL/Fl_System_Driver.H>
/*
Move everything here that manages the system interface.
There is excatly one system driver.
- filename and pathname management
- directory and file access
- system time and system timer
- multithreading
*/
class Fl_Posix_System_Driver : public Fl_System_Driver
{
public:
};
#endif // FL_POSIX_SYSTEM_DRIVER_H
//
// End of "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $".
//

View File

@ -0,0 +1,26 @@
//
// "$Id$"
//
// Definition of Apple Darwin system driver.
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "../../config_lib.h"
#include "Fl_WinAPI_System_Driver.h"
//
// End of "$Id$".
//

View File

@ -0,0 +1,50 @@
//
// "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $"
//
// Definition of MSWindows system driver
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/**
\file Fl_WinAPI_System_Driver.h
\brief Definition of MSWindows system driver.
*/
#ifndef FL_WINAPI_SYSTEM_DRIVER_H
#define FL_WINAPI_SYSTEM_DRIVER_H
#include <FL/Fl_System_Driver.H>
/*
Move everything here that manages the system interface.
There is excatly one system driver.
- filename and pathname management
- directory and file access
- system time and system timer
- multithreading
*/
class Fl_WinAPI_System_Driver : public Fl_System_Driver
{
public:
};
#endif // FL_WINAPI_SYSTEM_DRIVER_H
//
// End of "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $".
//

View File

@ -0,0 +1,26 @@
//
// "$Id$"
//
// Definition of Apple Cocoa window driver.
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "../../config_lib.h"
#include "Fl_WinAPI_Window_Driver.h"
//
// End of "$Id$".
//

View File

@ -0,0 +1,56 @@
//
// "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $"
//
// Definition of Apple Cocoa window driver
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/**
\file Fl_WinAPI_Window_Driver.h
\brief Definition of MSWindows window driver.
*/
#ifndef FL_WINAPI_WINDOW_DRIVER_H
#define FL_WINAPI_WINDOW_DRIVER_H
#include <FL/x.H>
/*
Move everything here that manages the native window interface.
There is one window driver for each Fl_Window. Window drivers manage window
actions such as resizing, events, decoration, fullscreen modes, etc. . All
drawing and rendering is managed by the Surface device and the associated
graphics driver.
- window specific event handling
- window types and styles, depth, etc.
- decorations
? where do we handle the interface between OpenGL/DirectX and Cocoa/WIN32/Glx?
*/
class FL_EXPORT Fl_WinAPI_Window_Driver : public Fl_X
{
public:
};
#endif // FL_WINAPI_WINDOW_DRIVER_H
//
// End of "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $".
//

View File

@ -0,0 +1,26 @@
//
// "$Id$"
//
// Definition of Apple Cocoa window driver.
//
// Copyright 1998-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include "../../config_lib.h"
#include "Fl_X11_Window_Driver.h"
//
// End of "$Id$".
//

View File

@ -0,0 +1,56 @@
//
// "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $"
//
// Definition of X11 window driver
// for the Fast Light Tool Kit (FLTK).
//
// Copyright 2010-2016 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:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
/**
\file Fl_Cocoa_Window_Driver.h
\brief Definition of X11 window driver.
*/
#ifndef FL_X11_WINDOW_DRIVER_H
#define FL_X11_WINDOW_DRIVER_H
#include <FL/x.H>
/*
Move everything here that manages the native window interface.
There is one window driver for each Fl_Window. Window drivers manage window
actions such as resizing, events, decoration, fullscreen modes, etc. . All
drawing and rendering is managed by the Surface device and the associated
graphics driver.
- window specific event handling
- window types and styles, depth, etc.
- decorations
? where do we handle the interface between OpenGL/DirectX and Cocoa/WIN32/Glx?
*/
class FL_EXPORT Fl_X11_Window_Driver : public Fl_X
{
public:
};
#endif // FL_X11_WINDOW_DRIVER_H
//
// End of "$Id: quartz.H 11017 2016-01-20 21:40:12Z matt $".
//