From 628df48e0238391658dab54f81dfa1c62dbfb3ec Mon Sep 17 00:00:00 2001 From: Marcus Fritzsch Date: Tue, 11 Jul 2017 15:18:42 +0200 Subject: [PATCH] main/app: started to move things to app Started implementing App, as the actual implementation, that is, to pull out all the stuff that is actually the application and only have glue code reside in main. Signed-off-by: Marcus Fritzsch --- src/CMakeLists.txt | 2 +- src/app.cpp | 30 ++++++++++++++++++++++++++++++ src/app.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 7 +++++++ 4 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 src/app.cpp create mode 100644 src/app.hpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 62bdc9f..15ecc3c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -13,7 +13,7 @@ add_library(winman MODULE wayland.hpp util.cpp util.hpp - ${IVI_CON_PROTO} json_helper.cpp json_helper.hpp) + ${IVI_CON_PROTO} json_helper.cpp json_helper.hpp app.hpp app.cpp) target_include_directories(winman PRIVATE diff --git a/src/app.cpp b/src/app.cpp new file mode 100644 index 0000000..5da4f9d --- /dev/null +++ b/src/app.cpp @@ -0,0 +1,30 @@ +// +// Created by mfritzsc on 7/11/17. +// + +#include "app.hpp" + +namespace wm { + + App::App() + : api{this} + {} + + result App::API::register_surface(uint32_t appid, + uint32_t surfid) { + return Err("not implemented"); + } + + result App::API::debug_layers() const { + return Err("not implemented"); + } + + result App::API::debug_surfaces() const { + return Err("not implemented"); + } + + result App::API::debug_status() const { + return Err("not implemented"); + } + +} // namespace wm \ No newline at end of file diff --git a/src/app.hpp b/src/app.hpp new file mode 100644 index 0000000..a3108b3 --- /dev/null +++ b/src/app.hpp @@ -0,0 +1,52 @@ +// +// Created by mfritzsc on 7/11/17. +// + +#ifndef TMCAGLWM_APP_HPP +#define TMCAGLWM_APP_HPP + +#include +#include + +namespace wm { + + using std::experimental::optional; + using std::experimental::nullopt; + + template + struct result { + optional e; + optional t; + + bool is_ok() const { return this->t != nullopt; } + bool is_err() const { return this->e != nullopt; } + T unwrap() { return this->t.value(); } + }; + + template + struct result Err(E e) { return result{e, nullopt}; } + + template + struct result Ok(T t) { return result{nullopt, t}; } + + using json = nlohmann::json; + + struct App { + struct API { + struct App *app; + + result debug_status() const; + result debug_layers() const; + result debug_surfaces() const; + + result register_surface(uint32_t appid, uint32_t surfid); + }; + + struct API api; + + App(); + }; + +} // namespace wm + +#endif //TMCAGLWM_APP_HPP diff --git a/src/main.cpp b/src/main.cpp index 4593f22..5c9df33 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,7 @@ #include "json_helper.hpp" #include "util.hpp" #include "wayland.hpp" +#include "app.hpp" #include #include @@ -211,6 +212,12 @@ void debug_status(struct afb_req req) { // Quick and dirty, dump current surfaces and layers AFB_REQ_DEBUG(req, "status"); + // auto r = g_afb_instance->app.api.debug_status(); + // if (r.is_err()) { + // afb_req_fail(req, "failed", r.e.value()); + // return; + // } + auto o = json_object_new_object(); json_object_object_add(o, "surfaces", to_json(g_afb_instance->controller->sprops)); -- 2.16.6