2
3
4
5
6
7
8
9
10
11
12
13
14
15
17#ifndef MIRAL_WAYLAND_APP_H
18#define MIRAL_WAYLAND_APP_H
20#include <wayland-client.h>
33 : proxy{
nullptr, [](
auto){}}
38 : proxy{proxy, destroy}
48 std::unique_ptr<T,
void(*)(T*)> proxy;
55 static void create(wl_callback* callback, std::function<
void()>&& func);
58 WaylandCallback(
WaylandObject<wl_callback> callback, std::function<
void()>&& func)
59 : callback{std::move(callback)},
64 static wl_callback_listener
const callback_listener;
67 std::function<
void()>
const func;
76 auto scale()
const ->
int {
return scale_; }
77 auto transform()
const ->
int {
return transform_; }
78 auto operator==(wl_output* other)
const ->
bool {
return wl_ == other; }
79 auto wl()
const -> wl_output* {
return wl_; }
82 static void handle_geometry(
84 struct wl_output* wl_output,
87 int32_t physical_width,
88 int32_t physical_height,
93 static void handle_mode(
95 struct wl_output* wl_output,
100 static void handle_done(
void* data,
struct wl_output* wl_output);
101 static void handle_scale(
void* data,
struct wl_output* wl_output, int32_t factor);
103 static wl_output_listener
const output_listener;
107 bool has_initialized;
124 auto display()
const -> wl_display* {
return display_.get(); };
125 auto compositor()
const -> wl_compositor* {
return compositor_; };
126 auto shm()
const -> wl_shm* {
return shm_; };
127 auto seat()
const -> wl_seat* {
return seat_; };
128 auto shell()
const -> wl_shell* {
return shell_; };
138 std::unique_ptr<wl_display,
decltype(&wl_display_roundtrip)> display_;
146 static void handle_new_global(
148 struct wl_registry* registry,
150 char const* interface,
152 static void handle_global_remove(
void* data,
struct wl_registry* registry, uint32_t name);
154 static wl_registry_listener
const registry_listener;
157 std::map<uint32_t, std::function<
void()>> global_remove_handlers;
Definition: wayland_app.h:114
void roundtrip() const
Definition: wayland_app.cpp:152
virtual ~WaylandApp()=default
auto compositor() const -> wl_compositor *
Definition: wayland_app.h:125
virtual void output_gone(WaylandOutput const *)
Definition: wayland_app.h:134
virtual void output_ready(WaylandOutput const *)
Definition: wayland_app.h:132
WaylandApp()
Definition: wayland_app.cpp:127
auto shell() const -> wl_shell *
Definition: wayland_app.h:128
virtual void output_changed(WaylandOutput const *)
Definition: wayland_app.h:133
auto seat() const -> wl_seat *
Definition: wayland_app.h:127
void wayland_init(wl_display *display)
Needs to be two-step initialized to virtual methods are called.
Definition: wayland_app.cpp:138
WaylandApp(wl_display *display)
Definition: wayland_app.cpp:132
auto shm() const -> wl_shm *
Definition: wayland_app.h:126
auto display() const -> wl_display *
Definition: wayland_app.h:124
Definition: wayland_app.h:52
static void create(wl_callback *callback, std::function< void()> &&func)
Takes ownership of callback.
Definition: wayland_app.cpp:43
Definition: wayland_app.h:30
WaylandObject(T *proxy, void(*destroy)(T *))
Definition: wayland_app.h:37
operator T*() const
Definition: wayland_app.h:42
WaylandObject()
Definition: wayland_app.h:32
Definition: wayland_app.h:71
auto operator==(wl_output *other) const -> bool
Definition: wayland_app.h:78
auto scale() const -> int
Definition: wayland_app.h:76
WaylandOutput(WaylandApp *app, wl_output *output)
Definition: wayland_app.cpp:59
auto wl() const -> wl_output *
Definition: wayland_app.h:79
virtual ~WaylandOutput()=default
auto transform() const -> int
Definition: wayland_app.h:77