X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_layer.hpp;h=83a5e7446b28c745c7815e9d5778be5e3a22b73c;hb=refs%2Fheads%2Fsandbox%2FKazumasaTanaka%2Fchange_screen_updated;hp=4dd46168c952494ab3fd437e3c25d025ece062d9;hpb=2fd5d33ca200d27c73e0fffc57987ddc751eb84a;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_layer.hpp b/src/wm_layer.hpp index 4dd4616..83a5e74 100644 --- a/src/wm_layer.hpp +++ b/src/wm_layer.hpp @@ -14,145 +14,82 @@ * 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 WMClient; +class LayerState { - using json = nlohmann::json; + public: + LayerState(); + ~LayerState() = default; + const std::vector getIviIdList(); + void addLayer(unsigned layer); + void removeLayer(unsigned layer); + void attachAppToArea(const std::string& app, const std::string& area); - // A more or less descriptive name? - 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; - // Specify a role prefix for surfaces that should be - // put on this layer. - std::string role; + // Debug + void dump(); - mutable struct LayoutState state; - - explicit layer(nlohmann::json const &j); - - json to_json() const; + private: + std::vector render_order; + std::unordered_map area2appid; }; -struct layer_map +class WMLayer { - 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(); + public: + explicit WMLayer(json_object* j, unsigned wm_layer_id); + ~WMLayer() = default; + + // Status & Setting API + unsigned getNewLayerID(const std::string& role); + unsigned idBegin() { return this->id_begin; } + unsigned idEnd() { return this->id_end; } + unsigned getWMLayerID() { return this->wm_layer_id; } + const std::string& layerName(); + void appendArea(const std::string& area); + LayerState& getLayerState() { return tmp_state; } + WMError setLayerState(const LayerState& l); + bool hasLayerID(unsigned id); + bool hasRole(const std::string& role); + + // Manipulation + void addLayerToState(unsigned layer); + void removeLayerFromState(unsigned layer); + void attachAppToArea(const std::string& app, const std::string& area); + void update(); + void undo(); + + // Event + void appTerminated(unsigned layer); + + // Debug + void dump(); private: - std::unordered_map area2size; - - static const char *kDefaultAreaDb; + LayerState tmp_state; + LayerState state; + unsigned wm_layer_id; + std::string name = ""; // Layer name + std::string role_list; + std::vector area_list; + std::vector id_list; + unsigned id_begin; + unsigned id_end; }; -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