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");
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);
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;
}
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);
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;
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)
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];
this->undoUpdate();
rc = WMError::FAIL;
}
+ ilm_commitChanges();
delete id_array;
return rc;
}
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;
}
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
{
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();
// 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);
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;