aboutsummaryrefslogtreecommitdiffstats
path: root/src/wayland.cpp
diff options
context:
space:
mode:
authorMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-06-09 15:55:20 +0200
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-08 17:24:00 +0200
commitfdc1e4622d8aae5bf380e4b197ab616fed7efd34 (patch)
tree12c8750160b83235dd8c93e5cbc8d748430a4df6 /src/wayland.cpp
parent119d40642c13259995ee7f51fc7d887b09debd85 (diff)
wayland: added notification prototype, be more explicit about struct types
Notification support can be implemented on genivi objects using the genivi::notify::notifier, it is supposed to be inherited from by the notification-needing types, e.g. genivi::surface. Currently no implementation for notifier is present (only an empty shell) also it is not yet clear, if the notifications will be sent from the genivi objects method's or e.g. their thunks (which would simplify the methods considerably). Added request wrappers for genivi::surface and genivi::layer, just inline them into the class and be done with it. Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
Diffstat (limited to 'src/wayland.cpp')
-rw-r--r--src/wayland.cpp112
1 files changed, 58 insertions, 54 deletions
diff --git a/src/wayland.cpp b/src/wayland.cpp
index 4f1dbd1..fef0cc3 100644
--- a/src/wayland.cpp
+++ b/src/wayland.cpp
@@ -15,18 +15,19 @@ namespace wl {
// \__,_|_|___/ .__/|_|\__,_|\__, |
// |_| |___/
display::display()
- : d(std::unique_ptr<wl_display, void (*)(wl_display *)>(
+ : d(std::unique_ptr<struct wl_display,
+ std::function<void(struct wl_display *)>>(
wl_display_connect(NULL),
- [](wl_display *d) {
- logdebug("wl::display %s @ %p", __func__, d);
+ [](struct wl_display *d) {
+ logdebug("wl::display ~display @ %p", d);
wl_display_disconnect(d);
})),
- r(std::make_unique<registry>(d.get())) {}
+ r(std::make_unique<struct registry>(d.get())) {}
display::~display() {}
bool display::ok() const {
- return d.get() != nullptr && wl_display_get_error(d.get()) == 0;
+ return d && wl_display_get_error(d.get()) == 0;
}
void display::roundtrip() { wl_display_roundtrip(this->d.get()); }
@@ -42,18 +43,19 @@ int display::dispatch() { return wl_display_dispatch(this->d.get()); }
namespace {
void registry_global(void *data, struct wl_registry *r, uint32_t name,
char const *iface, uint32_t v) {
- static_cast<registry *>(data)->global(name, iface, v);
+ static_cast<struct registry *>(data)->global(name, iface, v);
}
void registry_global_remove(void *data, struct wl_registry *r, uint32_t name) {
- static_cast<registry *>(data)->global_remove(name);
+ static_cast<struct registry *>(data)->global_remove(name);
}
-constexpr wl_registry_listener registry_listener = {registry_global,
- registry_global_remove};
+constexpr struct wl_registry_listener registry_listener = {
+ registry_global, registry_global_remove};
}
-registry::registry(wl_display *d) : wayland_proxy(wl_display_get_registry(d)) {
+registry::registry(struct wl_display *d)
+ : wayland_proxy(wl_display_get_registry(d)) {
wl_registry_add_listener(this->proxy, &registry_listener, this);
}
@@ -87,28 +89,28 @@ void output_geometry(void *data, struct wl_output *wl_output, int32_t x,
int32_t y, int32_t physical_width, int32_t physical_height,
int32_t subpixel, const char *make, const char *model,
int32_t transform) {
- static_cast<output *>(data)->geometry(x, y, physical_width, physical_height,
- subpixel, make, model, transform);
+ static_cast<struct output *>(data)->geometry(
+ x, y, physical_width, physical_height, subpixel, make, model, transform);
}
void output_mode(void *data, struct wl_output *wl_output, uint32_t flags,
int32_t width, int32_t height, int32_t refresh) {
- static_cast<output *>(data)->mode(flags, width, height, refresh);
+ static_cast<struct output *>(data)->mode(flags, width, height, refresh);
}
void output_done(void *data, struct wl_output *wl_output) {
- static_cast<output *>(data)->done();
+ static_cast<struct output *>(data)->done();
}
void output_scale(void *data, struct wl_output *wl_output, int32_t factor) {
- static_cast<output *>(data)->scale(factor);
+ static_cast<struct output *>(data)->scale(factor);
}
-constexpr wl_output_listener output_listener = {output_geometry, output_mode,
- output_done, output_scale};
+constexpr struct wl_output_listener output_listener = {
+ output_geometry, output_mode, output_done, output_scale};
}
-output::output(wl_registry *r, uint32_t name, uint32_t v)
+output::output(struct wl_registry *r, uint32_t name, uint32_t v)
: wayland_proxy(wl_registry_bind(r, name, &wl_output_interface, v)) {
wl_output_add_listener(this->proxy, &output_listener, this);
}
@@ -158,31 +160,31 @@ namespace {
void controller_screen(void *data, struct ivi_controller *ivi_controller,
uint32_t id_screen,
struct ivi_controller_screen *screen) {
- static_cast<controller *>(data)->screen(id_screen, screen);
+ static_cast<struct controller *>(data)->screen(id_screen, screen);
}
void controller_layer(void *data, struct ivi_controller *ivi_controller,
uint32_t id_layer) {
- static_cast<controller *>(data)->layer(id_layer);
+ static_cast<struct controller *>(data)->layer(id_layer);
}
void controller_surface(void *data, struct ivi_controller *ivi_controller,
uint32_t id_surface) {
- static_cast<controller *>(data)->surface(id_surface);
+ static_cast<struct controller *>(data)->surface(id_surface);
}
void controller_error(void *data, struct ivi_controller *ivi_controller,
int32_t object_id, int32_t object_type,
int32_t error_code, const char *error_text) {
- static_cast<controller *>(data)->error(object_id, object_type, error_code,
- error_text);
+ static_cast<struct controller *>(data)->error(object_id, object_type,
+ error_code, error_text);
}
-constexpr ivi_controller_listener listener = {
+constexpr struct ivi_controller_listener listener = {
controller_screen, controller_layer, controller_surface, controller_error};
}
-controller::controller(wl_registry *r, uint32_t name, uint32_t version)
+controller::controller(struct wl_registry *r, uint32_t name, uint32_t version)
: wayland_proxy(
wl_registry_bind(r, name, &ivi_controller_interface, version)) {
ivi_controller_add_listener(this->proxy, &listener, this);
@@ -222,51 +224,52 @@ namespace {
void layer_visibility(void *data,
struct ivi_controller_layer *ivi_controller_layer,
int32_t visibility) {
- static_cast<layer *>(data)->visibility(visibility);
+ static_cast<struct layer *>(data)->visibility(visibility);
}
void layer_opacity(void *data,
struct ivi_controller_layer *ivi_controller_layer,
wl_fixed_t opacity) {
- static_cast<layer *>(data)->opacity(wl_fixed_to_double(opacity));
+ static_cast<struct layer *>(data)->opacity(wl_fixed_to_double(opacity));
}
void layer_source_rectangle(void *data,
struct ivi_controller_layer *ivi_controller_layer,
int32_t x, int32_t y, int32_t width,
int32_t height) {
- static_cast<layer *>(data)->source_rectangle(x, y, width, height);
+ static_cast<struct layer *>(data)->source_rectangle(x, y, width, height);
}
void layer_destination_rectangle(
void *data, struct ivi_controller_layer *ivi_controller_layer, int32_t x,
int32_t y, int32_t width, int32_t height) {
- static_cast<layer *>(data)->destination_rectangle(x, y, width, height);
+ static_cast<struct layer *>(data)->destination_rectangle(x, y, width,
+ height);
}
void layer_configuration(void *data,
struct ivi_controller_layer *ivi_controller_layer,
int32_t width, int32_t height) {
- static_cast<layer *>(data)->configuration(width, height);
+ static_cast<struct layer *>(data)->configuration(width, height);
}
void layer_orientation(void *data,
struct ivi_controller_layer *ivi_controller_layer,
int32_t orientation) {
- static_cast<layer *>(data)->orientation(orientation);
+ static_cast<struct layer *>(data)->orientation(orientation);
}
void layer_screen(void *data, struct ivi_controller_layer *ivi_controller_layer,
struct wl_output *screen) {
- static_cast<layer *>(data)->screen(screen);
+ static_cast<struct layer *>(data)->screen(screen);
}
void layer_destroyed(void *data,
struct ivi_controller_layer *ivi_controller_layer) {
- static_cast<layer *>(data)->destroyed();
+ static_cast<struct layer *>(data)->destroyed();
}
-constexpr ivi_controller_layer_listener layer_listener = {
+constexpr struct ivi_controller_layer_listener layer_listener = {
layer_visibility, layer_opacity,
layer_source_rectangle, layer_destination_rectangle,
layer_configuration, layer_orientation,
@@ -274,7 +277,7 @@ constexpr ivi_controller_layer_listener layer_listener = {
};
}
-layer::layer(uint32_t i, ivi_controller *c)
+layer::layer(uint32_t i, struct ivi_controller *c)
: wayland_proxy(ivi_controller_layer_create(c, i, 0, 0)), id(i) {
ivi_controller_layer_add_listener(this->proxy, &layer_listener, this);
}
@@ -333,49 +336,50 @@ namespace {
void surface_visibility(void *data,
struct ivi_controller_surface *ivi_controller_surface,
int32_t visibility) {
- static_cast<surface *>(data)->visibility(visibility);
+ static_cast<struct surface *>(data)->visibility(visibility);
}
void surface_opacity(void *data,
struct ivi_controller_surface *ivi_controller_surface,
wl_fixed_t opacity) {
- static_cast<surface *>(data)->opacity(wl_fixed_to_double(opacity));
+ static_cast<struct surface *>(data)->opacity(wl_fixed_to_double(opacity));
}
void surface_source_rectangle(
void *data, struct ivi_controller_surface *ivi_controller_surface, int32_t x,
int32_t y, int32_t width, int32_t height) {
- static_cast<surface *>(data)->source_rectangle(x, y, width, height);
+ static_cast<struct surface *>(data)->source_rectangle(x, y, width, height);
}
void surface_destination_rectangle(
void *data, struct ivi_controller_surface *ivi_controller_surface, int32_t x,
int32_t y, int32_t width, int32_t height) {
- static_cast<surface *>(data)->destination_rectangle(x, y, width, height);
+ static_cast<struct surface *>(data)->destination_rectangle(x, y, width,
+ height);
}
void surface_configuration(
void *data, struct ivi_controller_surface *ivi_controller_surface,
int32_t width, int32_t height) {
- static_cast<surface *>(data)->configuration(width, height);
+ static_cast<struct surface *>(data)->configuration(width, height);
}
void surface_orientation(void *data,
struct ivi_controller_surface *ivi_controller_surface,
int32_t orientation) {
- static_cast<surface *>(data)->orientation(orientation);
+ static_cast<struct surface *>(data)->orientation(orientation);
}
void surface_pixelformat(void *data,
struct ivi_controller_surface *ivi_controller_surface,
int32_t pixelformat) {
- static_cast<surface *>(data)->pixelformat(pixelformat);
+ static_cast<struct surface *>(data)->pixelformat(pixelformat);
}
void surface_layer(void *data,
struct ivi_controller_surface *ivi_controller_surface,
struct ivi_controller_layer *layer) {
- static_cast<surface *>(data)->layer(layer);
+ static_cast<struct surface *>(data)->layer(layer);
}
void surface_stats(void *data,
@@ -383,22 +387,22 @@ void surface_stats(void *data,
uint32_t redraw_count, uint32_t frame_count,
uint32_t update_count, uint32_t pid,
const char *process_name) {
- static_cast<surface *>(data)->stats(redraw_count, frame_count, update_count,
- pid, process_name);
+ static_cast<struct surface *>(data)->stats(redraw_count, frame_count,
+ update_count, pid, process_name);
}
void surface_destroyed(void *data,
struct ivi_controller_surface *ivi_controller_surface) {
- static_cast<surface *>(data)->destroyed();
+ static_cast<struct surface *>(data)->destroyed();
}
void surface_content(void *data,
struct ivi_controller_surface *ivi_controller_surface,
int32_t content_state) {
- static_cast<surface *>(data)->content(content_state);
+ static_cast<struct surface *>(data)->content(content_state);
}
-static constexpr ivi_controller_surface_listener surface_listener = {
+constexpr struct ivi_controller_surface_listener surface_listener = {
surface_visibility,
surface_opacity,
surface_source_rectangle,
@@ -413,7 +417,7 @@ static constexpr ivi_controller_surface_listener surface_listener = {
};
}
-surface::surface(uint32_t i, ivi_controller *c)
+surface::surface(uint32_t i, struct ivi_controller *c)
: wayland_proxy(ivi_controller_surface_create(c, i)), id(i) {
ivi_controller_surface_add_listener(this->proxy, &surface_listener, this);
}
@@ -479,11 +483,11 @@ void surface::content(int32_t content_state) {
}
//
-// ___ ___ _ __ ___ ___ _ __
-/// __|/ __| '__/ _ \/ _ \ '_ \
-//\__ \ (__| | | __/ __/ | | |
-//|___/\___|_| \___|\___|_| |_|
+// ___ ___ _ __ ___ ___ _ __
+// / __|/ __| '__/ _ \/ _ \ '_ \
+// \__ \ (__| | | __/ __/ | | |
+// |___/\___|_| \___|\___|_| |_|
//
-screen::screen(uint32_t i, ivi_controller_screen *p)
+screen::screen(uint32_t i, struct ivi_controller_screen *p)
: wayland_proxy(p), id(i) {}
}