X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwayland.cpp;h=ff08488aa80054e71a1629038337e82695492475;hb=9ce5644a2350f8acbf606b2ee1073727578111ee;hp=8b448524143b613b89a82aecbbb3dd24fe8cb019;hpb=d2ad02c40bad6b67f0b38071987ce1fa9f8039ab;p=staging%2Fwindowmanager.git diff --git a/src/wayland.cpp b/src/wayland.cpp index 8b44852..ff08488 100644 --- a/src/wayland.cpp +++ b/src/wayland.cpp @@ -31,6 +31,8 @@ void display::flush() { wl_display_flush(this->d.get()); } int display::get_fd() const { return wl_display_get_fd(this->d.get()); } +int display::get_error() { return wl_display_get_error(this->d.get()); } + // _ _ // _ __ ___ __ _(_)___| |_ _ __ _ _ // | '__/ _ \/ _` | / __| __| '__| | | | @@ -321,13 +323,7 @@ layer::layer(uint32_t i, int32_t w, int32_t h, struct controller *c) c->remove_proxy_to_id_mapping(l); ivi_controller_layer_destroy(l, 1); }), - controller_child(c, i), - dst_rect{}, - src_rect{}, - size{}, - orientation{}, - visibility{}, - opacity{} { + controller_child(c, i) { this->parent->add_proxy_to_id_mapping(this->proxy.get(), i); ivi_controller_layer_add_listener(this->proxy.get(), &layer_listener, this); } @@ -387,19 +383,19 @@ void layer::set_render_order(std::vector const &ro) { void controller::layer_visibility(struct layer *l, int32_t visibility) { logdebug("genivi::layer %s @ %p v %i", __func__, this->proxy.get(), visibility); - l->visibility = visibility; + this->lprops[l->id].visibility = visibility; } void controller::layer_opacity(struct layer *l, float opacity) { logdebug("genivi::layer %s @ %p o %f", __func__, this->proxy.get(), opacity); - l->opacity = opacity; + this->lprops[l->id].opacity = opacity; } void controller::layer_source_rectangle(struct layer *l, 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); - l->src_rect = rect{uint32_t(width), uint32_t(height), x, y}; + this->lprops[l->id].src_rect = rect{uint32_t(width), uint32_t(height), x, y}; } void controller::layer_destination_rectangle(struct layer *l, int32_t x, @@ -407,20 +403,20 @@ void controller::layer_destination_rectangle(struct layer *l, int32_t x, int32_t height) { logdebug("genivi::layer %s @ %p x %i y %i w %i h %i", __func__, this->proxy.get(), x, y, width, height); - l->dst_rect = rect{uint32_t(width), uint32_t(height), x, y}; + this->lprops[l->id].dst_rect = rect{uint32_t(width), uint32_t(height), x, y}; } void controller::layer_configuration(struct layer *l, int32_t width, int32_t height) { logdebug("genivi::layer %s @ %p w %i h %i", __func__, this->proxy.get(), width, height); - l->size = size{uint32_t(width), uint32_t(height)}; + this->lprops[l->id].size = size{uint32_t(width), uint32_t(height)}; } void controller::layer_orientation(struct layer *l, int32_t orientation) { logdebug("genivi::layer %s @ %p o %i", __func__, this->proxy.get(), orientation); - l->orientation = orientation; + this->lprops[l->id].orientation = orientation; } void controller::layer_screen(struct layer * /*l*/, struct wl_output *screen) { @@ -429,8 +425,10 @@ void controller::layer_screen(struct layer * /*l*/, struct wl_output *screen) { void controller::layer_destroyed(struct layer *l) { logdebug("genivi::layer %s @ %p", __func__, this->proxy.get()); - add_task("remove layer", - [l](struct controller *c) { c->layers.erase(l->id); }); + add_task("remove layer", [l](struct controller *c) { + c->lprops.erase(l->id); + c->layers.erase(l->id); + }); } // __ @@ -542,13 +540,7 @@ surface::surface(uint32_t i, struct controller *c) c->remove_proxy_to_id_mapping(s); ivi_controller_surface_destroy(s, 1); }), - controller_child(c, i), - dst_rect{}, - src_rect{}, - size{}, - orientation{}, - visibility{}, - opacity{1.f} { + controller_child(c, i) { this->parent->add_proxy_to_id_mapping(this->proxy.get(), i); ivi_controller_surface_add_listener(this->proxy.get(), &surface_listener, this); @@ -597,13 +589,13 @@ void surface::destroy(int32_t destroy_scene_object) { void controller::surface_visibility(struct surface *s, int32_t visibility) { logdebug("genivi::surface %s @ %p v %i", __func__, this->proxy.get(), visibility); - s->visibility = visibility; + this->sprops[s->id].visibility = visibility; } void controller::surface_opacity(struct surface *s, float opacity) { logdebug("genivi::surface %s @ %p o %f", __func__, this->proxy.get(), opacity); - s->opacity = opacity; + this->sprops[s->id].opacity = opacity; } void controller::surface_source_rectangle(struct surface *s, int32_t x, @@ -611,7 +603,7 @@ void controller::surface_source_rectangle(struct surface *s, int32_t x, int32_t height) { logdebug("genivi::surface %s @ %p x %i y %i w %i h %i", __func__, this->proxy.get(), x, y, width, height); - s->src_rect = rect{uint32_t(width), uint32_t(height), x, y}; + this->sprops[s->id].src_rect = rect{uint32_t(width), uint32_t(height), x, y}; } void controller::surface_destination_rectangle(struct surface *s, int32_t x, @@ -619,20 +611,20 @@ void controller::surface_destination_rectangle(struct surface *s, int32_t x, int32_t height) { logdebug("genivi::surface %s @ %p x %i y %i w %i h %i", __func__, this->proxy.get(), x, y, width, height); - s->dst_rect = rect{uint32_t(width), uint32_t(height), x, y}; + this->sprops[s->id].dst_rect = rect{uint32_t(width), uint32_t(height), x, y}; } void controller::surface_configuration(struct surface *s, int32_t width, int32_t height) { logdebug("genivi::surface %s @ %p w %i h %i", __func__, this->proxy.get(), width, height); - s->size = size{uint32_t(width), uint32_t(height)}; + this->sprops[s->id].size = size{uint32_t(width), uint32_t(height)}; } void controller::surface_orientation(struct surface *s, int32_t orientation) { logdebug("genivi::surface %s @ %p o %i", __func__, this->proxy.get(), orientation); - s->orientation = orientation; + this->sprops[s->id].orientation = orientation; } void controller::surface_pixelformat(struct surface * /*s*/, @@ -657,6 +649,7 @@ void controller::surface_stats(struct surface * /*s*/, uint32_t redraw_count, void controller::surface_destroyed(struct surface *s) { logdebug("genivi::surface %s @ %p", __func__, this->proxy.get()); + this->sprops.erase(s->id); this->surfaces.erase(s->id); } @@ -664,15 +657,18 @@ void controller::surface_content(struct surface *s, int32_t content_state) { logdebug("genivi::surface %s @ %p s %i", __func__, this->proxy.get(), content_state); if (content_state == IVI_CONTROLLER_SURFACE_CONTENT_STATE_CONTENT_REMOVED) { - add_task("remove surface", - [s](struct controller *c) { c->surfaces.erase(s->id); }); + add_task("remove surface", [s](struct controller *c) { + c->sprops.erase(s->id); + c->surfaces.erase(s->id); + }); } } void controller::add_proxy_to_id_mapping(struct ivi_controller_surface *p, uint32_t id) { - this->surface_proxy_to_id[uintptr_t(p)] = id; logdebug("Add surface proxy mapping for %p (%u)", p, id); + this->surface_proxy_to_id[uintptr_t(p)] = id; + this->sprops[id].id = id; } void controller::remove_proxy_to_id_mapping(struct ivi_controller_surface *p) { @@ -684,6 +680,7 @@ void controller::add_proxy_to_id_mapping(struct ivi_controller_layer *p, uint32_t id) { logdebug("Add layer proxy mapping for %p (%u)", p, id); this->layer_proxy_to_id[uintptr_t(p)] = id; + this->lprops[id].id = id; } void controller::remove_proxy_to_id_mapping(struct ivi_controller_layer *p) { @@ -718,29 +715,6 @@ void controller::execute_pending() { } } -void controller::debug_dump_current_status() { - if (!this->surfaces.empty()) { - puts("Surfaces:"); - for (auto const &i : this->surfaces) { - auto const &r = i.second->dst_rect; - auto const &s = i.second->size; - printf("%d [%ux%u] (%ux%u@%dx%d), ", i.first, s.w, s.h, r.w, r.h, r.x, - r.y); - } - puts("\b\b "); - } - - if (!this->layers.empty()) { - puts("Layers:"); - for (auto const &i : this->layers) { - auto const &r = i.second->dst_rect; - auto const &s = i.second->size; - printf("%d [%ux%u] (%ux%u@%dx%d), ", i.first, s.w, s.h, r.w, r.h, r.x, - r.y); - } - puts("\b\b "); - } -} // // ___ ___ _ __ ___ ___ _ __ // / __|/ __| '__/ _ \/ _ \ '_ \