diff options
author | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-10-17 17:42:42 +0900 |
---|---|---|
committer | Kazumasa Mitsunari <knimitz@witz-inc.co.jp> | 2018-10-24 19:08:50 +0900 |
commit | 6819f403a6b8a1ab5e8cdffd9fd1460d49045059 (patch) | |
tree | 1e1509904c1ee4ececce8b7cbfa89284282a0fa1 /src/wm_layer.hpp | |
parent | 9fabd6550e183283363b61f71092477342a357d1 (diff) |
Refactor : Hide wayland operations from Window Manager
Window Manager now uses abstract client, area for layer/surface management,
then hide wayland operation into LayerControl class.
LayerControl class uses ilmControl library instead of wayland protocol.
This patch reduces the binary size of binding by 30% than before.
Currently, the following debug methods are not available.
* debug_status
* debug_layers
* debug_surfaces
* list_drawing_names
Bug-AGL: SPEC-1817
Change-Id: I7313787f3c4a286ceee3c23783e5c0e713388dac
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
Diffstat (limited to 'src/wm_layer.hpp')
-rw-r--r-- | src/wm_layer.hpp | 145 |
1 files changed, 20 insertions, 125 deletions
diff --git a/src/wm_layer.hpp b/src/wm_layer.hpp index 4dd4616..1d9435b 100644 --- a/src/wm_layer.hpp +++ b/src/wm_layer.hpp @@ -14,145 +14,40 @@ * limitations under the License. */ -#ifndef WM_LAYERS_H -#define WM_LAYERS_H +#ifndef WM_LAYER_HPP +#define WM_LAYER_HPP #include <string> +#include <vector> +#include <unordered_map> +#include <memory> +#include "wm_error.hpp" -#include "../include/json.hpp" -#include "layout.hpp" -#include "result.hpp" -#include "wayland_ivi_wm.hpp" +struct json_object; namespace wm { -struct layer +class WMLayer { - using json = nlohmann::json; - + public: + explicit WMLayer(json_object* j); + ~WMLayer() = default; // A more or less descriptive name? + const std::string& layerName(){ return this->role_list;} + unsigned layerID(){ return this->layer_id;} + const std::string& roleList(); + bool hasRole(const std::string& role); + private: std::string name = ""; // The actual layer ID - int layer_id = -1; - // The rectangular region surfaces are allowed to draw on - // this layer. - compositor::rect rect; + int layer_id = 0; + // Specify a role prefix for surfaces that should be // put on this layer. - std::string role; - - mutable struct LayoutState state; - - explicit layer(nlohmann::json const &j); - - json to_json() const; + std::string role_list; }; -struct layer_map -{ - using json = nlohmann::json; - - using storage_type = std::map<int, struct layer>; - using layers_type = std::vector<uint32_t>; - using role_to_layer_map = std::vector<std::pair<std::string, int>>; - using addsurf_layer_map = std::map<int, int>; - - storage_type mapping; // map surface_id to layer - layers_type layers; // the actual layer IDs we have - int main_surface; - std::string main_surface_name; - role_to_layer_map roles; - addsurf_layer_map surfaces; // additional surfaces on layers - - optional<int> get_layer_id(int surface_id); - optional<int> get_layer_id(std::string const &role); - optional<struct LayoutState *> get_layout_state(int surface_id) - { - int layer_id = *this->get_layer_id(surface_id); - auto i = this->mapping.find(layer_id); - return i == this->mapping.end() - ? nullopt - : optional<struct LayoutState *>(&i->second.state); - } - optional<struct layer> get_layer(int layer_id) - { - auto i = this->mapping.find(layer_id); - return i == this->mapping.end() ? nullopt - : optional<struct layer>(i->second); - } - - layers_type::size_type get_layers_count() const - { - return this->layers.size(); - } - - void add_surface(int surface_id, int layer_id) - { - this->surfaces[surface_id] = layer_id; - } - - void remove_surface(int surface_id) - { - this->surfaces.erase(surface_id); - } - - json to_json() const; - void setupArea(double scaling); - compositor::rect getAreaSize(const std::string &area); - int loadAreaDb(); - - private: - std::unordered_map<std::string, compositor::rect> area2size; - - static const char *kDefaultAreaDb; -}; - -struct result<struct layer_map> to_layer_map(nlohmann::json const &j); - -static const nlohmann::json default_layers_json = { - {"main_surface", { - {"surface_role", "HomeScreen"} - }}, - {"mappings", { - { - {"role", "^HomeScreen$"}, - {"name", "HomeScreen"}, - {"layer_id", 1000}, - {"area", { - {"type", "full"} - }} - }, - { - {"role", "MediaPlayer|Radio|Phone|Navigation|HVAC|Settings|Dashboard|POI|Mixer"}, - {"name", "apps"}, - {"layer_id", 1001}, - {"area", { - {"type", "rect"}, - {"rect", { - {"x", 0}, - {"y", 218}, - {"width", -1}, - {"height", -433} - }} - }} - }, - { - {"role", "^OnScreen.*"}, - {"name", "popups"}, - {"layer_id", 9999}, - {"area", { - {"type", "rect"}, - {"rect", { - {"x", 0}, - {"y", 760}, - {"width", -1}, - {"height", 400} - }} - }} - } - }} -}; } // namespace wm -#endif // WM_LAYERS_H +#endif // WM_LAYER_HPP |