X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_layer.hpp;h=1521309cd3fbb3bb042557cf0007da97f8c53ce4;hb=de70b5f128a2b993e88020ff717e763a53e385f7;hp=1d9435b932d24de46e0808373b2ff14383807f98;hpb=6819f403a6b8a1ab5e8cdffd9fd1460d49045059;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_layer.hpp b/src/wm_layer.hpp index 1d9435b..1521309 100644 --- a/src/wm_layer.hpp +++ b/src/wm_layer.hpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2017 TOYOTA MOTOR CORPORATION + * Copyright (c) 2019 Konsulko Group * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,24 +29,71 @@ struct json_object; namespace wm { +class WMClient; +class LayerState +{ + public: + LayerState(); + ~LayerState() = default; + const std::unordered_map getCurrentState(); + const std::vector getIviIdList(); + void addLayer(unsigned layer); + void removeLayer(unsigned layer); + void attachAppToArea(const std::string& app, const std::string& area); + + // Debug + void dump(); + + private: + std::vector render_order; + std::unordered_map area2appid; +}; + class WMLayer { public: - explicit WMLayer(json_object* j); + explicit WMLayer(json_object* j, unsigned wm_layer_id); ~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(); + + // 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); - private: - std::string name = ""; - // The actual layer ID - int layer_id = 0; + void setRemote(const bool newRemote) { remote = newRemote; } + bool isRemote(void) { return remote; } + + // Manipulation + void addLayerToState(unsigned layer); + void removeLayerFromState(unsigned layer); + void attachAppToArea(const std::string& app, const std::string& area); + std::string attachedApp(const std::string& area); + void update(); + void undo(); - // Specify a role prefix for surfaces that should be - // put on this layer. + // Event + void appTerminated(unsigned layer); + + // Debug + void dump(); + + private: + 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; + bool remote = false; }; } // namespace wm