summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuta Doi <yuta-d@witz-inc.co.jp>2017-12-14 15:03:45 +0900
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2017-12-14 06:39:50 +0000
commit25abec6a1ff6661283976f202f1ac43b2eb4f455 (patch)
tree333cd39e9f6cf3966647028bfd1d08e2ca355a6f
parentd6cd19121e0821cf40633533ae22c93c88f9e33b (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.json7
-rw-r--r--src/app.cpp58
-rw-r--r--src/app.hpp3
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;