Update wm_layer
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Sat, 8 Sep 2018 06:28:36 +0000 (15:28 +0900)
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Sat, 8 Sep 2018 06:29:08 +0000 (15:29 +0900)
* add getUuid
* add getWMLayer

Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
src/wm_layer.cpp
src/wm_layer.hpp
src/wm_layer_control.cpp
src/wm_layer_control.hpp

index 1948b61..01e8950 100644 (file)
@@ -82,7 +82,7 @@ void LayerState::setArea(const string& app, const string& area)
     this->area2appid[area] = app;
 }
 
-WMLayer::WMLayer(json_object* j) : tmp_state(), state()
+WMLayer::WMLayer(json_object* j, unsigned uuid) : tmp_state(), state(), uuid(uuid)
 {
     this->name = jh::getStringFromJson(j, "name");
     this->role_list = jh::getStringFromJson(j, "role");
@@ -166,6 +166,11 @@ WMError WMLayer::setLayerState(const LayerState& l)
     return WMError::SUCCESS;
 }
 
+void WMLayer::addLayer(unsigned layer)
+{
+    this->tmp_state.addLayer(layer);
+}
+
 void WMLayer::appendArea(const string& area)
 {
     this->area_list.push_back(area);
@@ -203,12 +208,13 @@ bool WMLayer::hasRole(const string& role)
     return false;
 }
 
-/* WMError WMLayer::commitChange()
+WMError WMLayer::commitChange()
 {
     this->state = this->tmp_state;
+    return WMError::SUCCESS;
 }
 
-void WMLayer::undo()
+/* void WMLayer::undo()
 {
     this->tmp_state = this->state;
 }
index b14be46..4002c4b 100644 (file)
@@ -56,11 +56,14 @@ class WMLayer
         STACK
     };
 
-    explicit WMLayer(json_object* j);
+    explicit WMLayer(json_object* j, unsigned uuid);
     ~WMLayer() = default;
+
+    // Status & Setting API
     unsigned getNewLayerID(const std::string& role);
     unsigned idBegin() { return this->id_begin; }
     unsigned idEnd()   { return this->id_end; }
+    unsigned getUuid() { return this->uuid; }
     const std::string& layerName();
     MANAGEMENT_TYPE    layerType() { return this->type; }
     void appendArea(const std::string& area);
@@ -69,9 +72,15 @@ class WMLayer
     WMError setLayerState(const LayerState& l);
     bool hasLayerID(unsigned id);
     bool hasRole(const std::string& role);
+
+    // Manipulation
+    void addLayer(unsigned layer);
+    WMError commitChange();
+
   private:
     LayerState tmp_state;
     LayerState state;
+    unsigned uuid;
     std::string name = ""; // Layer name
     MANAGEMENT_TYPE type;
     std::string role_list;
index e0800f8..1d591f0 100644 (file)
@@ -125,8 +125,11 @@ void LayerControl::createNewLayer(unsigned id)
     ilm_layerSetSourceRectangle(id, rct.x, rct.y, rct.w, rct.h);
     //ilm_layerSetDestinationRectangle(id, rct.x, rct.y, rct.w, rct.h);
     ilm_layerSetOpacity(id, 1.0);
-    ilm_layerSetVisibility(id, ILM_TRUE);
+    ilm_layerSetVisibility(id, ILM_FALSE);
     ilm_commitChanges();
+    auto wm_layer = getWMLayer(id);
+    wm_layer->addLayer(id);
+    this->commitChange();
 }
 
 unsigned LayerControl::getNewLayerID(const string& role, string* layer_name)
@@ -138,12 +141,20 @@ unsigned LayerControl::getNewLayerID(const string& role, string* layer_name)
         if(ret != 0)
         {
             *layer_name = l->layerName();
+            unsigned uid = l->getUuid();
+            this->lid2wmlid[ret] = uid;
             break;
         }
     }
     return ret;
 }
 
+shared_ptr<WMLayer> LayerControl::getWMLayer(unsigned layer)
+{
+    unsigned uuid = this->lid2wmlid[layer];
+    return this->wm_layers[uuid];
+}
+
 struct rect LayerControl::getAreaSize(const std::string& area)
 {
     return area2size[area];
@@ -219,6 +230,7 @@ WMError LayerControl::commitChange()
         this->undoUpdate();
         rc = WMError::FAIL;
     }
+    ilm_commitChanges();
     delete id_array;
     return rc;
 }
@@ -252,8 +264,9 @@ WMError LayerControl::loadLayerSetting(const string &path)
         json_object *json_tmp = json_object_array_get_idx(json_cfg, i);
         HMI_DEBUG("> json_tmp dump:%s", json_object_get_string(json_tmp));
 
-        this->wm_layers.emplace_back(std::make_shared<WMLayer>(json_tmp));
+        this->wm_layers.emplace_back(std::make_shared<WMLayer>(json_tmp, i));
     }
+    json_object_put(json_obj);
 
     return WMError::SUCCESS;
 }
@@ -394,6 +407,7 @@ void LayerControl::dispatchCreateEvent(ilmObjectType object, unsigned id, bool c
             this->cb.surfaceCreated(sp.creatorPid, id);
             ilm_surfaceAddNotification(id, surfaceCallback_static);
             ilm_surfaceSetSourceRectangle(id, 0, 0, sp.origSourceWidth, sp.origSourceHeight);
+            ilm_surfaceSetVisibility(id, ILM_TRUE);
         }
         else
         {
index 0be06c2..df6c863 100644 (file)
@@ -63,6 +63,8 @@ class LayerControl
     WMError init(const LayerControlCallbacks& cb);
     void createNewLayer(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(double scaling);
     Screen getScreenInfo();
@@ -73,6 +75,7 @@ class LayerControl
     // std::vector<unsigned> getRenderOrder(const std::string& layer_name);
     WMError updateLayer(LayerState& layer_state);
     WMError commitChange();
+    // WMError renderWMLayers();
     void undoUpdate();
     WMError layoutChange(const WMAction& action);
     WMError visibilityChange(const WMAction &action);
@@ -88,6 +91,7 @@ class LayerControl
     WMError loadAreaDb(const std::string& path);
 
     std::vector<std::shared_ptr<WMLayer>> wm_layers;
+    std::unordered_map<unsigned, unsigned> lid2wmlid;
     std::unordered_map<std::string, struct rect> area2size;
     unsigned screenID;
     struct ilmScreenProperties screen_prop;