diff options
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/app.cpp | 1 | ||||
-rw-r--r-- | src/layers.cpp | 48 | ||||
-rw-r--r-- | src/layers.hpp | 59 | ||||
-rw-r--r-- | src/layout.cpp | 42 | ||||
-rw-r--r-- | src/layout.hpp | 43 |
6 files changed, 109 insertions, 86 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a04173e..1a1066e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -26,7 +26,7 @@ add_library(winman MODULE app.hpp app.cpp result.hpp afb_binding_api.hpp - afb_binding_glue.inl) + afb_binding_glue.inl layers.cpp layers.hpp) target_include_directories(winman PRIVATE diff --git a/src/app.cpp b/src/app.cpp index ebbed02..482aff1 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -7,6 +7,7 @@ #include "layout.hpp" #include "util.hpp" #include "wayland.hpp" +#include "layers.hpp" #include <cstdio> #include <memory> diff --git a/src/layers.cpp b/src/layers.cpp new file mode 100644 index 0000000..8bd9b8f --- /dev/null +++ b/src/layers.cpp @@ -0,0 +1,48 @@ +// +// Created by m on 7/27/17. +// + +#include "layers.hpp" +#include "json_helper.hpp" +#include "util.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 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 diff --git a/src/layout.cpp b/src/layout.cpp index 6a77cda..a78a525 100644 --- a/src/layout.cpp +++ b/src/layout.cpp @@ -2,46 +2,4 @@ // 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 diff --git a/src/layout.hpp b/src/layout.hpp index 3308cf6..109b9d2 100644 --- a/src/layout.hpp +++ b/src/layout.hpp @@ -6,12 +6,8 @@ #define TMCAGLWM_LAYOUT_HPP #include <cstdint> -#include <experimental/optional> -#include <set> #include <string> -#include <json.hpp> - #include "result.hpp" #include "wayland.hpp" @@ -35,45 +31,6 @@ 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()) { - 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_LAYOUT_HPP |