aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.cpp')
-rw-r--r--src/app.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/app.cpp b/src/app.cpp
index e9d79f5..e37490b 100644
--- a/src/app.cpp
+++ b/src/app.cpp
@@ -58,7 +58,6 @@ const char kKeyHeightPixel[] = "height_pixel";
const char kKeyWidthMm[] = "width_mm";
const char kKeyHeightMm[] = "height_mm";
-
namespace {
using nlohmann::json;
@@ -237,11 +236,22 @@ int App::init_layers() {
// Clear screen
s->clear();
+ int width = this->layers.main_surface_width;
+ int height = this->layers.main_surface_height;
+
+ rectangle rect(width, height); // 1080x1920 by default
+ rect.scale(o->width, o->height, true);
+ rect.center(o->width, o->height);
+
+ HMI_DEBUG("wm", "Main surface (0,0),%dx%d to (%d,%d),%dx%d",
+ width, height, rect.left(), rect.top(), rect.width(), rect.height());
+
// Quick and dirty setup of layers
for (auto const &i : this->layers.mapping) {
- c->layer_create(i.second.layer_id, o->width, o->height);
+ c->layer_create(i.second.layer_id, rect.width(), rect.height());
auto &l = layers[i.second.layer_id];
- l->set_destination_rectangle(0, 0, o->width, o->height);
+ l->set_source_rectangle(0, 0, width, height);
+ l->set_destination_rectangle(rect.left(), rect.top(), rect.width(), rect.height());
l->set_visibility(1);
HMI_DEBUG("wm", "Setting up layer %s (%d) for surface role match \"%s\"",
i.second.name.c_str(), i.second.layer_id, i.second.role.c_str());
@@ -282,10 +292,10 @@ void App::surface_set_layout(int surface_id, optional<int> sub_surface_id) {
// less-than-0 values refer to MAX + 1 - $VALUE
// e.g. MAX is either screen width or height
if (w < 0) {
- w = this->controller->output_size.w + 1 + w;
+ w = this->layers.main_surface_width + 1 + w;
}
if (h < 0) {
- h = this->controller->output_size.h + 1 + h;
+ h = this->layers.main_surface_height + 1 + h;
}
if (sub_surface_id) {