From e3edb081269e8db42d8e8e4cc497ddd2bd0109f2 Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Fri, 18 Aug 2017 19:31:16 -0400 Subject: bring output configuration into shared.h --- examples/shared.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'examples/shared.c') diff --git a/examples/shared.c b/examples/shared.c index f89c9e3c..255652c7 100644 --- a/examples/shared.c +++ b/examples/shared.c @@ -6,12 +6,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include "shared.h" @@ -110,6 +112,52 @@ void example_config_destroy(struct example_config *config) { free(config); } +struct wlr_output_layout *configure_layout(struct example_config *config, struct wl_list *outputs) { + struct wlr_output_layout *layout = wlr_output_layout_init(); + int max_x = INT_MIN; + int max_x_y = INT_MIN; // y value for the max_x output + + // first add all the configured outputs + struct output_state *output; + wl_list_for_each(output, outputs, link) { + struct output_config *conf; + wl_list_for_each(conf, &config->outputs, link) { + if (strcmp(conf->name, output->output->name) == 0) { + wlr_output_layout_add(layout, output->output, + conf->x, conf->y); + wlr_output_transform(output->output, conf->transform); + int width, height; + wlr_output_effective_resolution(output->output, &width, &height); + if (conf->x + width > max_x) { + max_x = conf->x + width; + max_x_y = conf->y; + } + break; + } + } + } + + if (max_x == INT_MIN) { + // couldn't find a configured output + max_x = 0; + max_x_y = 0; + } + + // now add all the other configured outputs in a sensible position + wl_list_for_each(output, outputs, link) { + if (wlr_output_layout_get(layout, output->output)) { + continue; + } + wlr_output_layout_add(layout, output->output, max_x, max_x_y); + int width, height; + wlr_output_effective_resolution(output->output, &width, &height); + max_x += width; + } + + return layout; +} + + static void keyboard_led_update(struct keyboard_state *kbstate) { uint32_t leds = 0; for (uint32_t i = 0; i < WLR_LED_LAST; ++i) { -- cgit v1.2.3