X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_layer.hpp;fp=src%2Fwm_layer.hpp;h=1d9435b932d24de46e0808373b2ff14383807f98;hb=b1f7a756ff0fce7ff38d24b256476902f748be0b;hp=4dd46168c952494ab3fd437e3c25d025ece062d9;hpb=5a2494b3b0f2b3f2bc885ab6d4b55f1d5d5822c9;p=apps%2Fagl-service-windowmanager.git 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