summaryrefslogtreecommitdiffstats
path: root/src/wayland.cpp
diff options
context:
space:
mode:
authorMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-07-10 10:44:29 +0200
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-08 17:24:00 +0200
commit0c673801b78c98fe116b4d14bf37fb18f8b749dc (patch)
tree2600e18722fa4e0694ed33afbadf0c0b83640ebf /src/wayland.cpp
parent8c587d6defaf73c1ddbe50d88f6fdd7360b63507 (diff)
Track surface/layer properties with one struct
As both share the exact same properties this makes sense, we now can write code once and work on both layer and surface properties. This however is only relevant in the wayland "level" of things, as in WM semantics layers are always fullscreen. Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
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 ");
- }
-}
-
//
// ___ ___ _ __ ___ ___ _ __
// / __|/ __| '__/ _ \/ _ \ '_ \