diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/app.cpp | 2 | ||||
-rw-r--r-- | src/layers.cpp | 55 | ||||
-rw-r--r-- | src/layers.hpp | 5 |
3 files changed, 62 insertions, 0 deletions
diff --git a/src/app.cpp b/src/app.cpp index f09f6f5..8b2229c 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -261,6 +261,8 @@ int App::init_layers() this->layout_commit(); + this->layers.setupArea(o->width, o->height); + return 0; } diff --git a/src/layers.cpp b/src/layers.cpp index 92c19bf..e3ff30c 100644 --- a/src/layers.cpp +++ b/src/layers.cpp @@ -191,4 +191,59 @@ json layer_map::to_json() const return j; } +void layer_map::setupArea(int output_w, int output_h) +{ + compositor::rect rct; + // setup normal.full + std::string area = "normal.full"; + std::string role = "Fallback"; + auto l_id = this->get_layer_id(role); + auto l = this->get_layer(*l_id); + rct = l->rect; + if(rct.w < 0) + rct.w = output_w + 1 + rct.w; + if(rct.h < 0) + rct.h = output_h + 1 + rct.h; + this->area2size[area] = rct; + this->area2size["normalfull"] = rct; + this->area2size["normal"] = rct; + + // setup split.main + area = "split.main"; + rct.h = rct.h / 2; + this->area2size[area] = rct; + + // setup split.sub + area = "split.sub"; + rct.y = rct.y + rct.h; + this->area2size[area] = rct; + + // setup homescreen + area = "fullscreen"; + role = "HomeScreen"; + rct = compositor::full_rect; + if (rct.w <= 0) + rct.w = output_w + rct.w + 1; + if (rct.h <= 0) + rct.h = output_h + rct.h + 1; + this->area2size[area] = rct; + + // setup onscreen + area = "on_screen"; + role = "OnScreen"; + auto ons_id = this->get_layer_id(role); + auto l_ons = this->get_layer(*ons_id); + rct = l_ons->rect; + if (rct.w < 0) + rct.w = output_w + 1 + rct.w; + if (rct.h < 0) + rct.h = output_h + 1 + rct.h; + this->area2size[area] = rct; +} + +compositor::rect layer_map::getAreaSize(const std::string &area) +{ + return area2size[area]; +} + } // namespace wm diff --git a/src/layers.hpp b/src/layers.hpp index e4160a5..a8ab2cc 100644 --- a/src/layers.hpp +++ b/src/layers.hpp @@ -114,6 +114,11 @@ struct layer_map } json to_json() const; + void setupArea(int output_w, int output_h); + compositor::rect getAreaSize(const std::string &area); + + private: + std::unordered_map<std::string, compositor::rect> area2size; }; struct result<struct layer_map> to_layer_map(nlohmann::json const &j); |