diff options
author | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-08-01 11:48:13 +0200 |
---|---|---|
committer | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-08-08 17:24:00 +0200 |
commit | 9642c1098a3b3326c2213b5f791dfa84c6352625 (patch) | |
tree | 7a3ff70ed50f0f9862f6b63121628801571c7d8f /src/app.cpp | |
parent | ca53e70e58714286798a071fbe2316295334ac7b (diff) |
app: implement configured surface areas from ids.json
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
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, |