ipc: add output modes

This commit is contained in:
emersion 2018-03-12 13:48:42 +01:00
parent 3035db74df
commit 4ab5506064
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
2 changed files with 38 additions and 2 deletions

View file

@ -78,6 +78,20 @@ static void ipc_json_describe_output(swayc_t *container, json_object *object) {
json_object_new_string(ipc_json_get_output_transform(wlr_output->transform))); json_object_new_string(ipc_json_get_output_transform(wlr_output->transform)));
// TODO WLR need to set "current_workspace" to the currently focused // TODO WLR need to set "current_workspace" to the currently focused
// workspace in a way that makes sense with multiseat // workspace in a way that makes sense with multiseat
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_array_add(modes_array, mode_object);
}
json_object_object_add(object, "modes", modes_array);
} }
static void ipc_json_describe_workspace(swayc_t *workspace, json_object *object) { static void ipc_json_describe_workspace(swayc_t *workspace, json_object *object) {

View file

@ -125,13 +125,16 @@ static void pretty_print_output(json_object *o) {
json_object_object_get_ex(rect, "y", &y); json_object_object_get_ex(rect, "y", &y);
json_object_object_get_ex(rect, "width", &width); json_object_object_get_ex(rect, "width", &width);
json_object_object_get_ex(rect, "height", &height); json_object_object_get_ex(rect, "height", &height);
json_object *modes;
json_object_object_get_ex(o, "modes", &modes);
printf( printf(
"Output %s '%s %s %s'%s%s\n" "Output %s '%s %s %s'%s%s\n"
" Mode: %dx%d @ %f Hz\n" " Current mode: %dx%d @ %f Hz\n"
" Position: %d,%d\n" " Position: %d,%d\n"
" Scale factor: %dx\n" " Scale factor: %dx\n"
" Transform: %s\n" " Transform: %s\n"
" Workspace: %s\n\n", " Workspace: %s\n",
json_object_get_string(name), json_object_get_string(name),
json_object_get_string(make), json_object_get_string(make),
json_object_get_string(model), json_object_get_string(model),
@ -145,6 +148,25 @@ static void pretty_print_output(json_object *o) {
json_object_get_string(transform), json_object_get_string(transform),
json_object_get_string(ws) json_object_get_string(ws)
); );
size_t modes_len = json_object_array_length(modes);
if (modes_len > 0) {
printf(" Available modes:\n");
for (size_t i = 0; i < modes_len; ++i) {
json_object *mode = json_object_array_get_idx(modes, i);
json_object *mode_width, *mode_height, *mode_refresh;
json_object_object_get_ex(mode, "width", &mode_width);
json_object_object_get_ex(mode, "height", &mode_height);
json_object_object_get_ex(mode, "refresh", &mode_refresh);
printf(" %dx%d @ %f Hz\n", json_object_get_int(mode_width),
json_object_get_int(mode_height),
(float)json_object_get_int(mode_refresh) / 1000);
}
}
printf("\n");
} }
static void pretty_print_version(json_object *v) { static void pretty_print_version(json_object *v) {