From 2f2639950dec4b97984fd6776a850e5d4703ef52 Mon Sep 17 00:00:00 2001 From: Kazumasa Mitsunari Date: Sat, 8 Sep 2018 15:28:36 +0900 Subject: Update wm_layer * add getUuid * add getWMLayer Signed-off-by: Kazumasa Mitsunari --- src/wm_layer.cpp | 12 +++++++++--- src/wm_layer.hpp | 11 ++++++++++- src/wm_layer_control.cpp | 18 ++++++++++++++++-- src/wm_layer_control.hpp | 4 ++++ 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/wm_layer.cpp b/src/wm_layer.cpp index 1948b61..01e8950 100644 --- a/src/wm_layer.cpp +++ b/src/wm_layer.cpp @@ -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; } diff --git a/src/wm_layer.hpp b/src/wm_layer.hpp index b14be46..4002c4b 100644 --- a/src/wm_layer.hpp +++ b/src/wm_layer.hpp @@ -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; diff --git a/src/wm_layer_control.cpp b/src/wm_layer_control.cpp index e0800f8..1d591f0 100644 --- a/src/wm_layer_control.cpp +++ b/src/wm_layer_control.cpp @@ -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 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(json_tmp)); + this->wm_layers.emplace_back(std::make_shared(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 { diff --git a/src/wm_layer_control.hpp b/src/wm_layer_control.hpp index 0be06c2..df6c863 100644 --- a/src/wm_layer_control.hpp +++ b/src/wm_layer_control.hpp @@ -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 getWMLayer(unsigned layer); + // std::shared_ptr 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 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> wm_layers; + std::unordered_map lid2wmlid; std::unordered_map area2size; unsigned screenID; struct ilmScreenProperties screen_prop; -- cgit 1.2.3-korg