diff options
author | Yuta Doi <yuta-d@witz-inc.co.jp> | 2017-12-14 15:03:45 +0900 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2017-12-14 06:39:50 +0000 |
commit | 25abec6a1ff6661283976f202f1ac43b2eb4f455 (patch) | |
tree | 333cd39e9f6cf3966647028bfd1d08e2ca355a6f | |
parent | d6cd19121e0821cf40633533ae22c93c88f9e33b (diff) |
Add background layer for CES DEMO
MediaPlayer and Radio can not sound
when their surface have visibility=0.
And Navigation can not be displayed correctly
when the application is switched from visibility=0 to 1.
Because when visibility=0, weston event can not be catched.
So when the applications is not displayed,
they have visibility=1 and are moved to background layer.
Change-Id: Idf236e703a1e74cf564a1b213e6e15fcfa42a29e
Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
-rw-r--r-- | layers.json | 7 | ||||
-rw-r--r-- | src/app.cpp | 58 | ||||
-rw-r--r-- | src/app.hpp | 3 |
3 files changed, 67 insertions, 1 deletions
diff --git a/layers.json b/layers.json index 98d69e0..7ee3e21 100644 --- a/layers.json +++ b/layers.json @@ -8,6 +8,13 @@ "mappings": [ { + "role": "BackGroundLayer", + "name": "BackGroundLayer", + "layer_id": 999, + "area": { "type": "rect", "rect": { "x": 0, "y": 218, "width": -1, "height": -433 } }, + "comment": "Single BackGround layer map for the Navigation, Radio and MediaPlayer" + }, + { "role": "^HomeScreen$", "name": "HomeScreen", "layer_id": 1000, diff --git a/src/app.cpp b/src/app.cpp index 82701b7..9ddfde4 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -724,6 +724,35 @@ void App::activate(int id) { this->controller->surfaces[id]->set_visibility(1); char const *label = this->lookup_name(id).value_or("unknown-name").c_str(); + + // FOR CES DEMO >>> + if ((0 == strcmp(label, "Radio")) + || (0 == strcmp(label, "MediaPlayer")) + || (0 == strcmp(label, "Navigation"))) { + for (auto i = surface_bg.begin(); i != surface_bg.end(); ++i) { + if (id == *i) { + // Remove id + this->surface_bg.erase(i); + + // Remove from BG layer (999) + HMI_DEBUG("wm", "Remove %s(%d) from BG layer", label, id); + this->controller->layers[999]->remove_surface( + this->controller->surfaces[id].get()); + + // Add to FG layer (1001) + HMI_DEBUG("wm", "Add %s(%d) to FG layer", label, id); + this->controller->layers[1001]->add_surface( + this->controller->surfaces[id].get()); + + for (int j : this->surface_bg) { + HMI_DEBUG("wm", "Stored id:%d", j); + } + break; + } + } + } + // <<< FOR CES DEMO + this->emit_visible(label); this->emit_activated(label); } @@ -732,9 +761,36 @@ void App::activate(int id) { void App::deactivate(int id) { auto ip = this->controller->sprops.find(id); if (ip != this->controller->sprops.end() && ip->second.visibility != 0) { - this->controller->surfaces[id]->set_visibility(0); char const *label = this->lookup_name(id).value_or("unknown-name").c_str(); + + // FOR CES DEMO >>> + if ((0 == strcmp(label, "Radio")) + || (0 == strcmp(label, "MediaPlayer")) + || (0 == strcmp(label, "Navigation"))) { + + // Store id + this->surface_bg.push_back(id); + + // Remove from FG layer (1001) + HMI_DEBUG("wm", "Remove %s(%d) from FG layer", label, id); + this->controller->layers[1001]->remove_surface( + this->controller->surfaces[id].get()); + + // Add to BG layer (999) + HMI_DEBUG("wm", "Add %s(%d) to BG layer", label, id); + this->controller->layers[999]->add_surface( + this->controller->surfaces[id].get()); + + for (int j : surface_bg) { + HMI_DEBUG("wm", "Stored id:%d", j); + } + } + else { + this->controller->surfaces[id]->set_visibility(0); + } + // <<< FOR CES DEMO + this->emit_deactivated(label); this->emit_invisible(label); } diff --git a/src/app.hpp b/src/app.hpp index 59f3104..ee4e732 100644 --- a/src/app.hpp +++ b/src/app.hpp @@ -170,6 +170,9 @@ struct App { std::map<const char *, struct afb_event> map_afb_event; + // FOR CES DEMO + std::vector<int> surface_bg; + explicit App(wl::display *d); ~App() = default; |