Update wm_layer
[apps/agl-service-windowmanager.git] / src / wm_layer_control.hpp
index d8d3273..7752fc4 100644 (file)
 #include <memory>\r
 #include <vector>\r
 #include <unordered_map>\r
+#include <functional>\r
 #include <ilm/ilm_control.h>\r
 #include "wm_error.hpp"\r
 #include "util.hpp"\r
 \r
 namespace wm {\r
 \r
-class Screen : public rectangle {\r
+class Screen {\r
+  public:\r
+    Screen(unsigned w, unsigned h) : _width(w), _height(h){}\r
+    unsigned width() { return _width; }\r
+    unsigned height() { return _height; }\r
+  private:\r
+    unsigned _width;\r
+    unsigned _height;\r
+    unsigned _pysical_width = 0;\r
+    unsigned _pysical_height = 0;\r
+};\r
 \r
+class LayerControlCallbacks {\r
+  public:\r
+    LayerControlCallbacks() {};\r
+    virtual ~LayerControlCallbacks() = default;\r
+    LayerControlCallbacks(const LayerControlCallbacks &obj) = default;\r
+\r
+    // callback functions\r
+    virtual void test(unsigned i) { HMI_DEBUG("test %d", i); }\r
+    std::function<void(unsigned)> surfaceCreated;\r
+    /* std::function<void(unsigned)> surfaceDestroyed;\r
+    std::function<void(unsigned)> layerCreated;\r
+    std::function<void(unsigned)> layerDestroyed; */\r
 };\r
 \r
 class WMLayer;\r
+class LayerState;\r
+class WMAction;\r
+class WMClient;\r
+\r
 class LayerControl\r
 {\r
   public:\r
     explicit LayerControl(const std::string& root);\r
     ~LayerControl() = default;\r
-    WMError init();\r
-    unsigned getNewLayerID(const std::string& role);\r
+    WMError init(const LayerControlCallbacks& cb);\r
+    void createNewLayer(unsigned id);\r
+    unsigned getNewLayerID(const std::string& role, std::string* layer_name);\r
+    struct rect getAreaSize(const std::string& area);\r
+    void setupArea(double scaling);\r
+    Screen getScreenInfo();\r
+    double scale();\r
     // void setRenderOrder(const std::vector<unsigned> layer_render_order);\r
     // std::vector<unsigned> getAllRenderOrder();\r
     // std::vector<std::shared_ptr<WMLayer>>& getAllLayers();\r
     // std::vector<unsigned> getRenderOrder(const std::string& layer_name);\r
-    WMError updateLayer(WMLayer& wm_layer);\r
-    void commitChange();\r
+    WMError updateLayer(LayerState& layer_state);\r
+    WMError commitChange();\r
     void undoUpdate();\r
+    WMError layoutChange(const WMAction& action);\r
+    WMError visibilityChange(const WMAction &action);\r
 \r
     // Don't use this function.\r
-    void dispatchILMEvent(ilmObjectType object, t_ilm_uint id, t_ilm_bool created);\r
+    void dispatchCreateEvent(ilmObjectType object, unsigned id, bool created);\r
+    void dispatchPropertyChangeEvent(unsigned id, struct ilmSurfaceProperties*, t_ilm_notification_mask);\r
+    void dispatchPropertyChangeEvent(unsigned id, struct ilmLayerProperties*, t_ilm_notification_mask);\r
   private:\r
+    WMError makeVisible(const std::shared_ptr<WMClient> client);\r
+    WMError makeInvisible(const std::shared_ptr<WMClient> client);\r
     WMError loadLayerSetting(const std::string& path);\r
     WMError loadAreaDb(const std::string& path);\r
+\r
     std::vector<std::shared_ptr<WMLayer>> wm_layers;\r
     std::unordered_map<std::string, struct rect> area2size;\r
     unsigned screenID;\r
     struct ilmScreenProperties screen_prop;\r
+    double scaling;\r
+    LayerControlCallbacks cb;\r
 };\r
 \r
 } // namespace wm
\ No newline at end of file