aboutsummaryrefslogtreecommitdiffstats
path: root/src/layers.hpp
diff options
context:
space:
mode:
authorMarcus Fritzsch <m@fritschy.de>2017-07-27 23:12:17 +0200
committerMarcus Fritzsch <marcus_fritzsch@mentor.com>2017-08-08 17:24:00 +0200
commit6f304f768a914c9d8c678f2613597b469b8b6396 (patch)
treea52d2530213463a8c1df099fbeef75dad962e5a8 /src/layers.hpp
parent268111321e92c4366100924b2c0cd8a8c945885b (diff)
layers: introduce layers.hpp and .cpp for layer related code
Signed-off-by: Marcus Fritzsch <marcus_fritzsch@mentor.com>
Diffstat (limited to 'src/layers.hpp')
-rw-r--r--src/layers.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/layers.hpp b/src/layers.hpp
new file mode 100644
index 0000000..7b35c63
--- /dev/null
+++ b/src/layers.hpp
@@ -0,0 +1,59 @@
+//
+// Created by m on 7/27/17.
+//
+
+#ifndef TMCAGLWM_LAYERS_H
+#define TMCAGLWM_LAYERS_H
+
+#include <algorithm>
+#include <experimental/optional>
+#include <json.hpp>
+#include <set>
+#include <string>
+
+#include "result.hpp"
+
+namespace wm {
+
+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()) {
+ if (i->id_min <= surface_id) {
+ 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_LAYERS_H