X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwm_client.cpp;h=356cd6f49f346190d21d64f8e2f2745488140265;hb=d2c062959c55c61a4e350f6df480d46d2a8d769c;hp=baed82814767e0df95d18972b1d2432e648f5c5a;hpb=516f8db80ee3c9d935c9f42468d9bdd6a05b67de;p=apps%2Fagl-service-windowmanager.git diff --git a/src/wm_client.cpp b/src/wm_client.cpp index baed828..356cd6f 100644 --- a/src/wm_client.cpp +++ b/src/wm_client.cpp @@ -18,6 +18,8 @@ #include "wm_client.hpp" #include "util.hpp" #include +#include + #define INVALID_SURFACE_ID 0 @@ -96,27 +98,6 @@ string WMClient::appID() const return this->id; } -unsigned WMClient::surfaceID(const string &role) const -{ - if (0 == this->role2surface.count(role)) - { - return INVALID_SURFACE_ID; - } - return this->role2surface.at(role); -} - -std::string WMClient::role(unsigned surface) const -{ - for(const auto& x : this->role2surface) - { - if(x.second == surface) - { - return x.first; - } - } - return std::string(""); -} - string WMClient::role() const { return this->main_role; @@ -132,41 +113,14 @@ unsigned WMClient::surfaceID() const return this->surface; } -void WMClient::setRole(const string& role) -{ - this->role_list.clear(); - this->role_list.push_back(role); -} - -void WMClient::appendRole(const string& role) -{ - this->role_list.push_back(role); -} - /** - * Add the pair of role and surface to the client + * Add surface to the client * - * This function set the pair of role and surface to the client. - * This function is used for the client which has multi surfaces. - * If the model and relationship for role and surface(layer) - * is changed, this function will be changed - * Current Window Manager doesn't use this function. + * This function add main surface to the client(ivi_layer). * * @param string[in] role - * @param unsigned[in] surface - * @return true + * @return WMError */ -/* bool WMClient::addSurface(const string &role, unsigned surface) -{ - HMI_DEBUG("Add role %s with surface %d", role.c_str(), surface); - if (0 != this->role2surface.count(role)) - { - HMI_NOTICE("override surfaceID %d with %d", this->role2surface[role], surface); - } - this->role2surface[role] = surface; - return true; -} */ - WMError WMClient::addSurface(unsigned surface) { this->surface = surface; @@ -185,29 +139,76 @@ bool WMClient::removeSurfaceIfExist(unsigned surface) if(surface == this->surface) { this->surface = INVALID_SURFACE_ID; - return true; + ret = true; } - for (auto &x : this->role2surface) + return ret; +} + +WMError WMClient::setRenderOrder(const vector &order) +{ + WMError ret = WMError::SUCCESS; + this->surface_render_order.clear(); + for(const auto& x : order) { - if (surface == x.second) + unsigned s; // surface + if(x == this->role()) { - HMI_INFO("Remove surface from client %s: role %s, surface: %d", - this->id.c_str(), x.first.c_str(), x.second); - this->role2surface.erase(x.first); - ret = true; + s = this->surfaceID(); + } + else if(this->service2surfaces.count(x) != 0) + { + s = this->service2surfaces[x]; + } + else + { + ret = WMError::NOT_REGISTERED; break; } + this->surface_render_order.push_back(s); + } + if(ret == WMError::SUCCESS) + { + int count = 0; + t_ilm_layer* id_array = new t_ilm_surface[this->surface_render_order.size()]; + if(id_array == nullptr) + { + HMI_WARNING("short memory"); + ret = WMError::FAIL; + } + else + { + for(const auto& i : this->surface_render_order) + { + id_array[count] = i; + ++count; + } + ilm_layerSetRenderOrder(this->layerID(), + id_array, this->surface_render_order.size()); + delete id_array; + } } return ret; } -bool WMClient::removeRole(const string &role) +string WMClient::attachTmpServiceSurface(const string& supplier, const string& service_surface) { - bool ret = false; - if (this->role2surface.count(role) != 0) + string uuid; + uuid_t u; + char out[37]; // uuid is 36 characters + uuid_generate_random(u); + uuid_unparse(u, out); + uuid = out; + this->service2supplier.emplace(service_surface, supplier); + return uuid; +} + +WMError WMClient::attachServiceSurface(const string& service_surface, unsigned surface) +{ + WMError ret = WMError::NOT_REGISTERED; + if(this->service2supplier.count(service_surface) != 0) { - this->role2surface.erase(role); - ret = true; + this->service2surfaces.emplace(service_surface, surface); + ret = WMError::SUCCESS; } return ret; } @@ -251,10 +252,7 @@ void WMClient::dumpInfo() { DUMP("APPID : %s", id.c_str()); DUMP(" LAYER : %d", layer); - for (const auto &x : this->role2surface) - { - DUMP(" ROLE : %s , SURFACE : %d", x.first.c_str(), x.second); - } + DUMP(" ROLE : %s , SURFACE : %d", main_role.c_str(), surface); } } // namespace wm \ No newline at end of file