diff options
Diffstat (limited to 'src/app.cpp')
-rw-r--r-- | src/app.cpp | 32 |
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, |