const char kKeyWidthMm[] = "width_mm";
const char kKeyHeightMm[] = "height_mm";
-
namespace {
using nlohmann::json;
} else {
HMI_ERROR("wm", "%s", l.err().value());
}
+
+ if (this->config.get_string("scaling_ignore_aspect")) {
+ this->layers.scaling_keep_aspect =false;
+ }
}
} catch (std::exception &e) {
HMI_ERROR("wm", "Loading of configuration failed: %s", e.what());
// 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, this->layers.scaling_keep_aspect);
+ 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());
// 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) {