From fdc1e4622d8aae5bf380e4b197ab616fed7efd34 Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Fri, 9 Jun 2017 15:55:20 +0200 Subject: 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 --- src/wayland.cpp | 112 +++++++++++++++++++++++++++++--------------------------- 1 file changed, 58 insertions(+), 54 deletions(-) (limited to 'src/wayland.cpp') 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( + : d(std::unique_ptr>( 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(d.get())) {} + r(std::make_unique(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(data)->global(name, iface, v); + static_cast(data)->global(name, iface, v); } void registry_global_remove(void *data, struct wl_registry *r, uint32_t name) { - static_cast(data)->global_remove(name); + static_cast(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, ®istry_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(data)->geometry(x, y, physical_width, physical_height, - subpixel, make, model, transform); + static_cast(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(data)->mode(flags, width, height, refresh); + static_cast(data)->mode(flags, width, height, refresh); } void output_done(void *data, struct wl_output *wl_output) { - static_cast(data)->done(); + static_cast(data)->done(); } void output_scale(void *data, struct wl_output *wl_output, int32_t factor) { - static_cast(data)->scale(factor); + static_cast(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(data)->screen(id_screen, screen); + static_cast(data)->screen(id_screen, screen); } void controller_layer(void *data, struct ivi_controller *ivi_controller, uint32_t id_layer) { - static_cast(data)->layer(id_layer); + static_cast(data)->layer(id_layer); } void controller_surface(void *data, struct ivi_controller *ivi_controller, uint32_t id_surface) { - static_cast(data)->surface(id_surface); + static_cast(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(data)->error(object_id, object_type, error_code, - error_text); + static_cast(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(data)->visibility(visibility); + static_cast(data)->visibility(visibility); } void layer_opacity(void *data, struct ivi_controller_layer *ivi_controller_layer, wl_fixed_t opacity) { - static_cast(data)->opacity(wl_fixed_to_double(opacity)); + static_cast(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(data)->source_rectangle(x, y, width, height); + static_cast(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(data)->destination_rectangle(x, y, width, height); + static_cast(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(data)->configuration(width, height); + static_cast(data)->configuration(width, height); } void layer_orientation(void *data, struct ivi_controller_layer *ivi_controller_layer, int32_t orientation) { - static_cast(data)->orientation(orientation); + static_cast(data)->orientation(orientation); } void layer_screen(void *data, struct ivi_controller_layer *ivi_controller_layer, struct wl_output *screen) { - static_cast(data)->screen(screen); + static_cast(data)->screen(screen); } void layer_destroyed(void *data, struct ivi_controller_layer *ivi_controller_layer) { - static_cast(data)->destroyed(); + static_cast(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(data)->visibility(visibility); + static_cast(data)->visibility(visibility); } void surface_opacity(void *data, struct ivi_controller_surface *ivi_controller_surface, wl_fixed_t opacity) { - static_cast(data)->opacity(wl_fixed_to_double(opacity)); + static_cast(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(data)->source_rectangle(x, y, width, height); + static_cast(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(data)->destination_rectangle(x, y, width, height); + static_cast(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(data)->configuration(width, height); + static_cast(data)->configuration(width, height); } void surface_orientation(void *data, struct ivi_controller_surface *ivi_controller_surface, int32_t orientation) { - static_cast(data)->orientation(orientation); + static_cast(data)->orientation(orientation); } void surface_pixelformat(void *data, struct ivi_controller_surface *ivi_controller_surface, int32_t pixelformat) { - static_cast(data)->pixelformat(pixelformat); + static_cast(data)->pixelformat(pixelformat); } void surface_layer(void *data, struct ivi_controller_surface *ivi_controller_surface, struct ivi_controller_layer *layer) { - static_cast(data)->layer(layer); + static_cast(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(data)->stats(redraw_count, frame_count, update_count, - pid, process_name); + static_cast(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(data)->destroyed(); + static_cast(data)->destroyed(); } void surface_content(void *data, struct ivi_controller_surface *ivi_controller_surface, int32_t content_state) { - static_cast(data)->content(content_state); + static_cast(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) {} } -- cgit 1.2.3-korg