2022-03-04 17:40:29 +03:00
|
|
|
README.Wayland.txt - Wayland platform support for FLTK
|
|
|
|
------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
CONTENTS
|
|
|
|
========
|
|
|
|
|
|
|
|
1 INTRODUCTION
|
|
|
|
|
|
|
|
2 WAYLAND SUPPORT FOR FLTK
|
|
|
|
2.1 Configuration
|
|
|
|
2.2 Known limitations
|
|
|
|
|
|
|
|
3 PLATFORM SPECIFIC NOTES
|
|
|
|
3.1 Debian and Derivatives (like Ubuntu)
|
2022-03-22 10:16:42 +03:00
|
|
|
3.2 Fedora
|
2022-03-04 17:40:29 +03:00
|
|
|
|
|
|
|
|
|
|
|
1 INTRODUCTION
|
|
|
|
==============
|
|
|
|
|
|
|
|
Version 1.4 of the FLTK library introduces support of the public FLTK API on
|
|
|
|
the Wayland platform. It requires a Wayland-equipped OS which means Linux.
|
|
|
|
Pre-existing platform-independent source code for FLTK 1.3.x should build and
|
|
|
|
run unchanged with FLTK 1.4 and the Wayland platform.
|
2022-03-22 10:16:42 +03:00
|
|
|
The code has been tested on Debian, Ubuntu and Fedora with 3 distinct Wayland
|
|
|
|
compositors: mutter (Gnome's compositor), weston, and KDE.
|
2022-03-04 17:40:29 +03:00
|
|
|
CJK text-input methods, as well as dead and compose keys are supported.
|
|
|
|
|
|
|
|
|
|
|
|
2 WAYLAND SUPPORT FOR FLTK
|
|
|
|
==========================
|
|
|
|
|
|
|
|
It is possible to have your FLTK application do all its windowing and drawing
|
|
|
|
through the Wayland protocol on Linux systems. All graphics is done via Cairo or EGL.
|
|
|
|
All text-drawing is done via Pango.
|
|
|
|
|
|
|
|
2.1 Configuration
|
|
|
|
---------------
|
|
|
|
|
|
|
|
* Configure-based build can be performed as follows:
|
|
|
|
Once after "git clone", create the configure file :
|
|
|
|
autoconf -f
|
|
|
|
|
|
|
|
Prepare build with :
|
|
|
|
./configure --enable-wayland [--enable-shared]
|
2022-03-31 17:00:11 +03:00
|
|
|
|
2022-03-04 17:40:29 +03:00
|
|
|
Build with :
|
|
|
|
make
|
|
|
|
|
|
|
|
* CMake-based build can be performed as follows:
|
|
|
|
cmake -S <path-to-source> -B <path-to-build> -DCMAKE_BUILD_TYPE=Release -DOPTION_USE_WAYLAND=1
|
|
|
|
|
|
|
|
cd <path-to-build>; make
|
|
|
|
|
|
|
|
The FLTK wayland platform uses a library called libdecor which handles window decorations
|
|
|
|
(i.e., titlebars, shade). Libdecor is bundled in the FLTK source code and FLTK uses by default
|
|
|
|
this form of libdecor. Optionally, OPTION_USE_SYSTEM_LIBDECOR can be turned on to have FLTK
|
|
|
|
use the system's version of libdecor which is available on recent Linux distributions (e.g.,
|
|
|
|
Debian bookworm or more recent in packages libdecor-0-0 and libdecor-0-plugin-1-cairo).
|
|
|
|
|
|
|
|
2.2 Known limitations
|
|
|
|
-------------------------------
|
|
|
|
|
|
|
|
* A deliberate design trait of Wayland makes application windows ignorant of their exact
|
2022-03-14 09:52:13 +03:00
|
|
|
placement on screen. It's possible, though, to position a popup window relatively to
|
|
|
|
another window. This allows FLTK to properly position menu and tooltip windows. But
|
|
|
|
Fl_Window::position() has no effect on other top-level windows.
|
2022-03-04 17:40:29 +03:00
|
|
|
|
|
|
|
* With Wayland, there is no way to know if a window is currently minimized, nor is there any
|
|
|
|
way to programmatically unset minimization of a window. Consequently, Fl_Window::show() of
|
|
|
|
a minimized window has no effect.
|
|
|
|
|
2022-03-14 09:52:13 +03:00
|
|
|
* It's currently not possible for an app to be notified of changes to the content of
|
|
|
|
the system clipboard, that is, Fl::add_clipboard_notify() has no effect. The FLTK API to
|
|
|
|
read from and write to the system clipboard is fully functional, though.
|
|
|
|
|
|
|
|
* With GTK-style window titlebars, the minimum width of a window is currently
|
|
|
|
set at 134 pixels.
|
2022-03-04 17:40:29 +03:00
|
|
|
|
|
|
|
* The library should support multi-display configurations in principle, but has not been
|
|
|
|
tested in that situation.
|
|
|
|
|
|
|
|
* Text input methods have been tested without any understanding of the writing systems,
|
|
|
|
so feedback on this subject would be helpful.
|
|
|
|
|
|
|
|
* While platform-independent source code prepared for FLTK 1.3 is expected to be compatible
|
|
|
|
with FLTK 1.4 and the Wayland platform, X11-specific code will not compile. In particular,
|
|
|
|
the common FLTK 1.3 construct :
|
|
|
|
#ifdef __APPLE__
|
|
|
|
*** macOS-specific code ***
|
|
|
|
#elif defined(_WIN32)
|
|
|
|
*** Windows-specific code ***
|
|
|
|
#else
|
|
|
|
*** X11-specific code ***
|
|
|
|
#endif
|
|
|
|
will choke at compile time because it exposes X11-specific code to the non-X11, Wayland
|
|
|
|
environment. This should be written instead :
|
|
|
|
#include <FL/fl_config.h>
|
2022-03-31 17:00:11 +03:00
|
|
|
|
2022-03-04 17:40:29 +03:00
|
|
|
#ifdef __APPLE__
|
|
|
|
*** macOS-specific code ***
|
|
|
|
#elif defined(_WIN32)
|
|
|
|
*** Windows-specific code ***
|
|
|
|
#elif defined(FLTK_USE_X11)
|
|
|
|
*** X11-specific code ***
|
|
|
|
#endif
|
|
|
|
Moreover, the new FLTK_USE_WAYLAND preprocessor variable is available to bracket
|
|
|
|
Wayland-specific source code.
|
|
|
|
|
|
|
|
|
|
|
|
3 PLATFORM SPECIFIC NOTES
|
|
|
|
=========================
|
|
|
|
|
|
|
|
The following are notes about building FLTK for the Wayland platform
|
|
|
|
on the various supported Linux distributions.
|
|
|
|
|
|
|
|
3.1 Debian and Derivatives (like Ubuntu)
|
|
|
|
----------------------------------------
|
|
|
|
Under Debian, the Wayland platform requires version 11 (a.k.a. Bullseye) or more recent.
|
|
|
|
Under Ubuntu, the Wayland platform is known to work with version 20.04 (focal fossa) or more recent.
|
|
|
|
|
|
|
|
These packages are necessary to build the FLTK library, in addition to those present
|
|
|
|
in a basic Debian/Ubuntu distribution :
|
|
|
|
- g++
|
|
|
|
- gdb
|
|
|
|
- make
|
|
|
|
- git
|
|
|
|
- autoconf
|
|
|
|
- libglu1-mesa-dev
|
|
|
|
- libpango1.0-dev
|
|
|
|
- libwayland-dev
|
|
|
|
- wayland-protocols
|
|
|
|
- libdbus-1-dev
|
|
|
|
- libxkbcommon-dev
|
|
|
|
- libgtk-3-dev <== with this, windows get a GTK-style titlebar
|
|
|
|
- libglew-dev <== necessary to use OpenGL version 3 or above
|
|
|
|
- cmake <== if you plan to build with CMake
|
|
|
|
- cmake-qt-gui <== if you plan to use the GUI of CMake
|
|
|
|
|
|
|
|
These further packages are necessary to run FLTK apps under the Gnome-Wayland desktop:
|
|
|
|
- gnome
|
|
|
|
- gnome-session-wayland
|
|
|
|
|
|
|
|
These packages allow to run FLTK apps under the KDE/Plasma-Wayland desktop:
|
|
|
|
- kde-plasma-desktop
|
|
|
|
- plasma-workspace-wayland
|
2022-03-22 10:16:42 +03:00
|
|
|
|
|
|
|
|
|
|
|
3.2 Fedora
|
|
|
|
|
|
|
|
The Wayland platform is known to work with Fedora version 35.
|
|
|
|
|
|
|
|
These packages are necessary to build the FLTK library, besides those present
|
|
|
|
in a Fedora 35 Workstation distribution :
|
|
|
|
- gcc-c++
|
2022-03-22 18:24:26 +03:00
|
|
|
- autoconf
|
2022-03-22 10:16:42 +03:00
|
|
|
- wayland-devel
|
|
|
|
- wayland-protocols-devel
|
|
|
|
- cairo-devel
|
|
|
|
- libxkbcommon-devel
|
|
|
|
- pango-devel
|
|
|
|
- dbus-devel
|
|
|
|
- mesa-libGLU-devel
|
|
|
|
- gtk3-devel <== with this, windows get a GTK-style titlebar
|
|
|
|
- glew-devel <== necessary to use OpenGL version 3 or above
|
|
|
|
- cmake <== if you plan to build with CMake
|
|
|
|
- cmake-gui <== if you plan to use the GUI of CMake
|
|
|
|
|
|
|
|
Package installation command: sudo yum install <package-name ...>
|