display{d},
controller{},
outputs(),
- layouts(), // load_layout("../layout.json").unwrap()),
- surface2layer(load_layer_ids("../ids.json").unwrap()) {
- // layouts(load_layout("../layout.json").unwrap()) {
+ layouts(),
+ surface2layer() {
assert(g_app == nullptr);
g_app = this;
- try {
+ {
+ auto l = load_layer_ids("../ids.json");
+ if (l.is_ok()) {
+ this->surface2layer = l.unwrap();
+ } else {
+ logerror("%s", l.err().value());
+ }
+ }
+
+ {
auto l = load_layout("../layout.json");
- if (l.is_err()) {
- logerror("Coult not load layout configuration: %s", l.err().value());
+ if (l.is_ok()) {
+ this->layouts = l.unwrap();
+ } else {
+ logerror("%s", l.err().value());
}
- } catch (std::exception &e) {
- logerror("Coult not load layout configuration: %s", e.what());
}
}
return -1;
}
+ if (this->surface2layer.mapping.empty()) {
+ logerror("No surface -> layer mapping loaded");
+ return -1;
+ }
+
this->display->add_global_handler(
"wl_output", [this](wl_registry *r, uint32_t name, uint32_t v) {
this->outputs.emplace_back(std::make_unique<wl::output>(r, name, v));
int w = rect.w;
int h = rect.h;
+ // less-than-0 values refer to MAX + 1 - $VALUE
+ // e.g. MAX is either screen width or height
if (w < 0) {
w = c->output_size.w + 1 + w;
}
}
logdebug("Computed rect={ %d, %d, %d, %d }", x, y, w, h);
+ // configure surface to wxh dimensions
s->set_configuration(w, h);
+ // set source rect to "entire surface"
s->set_source_rectangle(0, 0, w, h);
+ // set destination to the display rectangle
s->set_destination_rectangle(x, y, w, h);
s->set_visibility(1);