From 626b0fc7a92da537f4914afcd3ff390f855785c4 Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Fri, 28 Jul 2017 14:40:27 +0200 Subject: [PATCH] layers: provide a layers-only vector Signed-off-by: Marcus Fritzsch --- src/app.cpp | 7 ++----- src/layers.cpp | 8 +++++++- src/layers.hpp | 5 +++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index 84ebfba..96394c3 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -192,19 +192,16 @@ int App::init_layout() { // Quick and dirty setup of layers // XXX: This likely needs to be sorted by order (note, we don't (yet?) // do any zorder arrangement). - std::vector ls; - ls.reserve(this->surface2layer.mapping.size()); for (auto const &i: this->surface2layer.mapping) { c->layer_create(i.layer_id, o->width, o->height); auto &l = layers[i.layer_id]; l->set_destination_rectangle(0, 0, o->width, o->height); l->set_visibility(1); logdebug("Setting up layer %s (%d) for surfaces %d-%d", i.name.c_str(), i.layer_id, i.id_min, i.id_max); - ls.push_back(unsigned(i.layer_id)); } - // Add layers to screen - s->set_render_order(ls); + // Add layers to screen (XXX: are they sorted correctly?) + s->set_render_order(this->surface2layer.layers); c->commit_changes(); diff --git a/src/layers.cpp b/src/layers.cpp index f475556..0d01080 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -30,10 +30,16 @@ struct result to_surface_id_to_layer_map( try { surface_id_to_layer_map stl{}; auto m = j["mappings"]; + stl.layers.reserve(m.size()); std::transform( std::cbegin(m), std::cend(m), std::inserter(stl.mapping, stl.mapping.end()), - [](nlohmann::json const &j) { return surface_id_to_layer(j); }); + [&stl](nlohmann::json const &j) { + auto k = surface_id_to_layer(j); + stl.layers.push_back(unsigned(k.layer_id)); + return k; + }); + // XXX need to sort layers? for (auto i : stl.mapping) { if (i.name.empty()) { return Err( diff --git a/src/layers.hpp b/src/layers.hpp index 9dd2036..ec24a74 100644 --- a/src/layers.hpp +++ b/src/layers.hpp @@ -30,10 +30,15 @@ struct surface_id_to_layer { // to contain its mapping type and the _single_ useful method. struct surface_id_to_layer_map { typedef std::set surface_to_layer_map_type; + typedef std::vector layers_type; surface_to_layer_map_type mapping; + layers_type layers; optional get_layer_for_surface(int surface_id); + layers_type::size_type get_layers_count() const { + return this->layers.size(); + } }; struct result to_surface_id_to_layer_map( -- 2.16.6