summaryrefslogtreecommitdiffstats
path: root/src/main.cpp
diff options
context:
space:
mode:
authorYuta Doi <yuta-d@witz-inc.co.jp>2017-12-22 21:00:10 +0900
committerYuta Doi <yuta-d@witz-inc.co.jp>2018-02-09 21:42:49 +0900
commite890bc6f1880c8b8a439692ea85c2f3992b99c15 (patch)
tree42a42be3979b6e2a6e21ae1e9d69998bea5e490a /src/main.cpp
parenta94f6c67c67a68df8a894699686f2eaa8e870208 (diff)
Add APIs which can get information about the display and the surface area
getDisplayInfo() can get the display information as follows: - width[pixel] - height[pixel] - width[mm] - height[mm] NOTE: It uses wl_output::geometry() for getting physical width[mm] and height[mm] of the display, but the value is different with measured value. value from wl_output::geometry(): width:320 height:520 measured value : width:193 height:343 getAreaInfo() can get the information of area drawn by the application as follows: - x-coordinate - y-coordinate - width - height The details are described in doc/ApplicationGuide.md. Bug-AGL: SPEC-1087 Change-Id: I9e6d64ff04e0845b83c69db374d06af17a6d6b66 Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 8e252d4..fd96d33 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -373,6 +373,65 @@ void windowmanager_enddraw(afb_req req) noexcept {
}
+void windowmanager_getdisplayinfo_thunk(afb_req req) noexcept {
+ std::lock_guard<std::mutex> guard(binding_m);
+ #ifdef ST
+ ST();
+ #endif
+ if (g_afb_instance == nullptr) {
+ afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?");
+ return;
+ }
+
+ try {
+ auto ret = g_afb_instance->app.api_get_display_info();
+ if (ret.is_err()) {
+ afb_req_fail(req, "failed", ret.unwrap_err());
+ return;
+ }
+
+ afb_req_success(req, ret.unwrap(), "success");
+ } catch (std::exception &e) {
+ afb_req_fail_f(req, "failed", "Uncaught exception while calling getdisplayinfo: %s", e.what());
+ return;
+ }
+
+}
+
+void windowmanager_getareainfo_thunk(afb_req req) noexcept {
+ std::lock_guard<std::mutex> guard(binding_m);
+ #ifdef ST
+ ST();
+ #endif
+ if (g_afb_instance == nullptr) {
+ afb_req_fail(req, "failed", "Binding not initialized, did the compositor die?");
+ return;
+ }
+
+ try {
+ json_object *jreq = afb_req_json(req);
+
+ json_object *j_drawing_name = nullptr;
+ if (! json_object_object_get_ex(jreq, "drawing_name", &j_drawing_name)) {
+ afb_req_fail(req, "failed", "Need char const* argument drawing_name");
+ return;
+ }
+ char const* a_drawing_name = json_object_get_string(j_drawing_name);
+
+ auto ret = g_afb_instance->app.api_get_area_info(a_drawing_name);
+ if (ret.is_err()) {
+ afb_req_fail(req, "failed", ret.unwrap_err());
+ return;
+ }
+
+ afb_req_success(req, ret.unwrap(), "success");
+ } catch (std::exception &e) {
+ afb_req_fail_f(req, "failed", "Uncaught exception while calling getareainfo: %s", e.what());
+ return;
+ }
+
+}
+
void windowmanager_wm_subscribe(afb_req req) noexcept {
std::lock_guard<std::mutex> guard(binding_m);
#ifdef ST
@@ -562,6 +621,8 @@ const struct afb_verb_v2 windowmanager_verbs[] = {
{ "activatesurface", windowmanager_activatesurface, nullptr, nullptr, AFB_SESSION_NONE },
{ "deactivatesurface", windowmanager_deactivatesurface, nullptr, nullptr, AFB_SESSION_NONE },
{ "enddraw", windowmanager_enddraw, nullptr, nullptr, AFB_SESSION_NONE },
+ { "getdisplayinfo", windowmanager_getdisplayinfo_thunk, nullptr, nullptr, AFB_SESSION_NONE },
+ { "getareainfo", windowmanager_getareainfo_thunk, nullptr, nullptr, AFB_SESSION_NONE },
{ "wm_subscribe", windowmanager_wm_subscribe, nullptr, nullptr, AFB_SESSION_NONE },
{ "list_drawing_names", windowmanager_list_drawing_names, nullptr, nullptr, AFB_SESSION_NONE },
{ "ping", windowmanager_ping, nullptr, nullptr, AFB_SESSION_NONE },