app: surfaces on layer != 1000 leave a 100pixel top and bottom margin
[staging/windowmanager.git] / src / app.cpp
index 96394c3..58a62ee 100644 (file)
@@ -18,6 +18,8 @@
 
 #include <fstream>
 #include <json.hpp>
+#include <bits/signum.h>
+#include <csignal>
 
 namespace wm {
 
@@ -192,12 +194,13 @@ int App::init_layout() {
    // Quick and dirty setup of layers
    // XXX: This likely needs to be sorted by order (note, we don't (yet?)
    // do any zorder arrangement).
-   for (auto const &i: this->surface2layer.mapping) {
+   for (auto const &i : this->surface2layer.mapping) {
       c->layer_create(i.layer_id, o->width, o->height);
       auto &l = layers[i.layer_id];
       l->set_destination_rectangle(0, 0, o->width, o->height);
       l->set_visibility(1);
-      logdebug("Setting up layer %s (%d) for surfaces %d-%d", i.name.c_str(), i.layer_id, i.id_min, i.id_max);
+      logdebug("Setting up layer %s (%d) for surfaces %d-%d", i.name.c_str(),
+               i.layer_id, i.id_min, i.id_max);
    }
 
    // Add layers to screen (XXX: are they sorted correctly?)
@@ -210,6 +213,12 @@ int App::init_layout() {
    return 0;
 }
 
+//                      _          _   _____                 _
+//  _ __  _ __ _____  _(_) ___  __| | | ____|_   _____ _ __ | |_ ___
+// | '_ \| '__/ _ \ \/ / |/ _ \/ _` | |  _| \ \ / / _ \ '_ \| __/ __|
+// | |_) | | | (_) >  <| |  __/ (_| | | |___ \ V /  __/ | | | |_\__ \
+// | .__/|_|  \___/_/\_\_|\___|\__,_| |_____| \_/ \___|_| |_|\__|___/
+// |_|
 void App::surface_created(uint32_t surface_id) {
    DB("surface_id is " << surface_id);
    int layer_id =
@@ -219,13 +228,26 @@ void App::surface_created(uint32_t surface_id) {
                surface_id);
    } else {
       this->controller->add_task(
-         "fullscreen surface", [layer_id, surface_id](struct genivi::controller *c) {
+         "fullscreen surface",
+         [layer_id, surface_id](struct genivi::controller *c) {
             auto &s = c->surfaces[surface_id];
-            s->set_destination_rectangle(0, 0, c->output_size.w,
-                                         c->output_size.h);
+            // s->set_destination_rectangle(0, 0, c->output_size.w, c->output_size.h);
+            // s->set_source_rectangle(0, 100, c->output_size.w, c->output_size.h - 200);
+            if (layer_id != 1000) {
+               // s->set_source_rectangle(0, 0, c->output_size.w, c->output_size.h - 200);
+               s->set_configuration(c->output_size.w, c->output_size.h - 200);
+               s->set_destination_rectangle(0, 100, c->output_size.w,
+                                            c->output_size.h - 200);
+            } else {
+               // s->set_source_rectangle(0, 0, c->output_size.w, c->output_size.h);
+               s->set_configuration(c->output_size.w, c->output_size.h);
+               s->set_destination_rectangle(0, 0, c->output_size.w,
+                                            c->output_size.h);
+            }
             s->set_visibility(1);
             c->layers[layer_id]->add_surface(s.get());
-            logdebug("Surface %u now fullscreen on layer %u", surface_id, layer_id);
+            logdebug("Surface %u now on layer %u", surface_id,
+                     layer_id);
          });
    }
 }
@@ -273,6 +295,12 @@ binding_api::result_type binding_api::debug_status() {
    return Ok(jr);
 }
 
+binding_api::result_type binding_api::debug_terminate() {
+   logdebug("%s", __func__);
+   raise(SIGKILL);  // XXX afb-daemon kills it's pgroup using TERM, which doesn't play well with perf
+   return Ok(json_object_new_object());
+}
+
 //                  _             _ _            _                 _
 //   ___ ___  _ __ | |_ _ __ ___ | | | ___ _ __ | |__   ___   ___ | | _____
 //  / __/ _ \| '_ \| __| '__/ _ \| | |/ _ \ '__|| '_ \ / _ \ / _ \| |/ / __|