Add background layer for CES DEMO 59/12559/1
authorYuta Doi <yuta-d@witz-inc.co.jp>
Thu, 14 Dec 2017 06:03:45 +0000 (15:03 +0900)
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>
Thu, 14 Dec 2017 06:39:50 +0000 (06:39 +0000)
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>
layers.json
src/app.cpp
src/app.hpp

index 98d69e0..7ee3e21 100644 (file)
@@ -7,6 +7,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",
index 82701b7..9ddfde4 100644 (file)
@@ -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);
    }
index 59f3104..ee4e732 100644 (file)
@@ -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;