Fix area and role
[apps/agl-service-windowmanager.git] / src / wm_layer_control.hpp
index 5244bf5..7c19e97 100644 (file)
@@ -19,6 +19,7 @@
 #include <vector>
 #include <unordered_map>
 #include <functional>
+#include <regex>
 #include <ilm/ilm_control.h>
 #include "wm_error.hpp"
 #include "util.hpp"
@@ -27,14 +28,24 @@ namespace wm {
 
 class Screen {
   public:
-    Screen(unsigned w, unsigned h) : _width(w), _height(h){}
-    unsigned width() { return _width; }
-    unsigned height() { return _height; }
+    Screen(unsigned id, unsigned w, unsigned h) : _screen_id(id), _width(w), _height(h){}
+    unsigned width() const { return _width; }
+    unsigned height() const { return _height; }
+    unsigned id() const { return _screen_id; }
+    unsigned scale() const { return _scale; }
+    int offsetX() const { return _offset_x; }
+    int offsetY() const { return _offset_y; }
+    void setScale(double scl) { this->_scale = scl; }
+    void setOffset(int x, int y) { this->_offset_x = x; this->_offset_y = y; }
   private:
+    unsigned _screen_id;
     unsigned _width;
     unsigned _height;
     unsigned _pysical_width = 0;
     unsigned _pysical_height = 0;
+    int _offset_x = 0;
+    int _offset_y = 0;
+    double _scale = 1.0;
 };
 
 class LayerControlCallbacks {
@@ -60,46 +71,63 @@ class WMClient;
 class LayerControl
 {
   public:
-    explicit LayerControl(const std::string& root);
+    explicit LayerControl(const std::string& root, const std::string& ecu_name);
     ~LayerControl() = default;
     WMError init(const LayerControlCallbacks& cb);
-    void createLayers();
-    unsigned getLayerID(const std::string& role);
+    void createNewLayer(unsigned id);
+    void createNewRemoteLayer(unsigned id);
+    unsigned getNewLayerID(const std::string& role, std::string* layer_name);
     std::shared_ptr<WMLayer> getWMLayer(unsigned layer);
     std::shared_ptr<WMLayer> getWMLayer(std::string layer_name);
     struct rect getAreaSize(const std::string& area);
     void setupArea(const rectangle& base_rct, double scaling);
     Screen getScreenInfo();
     double scale();
+    WMError updateLayer(LayerState& layer_state);
     WMError renderLayers();
+    // WMError renderLayersRemote();
     WMError setXDGSurfaceOriginSize(unsigned surface);
+    void undoUpdate();
     WMError layoutChange(const WMAction& action);
     WMError visibilityChange(const WMAction &action);
-    void addSurface(unsigned surface, unsigned layer);
+    const std::unordered_map<std::string, struct rect>& getAreaList() {return this->area2size;}
+    WMError updateAreaList(const ChangeAreaReq& req);
+    WMError getUpdateAreaList(ChangeAreaReq* req);
+    WMError changeAreaSize(std::shared_ptr<WMClient> client, const std::string& area);
+    void appTerminated(const std::shared_ptr<WMClient> client);
 
     // Don't use this function.
     void dispatchCreateEvent(ilmObjectType object, unsigned id, bool created);
     void dispatchSurfacePropChangeEvent(unsigned id, struct ilmSurfaceProperties*, t_ilm_notification_mask);
     void dispatchLayerPropChangeEvent(unsigned id, struct ilmLayerProperties*, t_ilm_notification_mask);
 
+    std::string hasRemoteLayer(unsigned layer);
+    std::string areaToRemoteLayer(const std::string& area);
   private:
-    WMError makeVisible(const std::shared_ptr<WMClient> client, const std::string& role);
-    WMError makeInvisible(const std::shared_ptr<WMClient> client, const std::string& role);
-    bool moveForeGround(const std::shared_ptr<WMClient> client, const std::string& role);
-    bool moveBackGround(const std::shared_ptr<WMClient> client, const std::string& role);
+    WMError makeVisible(const std::shared_ptr<WMClient> client);
+    WMError makeInvisible(const std::shared_ptr<WMClient> client);
+    bool moveForeGround(const std::shared_ptr<WMClient> client);
+    bool moveBackGround(const std::shared_ptr<WMClient> client);
+    bool moveRemote(unsigned layer, const std::string& area);
+    bool moveLocal(unsigned layer);
+    int loadWestonSetting(const std::string &path);
     WMError loadLayerSetting(const std::string& path);
-    WMError loadAreaDb(const std::string& path);
+    WMError loadAreasConfigFile(const std::string& path, const std::string& ecu_name);
 
-    std::vector<unsigned> surface_bg; // For CES demo
     std::vector<std::shared_ptr<WMLayer>> wm_layers;
+    std::vector<std::string> wm_remoteLayerName;
+    std::vector<Screen> wm_screens;
     std::unordered_map<unsigned, unsigned> lid2wmlid;
     std::unordered_map<std::string, struct rect> area2size;
     unsigned screenID;
-    struct ilmScreenProperties screen_prop;
+
     double scaling;
     int offset_x;
     int offset_y;
     LayerControlCallbacks cb;
+
+    long times;
+    long sleep;
 };
 
-} // namespace wm
\ No newline at end of file
+} // namespace wm