Mir
wayland_helpers.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2018 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU General Public License version 2 or 3 as
6  * published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Alan Griffiths <alan@octopull.co.uk>
17  */
18 
19 #ifndef MIRAL_WAYLAND_HELPERS_H
20 #define MIRAL_WAYLAND_HELPERS_H
21 
22 #include <wayland-client.h>
23 #include <memory>
24 #include <vector>
25 #include <functional>
26 #include <unordered_map>
27 
28 template<typename Type>
29 auto make_scoped(Type* owned, void(*deleter)(Type*)) -> std::unique_ptr<Type, void(*)(Type*)>
30 {
31  return {owned, deleter};
32 }
33 
34 wl_shm_pool* make_shm_pool(struct wl_shm* shm, int size, void **data);
35 
36 class Output
37 {
38 public:
39  Output(
40  wl_output* output,
41  std::function<void(Output const&)> on_constructed,
42  std::function<void(Output const&)> on_change);
43  ~Output();
44 
45  Output(Output const&) = delete;
46  Output(Output&&) = delete;
47 
48  Output& operator=(Output const&) = delete;
49  Output& operator=(Output&&) = delete;
50 
51  int32_t x, y;
52  int32_t width, height;
53  int32_t transform;
54  wl_output* output;
55 private:
56  static void output_done(void* data, wl_output* output);
57 
58  static wl_output_listener const output_listener;
59 
60  std::function<void(Output const&)> on_constructed;
61  std::function<void(Output const&)> on_change;
62 };
63 
64 class Globals
65 {
66 public:
67  Globals(
68  std::function<void(Output const&)> on_new_output,
69  std::function<void(Output const&)> on_output_changed,
70  std::function<void(Output const&)> on_output_gone);
71 
72  wl_compositor* compositor = nullptr;
73  wl_shm* shm = nullptr;
74  wl_seat* seat = nullptr;
75  wl_shell* shell = nullptr;
76 
77  void init(struct wl_display* display);
78  void teardown();
79 
80 private:
81  static void new_global(
82  void* data,
83  struct wl_registry* registry,
84  uint32_t id,
85  char const* interface,
86  uint32_t version);
87 
88  static void global_remove(
89  void* data,
90  struct wl_registry* registry,
91  uint32_t name);
92 
93  wl_registry_listener const registry_listener = {
94  new_global,
95  global_remove
96  };
97 
98  std::unique_ptr<wl_registry, decltype(&wl_registry_destroy)> registry;
99 
100  std::unordered_map<uint32_t, std::unique_ptr<Output>> bound_outputs;
101 
102  std::function<void(Output const&)> const on_new_output;
103  std::function<void(Output const&)> const on_output_changed;
104  std::function<void(Output const&)> const on_output_gone;
105 };
106 
107 #endif //MIRAL_WAYLAND_HELPERS_H
Definition: wayland_helpers.h:64
auto make_scoped(Type *owned, void(*deleter)(Type *)) -> std::unique_ptr< Type, void(*)(Type *)>
Definition: wayland_helpers.h:29
int32_t transform
Definition: wayland_helpers.h:53
wl_output * output
Definition: wayland_helpers.h:54
~Output()
Definition: wayland_helpers.cpp:132
Definition: wayland_helpers.h:36
int32_t height
Definition: wayland_helpers.h:52
int32_t width
Definition: wayland_helpers.h:52
wl_shm * shm
Definition: wayland_helpers.h:73
Globals(std::function< void(Output const &)> on_new_output, std::function< void(Output const &)> on_output_changed, std::function< void(Output const &)> on_output_gone)
Definition: wayland_helpers.cpp:138
Output(wl_output *output, std::function< void(Output const &)> on_constructed, std::function< void(Output const &)> on_change)
Definition: wayland_helpers.cpp:121
void teardown()
Definition: wayland_helpers.cpp:217
wl_compositor * compositor
Definition: wayland_helpers.h:72
wl_shell * shell
Definition: wayland_helpers.h:75
char const * name
Definition: client_types.h:177
wl_shm_pool * make_shm_pool(struct wl_shm *shm, int size, void **data)
Definition: wayland_helpers.cpp:27
wl_seat * seat
Definition: wayland_helpers.h:74
void init(struct wl_display *display)
Definition: wayland_helpers.cpp:208
int32_t y
Definition: wayland_helpers.h:51
int32_t x
Definition: wayland_helpers.h:51
Output & operator=(Output const &)=delete

Copyright © 2012-2019 Canonical Ltd.
Generated on Wed Aug 28 00:46:47 UTC 2019
This documentation is licensed under the GPL version 2 or 3.