Fix layer can't go to center
authorKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Sat, 8 Sep 2018 10:12:23 +0000 (19:12 +0900)
committerKazumasa Mitsunari <knimitz@witz-inc.co.jp>
Sat, 8 Sep 2018 10:12:23 +0000 (19:12 +0900)
Signed-off-by: Kazumasa Mitsunari <knimitz@witz-inc.co.jp>
src/window_manager.cpp
src/wm_layer_control.cpp
src/wm_layer_control.hpp

index 5b7f5d8..acf3b76 100644 (file)
@@ -201,7 +201,7 @@ int WindowManager::init()
               css_bg.w, css_bg.h, dp_bg.left(), dp_bg.top(), dp_bg.width(), dp_bg.height());
 
     double scale = static_cast<double>(dp_bg.height()) / css_bg.h;
-    this->lc->setupArea(scale);
+    this->lc->setupArea(dp_bg, scale);
 
     /* this->display->add_global_handler(
         "wl_output", [this](wl_registry *r, uint32_t name, uint32_t v) {
index 0632085..5319b2e 100644 (file)
@@ -160,7 +160,7 @@ struct rect LayerControl::getAreaSize(const std::string& area)
     return area2size[area];
 }
 
-void LayerControl::setupArea(double scaling)
+void LayerControl::setupArea(const rectangle& base_rct, double scaling)
 {
     struct rect rct;
     this->scaling = scaling;
@@ -171,8 +171,8 @@ void LayerControl::setupArea(double scaling)
 
     for (auto &i : this->area2size)
     {
-        i.second.x = static_cast<int>(scaling * i.second.x + 0.5);
-        i.second.y = static_cast<int>(scaling * i.second.y + 0.5);
+        i.second.x = base_rct.left() + static_cast<int>(scaling * i.second.x + 0.5);
+        i.second.y = base_rct.top() + static_cast<int>(scaling * i.second.y + 0.5);
         i.second.w = static_cast<int>(scaling * i.second.w + 0.5);
         i.second.h = static_cast<int>(scaling * i.second.h + 0.5);
 
@@ -357,6 +357,7 @@ WMError LayerControl::layoutChange(const WMAction& action)
     // Layout Manager
     // WMError ret = this->setLayerSize(layer, action.area);
     auto rect = this->getAreaSize(action.area);
+    HMI_DEBUG("Set layout %d, %d, %d, %d",rect.x, rect.y, rect.w, rect.h);
     ilmErrorTypes err = ilm_layerSetDestinationRectangle(layer, rect.x, rect.y, rect.w, rect.h);
     for(auto &wm_layer: this->wm_layers)
     {
index df6c863..503ec3b 100644 (file)
@@ -66,7 +66,7 @@ class LayerControl
     std::shared_ptr<WMLayer> getWMLayer(unsigned layer);
     // std::shared_ptr<WMLayer> getWMLayer(std::string layer_name);
     struct rect getAreaSize(const std::string& area);
-    void setupArea(double scaling);
+    void setupArea(const rectangle& base_rct, double scaling);
     Screen getScreenInfo();
     double scale();
     // void setRenderOrder(const std::vector<unsigned> layer_render_order);