diff options
Diffstat (limited to 'src/layout.hpp')
-rw-r--r-- | src/layout.hpp | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/src/layout.hpp b/src/layout.hpp index 4ee14a7..6c60bde 100644 --- a/src/layout.hpp +++ b/src/layout.hpp @@ -6,10 +6,13 @@ #define TMCAGLWM_LAYOUT_HPP #include <cstdint> +#include <experimental/optional> +#include <set> #include <string> -#include <json-c/json.h> +#include <json.hpp> +#include "result.hpp" #include "wayland.hpp" namespace wm { @@ -19,7 +22,7 @@ namespace wm { struct area { std::string name; genivi::rect rect; - uint32_t layer; // i.e. zorder? + uint32_t layer; // i.e. zorder? }; struct layout { @@ -32,6 +35,43 @@ struct layout { typedef std::vector<struct layout> layouts_type; +struct surface_id_to_layer { + int id_min = -1; + int id_max = -1; + std::string name = ""; + int layer_id = -1; + + explicit surface_id_to_layer(nlohmann::json const &j); + + bool operator<(struct surface_id_to_layer const &rhs) const { + return this->id_max < rhs.id_max; + } +}; + +inline bool operator<(struct surface_id_to_layer const &a, int b) { + return a.id_max < b; +} + +struct surface_id_to_layer_map { + typedef std::set<struct surface_id_to_layer> map_type; + + map_type mapping; + + std::experimental::optional<int> get_layer_for_surface(int surface_id) { + auto i = std::lower_bound(std::cbegin(this->mapping), + std::cend(this->mapping), surface_id); + + if (i != this->mapping.end()) { + return std::experimental::optional<int>(i->layer_id); + } + + return std::experimental::nullopt; + } +}; + +struct result<struct surface_id_to_layer_map> to_surface_id_to_layer_map( + nlohmann::json const &j); + } // namespace wm #endif // TMCAGLWM_LAYOUT_HPP |