aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.cpp')
-rw-r--r--src/app.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/app.cpp b/src/app.cpp
index c9abd2d..5ddcb8c 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -227,23 +227,29 @@ void App::surface_created(uint32_t surface_id) {
logerror("Surface %d (0x%x) is not part of any layer!", surface_id,
surface_id);
} else {
+ auto rect = this->surface2layer.get_rect_for_surface(surface_id).value();
this->controller->add_task(
"fullscreen surface",
- [layer_id, surface_id](struct genivi::controller *c) {
+ [layer_id, surface_id, rect](struct genivi::controller *c) {
auto &s = c->surfaces[surface_id];
- // s->set_destination_rectangle(0, 0, c->output_size.w, c->output_size.h);
- // s->set_source_rectangle(0, 100, c->output_size.w, c->output_size.h - 200);
- if (layer_id != 1000) {
- // s->set_source_rectangle(0, 0, c->output_size.w, c->output_size.h - 200);
- s->set_configuration(c->output_size.w, c->output_size.h - 200);
- s->set_destination_rectangle(0, 100, c->output_size.w,
- c->output_size.h - 200);
- } else {
- // s->set_source_rectangle(0, 0, c->output_size.w, c->output_size.h);
- s->set_configuration(c->output_size.w, c->output_size.h);
- s->set_destination_rectangle(0, 0, c->output_size.w,
- c->output_size.h);
+
+ int x = rect.x;
+ int y = rect.y;
+ int w = rect.w;
+ int h = rect.h;
+
+ if (w < 0) {
+ w = c->output_size.w + 1 + w;
+ }
+ if (h < 0) {
+ h = c->output_size.h + 1 + h;
}
+ logdebug("Computed rect={ %d, %d, %d, %d }", x, y, w, h);
+
+ s->set_configuration(w, h);
+ s->set_source_rectangle(0, 0, w, h);
+ s->set_destination_rectangle(x, y, w, h);
+
s->set_visibility(1);
c->layers[layer_id]->add_surface(s.get());
logdebug("Surface %u now on layer %u", surface_id,