aboutsummaryrefslogtreecommitdiff
path: root/sway
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2022-09-22 17:38:14 +0200
committerSimon Ser <contact@emersion.fr>2022-10-03 13:35:52 +0200
commitf70d1e1b959d218378cb786bcaeb44ea9ed05aa2 (patch)
treee36c41233b20861e920387bed0b019340c0ff05b /sway
parentb0fc83485d2abec617a1ca352d4aa057f66c488f (diff)
ipc: expose mode picture aspect ratio
Diffstat (limited to 'sway')
-rw-r--r--sway/ipc-json.c62
1 files changed, 48 insertions, 14 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 763fb3fe..61613f53 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -116,6 +116,39 @@ static const char *ipc_json_output_adaptive_sync_status_description(
return NULL;
}
+static const char *ipc_json_output_mode_aspect_ratio_description(
+ enum wlr_output_mode_aspect_ratio aspect_ratio) {
+ switch (aspect_ratio) {
+ case WLR_OUTPUT_MODE_ASPECT_RATIO_NONE:
+ return "none";
+ case WLR_OUTPUT_MODE_ASPECT_RATIO_4_3:
+ return "4:3";
+ case WLR_OUTPUT_MODE_ASPECT_RATIO_16_9:
+ return "16:9";
+ case WLR_OUTPUT_MODE_ASPECT_RATIO_64_27:
+ return "64:27";
+ case WLR_OUTPUT_MODE_ASPECT_RATIO_256_135:
+ return "256:135";
+ }
+ return NULL;
+}
+
+static json_object *ipc_json_output_mode_description(
+ const struct wlr_output_mode *mode) {
+ const char *pic_ar =
+ ipc_json_output_mode_aspect_ratio_description(mode->picture_aspect_ratio);
+ json_object *mode_object = json_object_new_object();
+ json_object_object_add(mode_object, "width",
+ json_object_new_int(mode->width));
+ json_object_object_add(mode_object, "height",
+ json_object_new_int(mode->height));
+ json_object_object_add(mode_object, "refresh",
+ json_object_new_int(mode->refresh));
+ json_object_object_add(mode_object, "picture_aspect_ratio",
+ json_object_new_string(pic_ar));
+ return mode_object;
+}
+
#if HAVE_XWAYLAND
static const char *ipc_json_xwindow_type_description(struct sway_view *view) {
struct wlr_xwayland_surface *surface = view->wlr_xwayland_surface;
@@ -308,25 +341,26 @@ static void ipc_json_describe_enabled_output(struct sway_output *output,
json_object *modes_array = json_object_new_array();
struct wlr_output_mode *mode;
wl_list_for_each(mode, &wlr_output->modes, link) {
- json_object *mode_object = json_object_new_object();
- json_object_object_add(mode_object, "width",
- json_object_new_int(mode->width));
- json_object_object_add(mode_object, "height",
- json_object_new_int(mode->height));
- json_object_object_add(mode_object, "refresh",
- json_object_new_int(mode->refresh));
+ json_object *mode_object =
+ ipc_json_output_mode_description(mode);
json_object_array_add(modes_array, mode_object);
}
json_object_object_add(object, "modes", modes_array);
- json_object *current_mode_object = json_object_new_object();
- json_object_object_add(current_mode_object, "width",
- json_object_new_int(wlr_output->width));
- json_object_object_add(current_mode_object, "height",
- json_object_new_int(wlr_output->height));
- json_object_object_add(current_mode_object, "refresh",
- json_object_new_int(wlr_output->refresh));
+ json_object *current_mode_object;
+ if (wlr_output->current_mode != NULL) {
+ current_mode_object =
+ ipc_json_output_mode_description(wlr_output->current_mode);
+ } else {
+ current_mode_object = json_object_new_object();
+ json_object_object_add(current_mode_object, "width",
+ json_object_new_int(wlr_output->width));
+ json_object_object_add(current_mode_object, "height",
+ json_object_new_int(wlr_output->height));
+ json_object_object_add(current_mode_object, "refresh",
+ json_object_new_int(wlr_output->refresh));
+ }
json_object_object_add(object, "current_mode", current_mode_object);
struct sway_node *parent = node_get_parent(&output->node);