summaryrefslogtreecommitdiff
path: root/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-03-04 15:40:29 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2022-03-04 15:41:00 +0100
commit3718effc431f5622a23c55b254153efdfe4e72c4 (patch)
treed8a805870c6a3785022e2f52f0c3715410e29a37 /src/drivers/Wayland/Fl_Wayland_Screen_Driver.H
parenta773fdc44bfb818f1830e9e48ba765881e68c942 (diff)
Add the Wayland platform to FLTK 1.4
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Screen_Driver.H')
-rw-r--r--src/drivers/Wayland/Fl_Wayland_Screen_Driver.H175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H
new file mode 100644
index 000000000..ce10884c5
--- /dev/null
+++ b/src/drivers/Wayland/Fl_Wayland_Screen_Driver.H
@@ -0,0 +1,175 @@
+//
+// Definition of X11 Screen interface
+// for the Fast Light Tool Kit (FLTK).
+//
+// Copyright 2010-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
+//
+
+/**
+ \file Fl_Wayland_Screen_Driver.H
+ \brief Definition of Wayland Screen interface
+ */
+
+#ifndef FL_WAYLAND_SCREEN_DRIVER_H
+#define FL_WAYLAND_SCREEN_DRIVER_H
+
+#include "../../Fl_Screen_Driver.H"
+#include <wayland-client.h>
+
+class Fl_Window;
+
+struct seat {
+ struct wl_seat *wl_seat;
+ struct wl_pointer *wl_pointer;
+ struct wl_keyboard *wl_keyboard;
+ uint32_t keyboard_enter_serial;
+ struct wl_surface *keyboard_surface;
+ struct wl_list link;
+ struct wl_list pointer_outputs;
+ struct wl_cursor_theme *cursor_theme;
+ struct wl_cursor *default_cursor;
+ struct wl_surface *cursor_surface;
+ struct wl_surface *pointer_focus;
+ int pointer_scale;
+ uint32_t serial;
+ struct wl_data_device_manager *data_device_manager;
+ struct wl_data_device *data_device;
+ struct wl_data_source *data_source;
+ struct xkb_state *xkb_state;
+ struct xkb_context *xkb_context;
+ struct xkb_keymap *xkb_keymap;
+ struct xkb_compose_state *xkb_compose_state;
+ char *name;
+ struct zwp_text_input_v3 *text_input;
+};
+
+class FL_EXPORT Fl_Wayland_Screen_Driver : public Fl_Screen_Driver
+{
+ friend class Fl_Screen_Driver;
+ friend class Fl_Wayland_Graphics_Driver;
+ static int insertion_point_x;
+ static int insertion_point_y;
+ static int insertion_point_width;
+ static int insertion_point_height;
+ static bool insertion_point_location_is_valid;
+public:
+ static void insertion_point_location(int x, int y, int height);
+ static bool insertion_point_location(int *px, int *py, int *pwidth, int *pheight);
+ int get_mouse_unscaled(int &xx, int &yy);
+ void screen_count(int count) {num_screens = count;}
+
+ void reset_cursor();
+ struct wl_cursor *xc_arrow;
+ struct wl_cursor *xc_ns;
+ struct wl_cursor *xc_wait;
+ struct wl_cursor *xc_insert;
+ struct wl_cursor *xc_hand;
+ struct wl_cursor *xc_help;
+ struct wl_cursor *xc_cross;
+ struct wl_cursor *xc_move;
+ struct wl_cursor *xc_north;
+ struct wl_cursor *xc_south;
+ struct wl_cursor *xc_west;
+ struct wl_cursor *xc_east;
+ struct wl_cursor *xc_we;
+ struct wl_cursor *xc_nesw;
+ struct wl_cursor *xc_nwse;
+ struct wl_cursor *xc_sw;
+ struct wl_cursor *xc_se;
+ struct wl_cursor *xc_ne;
+ struct wl_cursor *xc_nw;
+ static const struct wl_data_device_listener *p_data_device_listener;
+
+public:
+ struct wl_compositor *wl_compositor;
+ struct wl_subcompositor *wl_subcompositor;
+ struct wl_shm *wl_shm;
+ struct wl_list seats;
+ struct seat *seat;
+ struct wl_list outputs; // linked list of all screens in system
+ struct output { // one record for each screen
+ uint32_t id;
+ short x_org;
+ short y_org;
+ short width; // in pixels
+ short height; // in pixels
+ float dpi;
+ struct wl_output *wl_output;
+ int wld_scale; // Wayland scale factor
+ float gui_scale; // FLTK scale factor
+ struct wl_list link;
+ };
+ struct libdecor *libdecor_context;
+ struct xdg_wm_base *xdg_wm_base;
+ struct zwp_text_input_manager_v3 *text_input_base;
+
+ Fl_Wayland_Screen_Driver();
+ virtual APP_SCALING_CAPABILITY rescalable() { return PER_SCREEN_APP_SCALING; }
+ virtual float scale(int n);
+ virtual void scale(int n, float f);
+ int screen_num_unscaled(int x, int y);
+
+ void copy_image(const unsigned char* data, int W, int H);
+ // --- screen configuration
+ void init_workarea();
+ virtual void init();
+ virtual int x();
+ virtual int y();
+ virtual int w();
+ virtual int h();
+ virtual void screen_xywh(int &X, int &Y, int &W, int &H, int n);
+ virtual void screen_dpi(float &h, float &v, int n=0);
+ virtual void screen_work_area(int &X, int &Y, int &W, int &H, int n);
+ // --- audible output
+ virtual void beep(int type);
+ // --- global events
+ virtual void flush();
+ virtual void grab(Fl_Window* win);
+ // --- global colors
+ virtual void get_system_colors();
+ virtual const char *get_system_scheme();
+ virtual int dnd(int unused);
+ virtual int compose(int &del);
+ virtual void compose_reset();
+ virtual Fl_RGB_Image *read_win_rectangle(int X, int Y, int w, int h, Fl_Window *win, bool may_capture_subwins, bool *did_capture_subwins);
+ virtual int get_mouse(int &x, int &y);
+ virtual void open_display_platform();
+ virtual void close_display();
+ // --- compute dimensions of an Fl_Offscreen
+ virtual void offscreen_size(Fl_Offscreen o, int &width, int &height);
+ virtual int has_marked_text() const;
+ static int next_marked_length; // next length of marked text after current marked text will have been replaced
+ // --- clipboard operations
+ // this one is in Fl_wayland.cxx
+ virtual void copy(const char *stuff, int len, int clipboard, const char *type);
+ // this one is in Fl_wayland.cxx
+ virtual void paste(Fl_Widget &receiver, int clipboard, const char *type);
+ // this one is in Fl_wayland.cxx
+ virtual int clipboard_contains(const char *type);
+ // --- Wayland-special
+ void set_cursor();
+ struct wl_cursor *default_cursor();
+ void default_cursor(struct wl_cursor *cursor);
+ struct wl_cursor *cache_cursor(const char *cursor_name);
+ static Fl_Window *surface_to_window(struct wl_surface *);
+ uint32_t get_serial();
+ struct wl_seat *get_wl_seat();
+ char *get_seat_name();
+ struct xkb_keymap *get_xkb_keymap();
+ static bool own_output(struct wl_output *output);
+ typedef enum {unspecified, MUTTER, WESTON, KDE} compositor_name;
+ static compositor_name compositor; // identifies the used Wayland compositor
+};
+
+
+#endif // FL_WAYLAND_SCREEN_DRIVER_H