diff options
author | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-07-27 15:51:35 +0200 |
---|---|---|
committer | Marcus Fritzsch <marcus_fritzsch@mentor.com> | 2017-08-08 17:24:00 +0200 |
commit | bc55aaf18c56a82ee3d12b8ba2a6d7f452dbda2c (patch) | |
tree | 234901515616053d0182f0ccd1a0d3104ffd2c0f /src/layout.cpp | |
parent | f618aa82d6c5dbfc815b4f5f79c75325c9ee7544 (diff) |
layout: add surface id to layer mapping
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
Diffstat (limited to 'src/layout.cpp')
-rw-r--r-- | src/layout.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/layout.cpp b/src/layout.cpp index 749b554..6a77cda 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -2,10 +2,46 @@ // Created by mfritzsc on 6/27/17. // +#include "json_helper.hpp" #include "layout.hpp" namespace wm { +surface_id_to_layer::surface_id_to_layer(nlohmann::json const &j) { + DB(j); + if (j["type"] == "range") { + this->id_min = get<int>(j["first_surface_id"]); + this->id_max = get<int>(j["last_surface_id"]); + } else { + this->id_min = this->id_max = get<int>(j["surface_id"]); + } + this->name = j["name"].get<std::string>(); + this->layer_id = get<int>(j["layer_id"]); +} +struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( + nlohmann::json const &j) { + DB(j); + try { + surface_id_to_layer_map stl{}; + std::transform( + std::cbegin(j), std::cend(j), + std::inserter(stl.mapping, stl.mapping.end()), + [](nlohmann::json const &j) { return surface_id_to_layer(j); }); + for (auto i : stl.mapping) { + if (i.name.empty()) { + return Err<struct surface_id_to_layer_map>( + "Found mapping w/o name"); + } + if (i.layer_id == -1 || i.id_min == -1 || i.id_max == -1) { + return Err<struct surface_id_to_layer_map>( + "Found invalid/unset IDs in mapping"); + } + } + return Ok(stl); + } catch (std::exception &e) { + return Err<struct surface_id_to_layer_map>(e.what()); + } +} } // namespace wm
\ No newline at end of file |