summaryrefslogtreecommitdiffstats
path: root/src/wayland.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wayland.cpp')
-rw-r--r--src/wayland.cpp79
1 files changed, 26 insertions, 53 deletions
diff --git a/src/wayland.cpp b/src/wayland.cpp
index cf03d02..e12f155 100644
--- a/src/wayland.cpp
+++ b/src/wayland.cpp
@@ -323,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);
}
@@ -389,19 +383,19 @@ void layer::set_render_order(std::vector<uint32_t> 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,
@@ -409,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) {
@@ -432,7 +426,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); });
+ [l](struct controller *c) {
+ c->lprops.erase(l->id);
+ c->layers.erase(l->id);
+ });
}
// __
@@ -544,13 +541,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);
@@ -599,13 +590,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,
@@ -613,7 +604,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,
@@ -621,20 +612,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*/,
@@ -659,6 +650,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);
}
@@ -667,14 +659,18 @@ void controller::surface_content(struct surface *s, int32_t content_state) {
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); });
+ [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) {
@@ -686,6 +682,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) {
@@ -720,30 +717,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 ");
- }
-}
-
//
// ___ ___ _ __ ___ ___ _ __
// / __|/ __| '__/ _ \/ _ \ '_ \