From: Marcus Fritzsch Date: Tue, 1 Aug 2017 15:49:04 +0000 (+0200) Subject: layers: add layer and layer_map to_json() helper X-Git-Tag: 4.99.1~189 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=staging%2Fwindowmanager.git;a=commitdiff_plain;h=7ea90aa37831357d24362e84495ed7492ef31a68 layers: add layer and layer_map to_json() helper Signed-off-by: Marcus Fritzsch --- diff --git a/src/layers.cpp b/src/layers.cpp index 1e44a1b..abf8303 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -22,7 +22,7 @@ layer::layer(nlohmann::json const &j) { } this->name = j["name"].get(); this->layer_id = get(j["layer_id"]); - this->rect = genivi::rect{-1, -1, 0, 0}; + this->rect = genivi::full_rect; if (j["area"]["type"] == "rect") { auto jr = j["area"]["rect"]; this->rect = genivi::rect{ @@ -119,4 +119,36 @@ optional layer_map::get_layer_rect(int surface_id) { return e ? optional(e->rect) : nullopt; } +json layer::to_json() const { + auto is_full = this->rect == genivi::full_rect; + + json r{}; + if (is_full) { + r = {{"type", "full"}}; + } else { + r = {{"type", "rect"}, + {"rect", + {{"x", this->rect.x}, + {"y", this->rect.y}, + {"width", this->rect.w}, + {"height", this->rect.h}}}}; + } + + return { + {"id_min", this->id_min}, + {"id_max", this->id_max}, + {"name", this->name}, + {"layer_id", this->layer_id}, + {"area", r}, + }; +} + +json layer_map::to_json() const { + json j{}; + for (auto const &i: this->mapping) { + j.push_back(i.to_json()); + } + return j; +} + } // namespace wm diff --git a/src/layers.hpp b/src/layers.hpp index e2d2bf5..a775f7a 100644 --- a/src/layers.hpp +++ b/src/layers.hpp @@ -15,6 +15,8 @@ namespace wm { struct layer { + using json = nlohmann::json; + // Min and max surface ID mapped to this layer int id_min = -1; int id_max = -1; @@ -36,11 +38,15 @@ struct layer { bool operator<(struct layer const &rhs) const { return this->id_max < rhs.id_max; } + + json to_json() const; }; // Actually, we shouldn't need a struct here ... but let's just keep it at that // for now, to contain its mapping type and the _single_ useful method. struct layer_map { + using json = nlohmann::json; + typedef std::set storage_type; typedef std::vector layers_type; @@ -52,6 +58,8 @@ struct layer_map { layers_type::size_type get_layers_count() const { return this->layers.size(); } + + json to_json() const; }; struct result to_layer_map(nlohmann::json const &j);