From 6819f403a6b8a1ab5e8cdffd9fd1460d49045059 Mon Sep 17 00:00:00 2001 From: Kazumasa Mitsunari Date: Wed, 17 Oct 2018 17:42:42 +0900 Subject: 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 --- src/wm_layer.hpp | 145 ++++++++----------------------------------------------- 1 file changed, 20 insertions(+), 125 deletions(-) (limited to 'src/wm_layer.hpp') 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 +#include +#include +#include +#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; - using layers_type = std::vector; - using role_to_layer_map = std::vector>; - using addsurf_layer_map = std::map; - - 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 get_layer_id(int surface_id); - optional get_layer_id(std::string const &role); - optional 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(&i->second.state); - } - optional get_layer(int layer_id) - { - auto i = this->mapping.find(layer_id); - return i == this->mapping.end() ? nullopt - : optional(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 area2size; - - static const char *kDefaultAreaDb; -}; - -struct result 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 -- cgit 1.2.3-korg