+void layer::remove_surface(struct surface *surface) {
+ ivi_controller_layer_remove_surface(this->proxy.get(), surface->proxy.get());
+}
+
+void layer::set_render_order(std::vector<uint32_t> const &ro) {
+ struct wl_array wlro {
+ .size = ro.size() * sizeof(ro[0]), .alloc = ro.capacity() * sizeof(ro[0]),
+ .data = const_cast<void *>(static_cast<void const *>(ro.data()))
+ };
+ ivi_controller_layer_set_render_order(this->proxy.get(), &wlro);
+}
+
+void controller::layer_visibility(uint32_t id, int32_t visibility) {
+ logdebug("genivi::layer %s @ %p v %i", __func__, this->proxy.get(),
+ visibility);
+ this->layers[id]->visibility = visibility;
+}
+
+void controller::layer_opacity(uint32_t id, float opacity) {
+ logdebug("genivi::layer %s @ %p o %f", __func__, this->proxy.get(), opacity);
+ this->layers[id]->opacity = opacity;
+}
+
+void controller::layer_source_rectangle(uint32_t id, int32_t x, int32_t y,
+ int32_t width, int32_t height) {
+ logdebug("genivi::layer %s @ %p x %i y %i w %i h %i", __func__,
+ this->proxy.get(), x, y, width, height);
+ this->layers[id]->src_rect = rect{uint32_t(width), uint32_t(height), x, y};
+}
+
+void controller::layer_destination_rectangle(uint32_t id, int32_t x, int32_t y,
+ int32_t width, int32_t height) {
+ logdebug("genivi::layer %s @ %p x %i y %i w %i h %i", __func__,
+ this->proxy.get(), x, y, width, height);
+ this->layers[id]->dst_rect = rect{uint32_t(width), uint32_t(height), x, y};
+}
+
+void controller::layer_configuration(uint32_t id, int32_t width,
+ int32_t height) {
+ logdebug("genivi::layer %s @ %p w %i h %i", __func__, this->proxy.get(),
+ width, height);
+ this->layers[id]->size = size{uint32_t(width), uint32_t(height)};
+}
+
+void controller::layer_orientation(uint32_t id, int32_t orientation) {
+ logdebug("genivi::layer %s @ %p o %i", __func__, this->proxy.get(),
+ orientation);
+ this->layers[id]->orientation = orientation;
+}
+
+void controller::layer_screen(uint32_t /*id*/, struct wl_output *screen) {
+ logdebug("genivi::layer %s @ %p s %p", __func__, this->proxy.get(), screen);
+}
+
+void controller::layer_destroyed(uint32_t id) {
+ logdebug("genivi::layer %s @ %p", __func__, this->proxy.get());
+ add_task("remove layer",
+ [id](struct controller *c) { c->layers.erase(id); });