[PATCH weston 4/4] compositor: Implement horizontal output layout configuration
Pekka Paalanen
ppaalanen at gmail.com
Fri Oct 7 10:19:03 UTC 2016
On Fri, 30 Sep 2016 23:25:30 +0200
Armin Krezović <krezovic.armin at gmail.com> wrote:
> This patch adds horizontal output layout configuration using
> the previously added code.
>
> When an output is added, it looks for outputs that it should
> be placed next to, if they are specified. If such output is
> found, output layout is updated if needed (outputs on a given
> position are moved right if they collide with the new output)
> and the output is positioned next to the specified output,
> either on its left or its right.
>
> If a certain position wasn't specified for the current output,
> the compositor looks for any existing outputs that have
> current output specified on that position, and updates the
> positions accordingly, if corresponding output is found.
>
> Output positions can only be set once, where config file
> specified option is always set, even if such output will
> never be present. If a certain position wasn't set, the
> compositor may update the position if it finds another
> output that wants to be placed next to the output that's
> being configured. In such case, first existing output that
> matches the position is picked up, rest is ignored.
>
> Default behaviour is still to place outputs that have
> no matching configuration top right.
>
> Signed-off-by: Armin Krezović <krezovic.armin at gmail.com>
> ---
> compositor/main.c | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 153 insertions(+), 6 deletions(-)
>
> diff --git a/compositor/main.c b/compositor/main.c
> index e379d8d..c039ae6 100644
> --- a/compositor/main.c
> +++ b/compositor/main.c
> @@ -480,20 +480,167 @@ wet_init_parsed_options(struct weston_compositor *ec)
> return config;
> }
>
> +static struct wet_output *
> +wet_output_from_output(struct wet_compositor *compositor, struct weston_output *output)
> +{
> + struct wet_output *iterator, *next;
> +
> + if (wl_list_empty(&compositor->output_layout_list))
> + return NULL;
> +
> + wl_list_for_each_safe(iterator, next, &compositor->output_layout_list, link) {
> + if (iterator->output == output)
> + return iterator;
> + }
Hi,
wet_output uses a destroy listener on the output, so use that:
listener = wl_signal_get(&output->destroy_signal, handle_output_destroy);
wet_output = container_of(...);
> +
> + return NULL;
> +}
> +
> +static struct wet_output *
> +wet_output_from_name(struct wet_compositor *compositor, const char *name)
> +{
> + struct wet_output *iterator, *next;
> +
> + if (wl_list_empty(&compositor->output_layout_list))
> + return NULL;
> +
> + wl_list_for_each_safe(iterator, next, &compositor->output_layout_list, link) {
> + if (!strcmp(iterator->output->name, name))
> + return iterator;
> + }
No need to check for empty list, and no need to use _safe. Applies
probably to all loop below, too.
> +
> + return NULL;
> +}
> +
I kind of wonder how much sense it makes to do first just 1-D layout
and then later expand to 2-D layout. I fear the code re-use might be
non-existant.
If you are struggling with 2-D layout, maybe X.org could provide some
example?
I do not have a suggestion for a good layout algorithm or even a method
of description. People have been configuring X.org for ages, so
something similar might be familiar.
Positioning by absolute coordinates I would like to leave out if
possible, or at least you would need to check that:
- all outputs create a single connected region (so pointers can travel
everywhere)
- no outputs overlap (IIRC this is a limitation of Weston's damage
tracking)
Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20161007/25fe77bf/attachment-0001.sig>
More information about the wayland-devel
mailing list