From: Ander Conselvan de Oliveira <[email protected]>
Move the code for choosing the x and y of an output out of the backend into weston_output_init(). All the backends implement the same simple behavior, so this lets that code be in just one place. Signed-off-by: Ander Conselvan de Oliveira <[email protected]> --- src/compositor-drm.c | 24 ++++-------------------- src/compositor-fbdev.c | 2 +- src/compositor-headless.c | 2 +- src/compositor-rpi.c | 2 +- src/compositor-wayland.c | 22 +++++++++------------- src/compositor-x11.c | 14 +++++--------- src/compositor.c | 20 ++++++++++++++++---- src/compositor.h | 2 +- 8 files changed, 38 insertions(+), 50 deletions(-) diff --git a/src/compositor-drm.c b/src/compositor-drm.c index a1f653c..57064ec 100644 --- a/src/compositor-drm.c +++ b/src/compositor-drm.c @@ -1871,7 +1871,7 @@ static int create_output_for_connector(struct drm_compositor *ec, drmModeRes *resources, drmModeConnector *connector, - int x, int y, struct udev_device *drm_device) + struct udev_device *drm_device) { struct drm_output *output; struct drm_mode *drm_mode, *next, *preferred, *current, *configured, *best; @@ -2024,7 +2024,7 @@ create_output_for_connector(struct drm_compositor *ec, output->base.current_mode->flags |= WL_OUTPUT_MODE_CURRENT; - weston_output_init(&output->base, &ec->base, x, y, + weston_output_init(&output->base, &ec->base, connector->mmWidth, connector->mmHeight, transform, scale); @@ -2179,7 +2179,6 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector, drmModeConnector *connector; drmModeRes *resources; int i; - int x = 0, y = 0; resources = drmModeGetResources(ec->drm.fd); if (!resources) { @@ -2211,15 +2210,11 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector, (option_connector == 0 || connector->connector_id == option_connector)) { if (create_output_for_connector(ec, resources, - connector, x, y, + connector, drm_device) < 0) { drmModeFreeConnector(connector); continue; } - - x += container_of(ec->base.output_list.prev, - struct weston_output, - link)->width; } drmModeFreeConnector(connector); @@ -2242,7 +2237,6 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device) drmModeConnector *connector; drmModeRes *resources; struct drm_output *output, *next; - int x = 0, y = 0; uint32_t connected = 0, disconnects = 0; int i; @@ -2268,18 +2262,8 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device) connected |= (1 << connector_id); if (!(ec->connector_allocator & (1 << connector_id))) { - struct weston_output *last = - container_of(ec->base.output_list.prev, - struct weston_output, link); - - /* XXX: not yet needed, we die with 0 outputs */ - if (!wl_list_empty(&ec->base.output_list)) - x = last->x + last->width; - else - x = 0; - y = 0; create_output_for_connector(ec, resources, - connector, x, y, + connector, drm_device); weston_log("connector %d connected\n", connector_id); diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c index 0d96269..076a9a8 100644 --- a/src/compositor-fbdev.c +++ b/src/compositor-fbdev.c @@ -555,7 +555,7 @@ fbdev_output_create(struct fbdev_compositor *compositor, output->base.model = output->fb_info.id; weston_output_init(&output->base, &compositor->base, - 0, 0, output->fb_info.width_mm, + output->fb_info.width_mm, output->fb_info.height_mm, WL_OUTPUT_TRANSFORM_NORMAL, 1); diff --git a/src/compositor-headless.c b/src/compositor-headless.c index 4ecb8d4..326c11b 100644 --- a/src/compositor-headless.c +++ b/src/compositor-headless.c @@ -108,7 +108,7 @@ headless_compositor_create_output(struct headless_compositor *c, wl_list_insert(&output->base.mode_list, &output->mode.link); output->base.current_mode = &output->mode; - weston_output_init(&output->base, &c->base, 0, 0, width, height, + weston_output_init(&output->base, &c->base, width, height, WL_OUTPUT_TRANSFORM_NORMAL, 1); output->base.make = "weston"; diff --git a/src/compositor-rpi.c b/src/compositor-rpi.c index e7c0e0d..7312822 100644 --- a/src/compositor-rpi.c +++ b/src/compositor-rpi.c @@ -381,7 +381,7 @@ rpi_output_create(struct rpi_compositor *compositor, uint32_t transform) mm_height = modeinfo.height * (25.4f / 96.0f); weston_output_init(&output->base, &compositor->base, - 0, 0, round(mm_width), round(mm_height), + round(mm_width), round(mm_height), transform, 1); if (rpi_renderer_output_create(&output->base, output->display) < 0) diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index 899c329..9e94a7b 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -748,15 +748,14 @@ wayland_output_set_fullscreen(struct wayland_output *output, } static struct wayland_output * -wayland_output_create(struct wayland_compositor *c, int x, int y, +wayland_output_create(struct wayland_compositor *c, int width, int height, const char *name, int fullscreen, uint32_t transform, int32_t scale) { struct wayland_output *output; int output_width, output_height; - weston_log("Creating %dx%d wayland output at (%d, %d)\n", - width, height, x, y); + weston_log("Creating %dx%d wayland output\n", width, height); output = zalloc(sizeof *output); if (output == NULL) @@ -807,7 +806,7 @@ wayland_output_create(struct wayland_compositor *c, int x, int y, wl_list_init(&output->shm.buffers); wl_list_init(&output->shm.free_buffers); - weston_output_init(&output->base, &c->base, x, y, width, height, + weston_output_init(&output->base, &c->base, width, height, transform, scale); if (c->use_pixman) { @@ -849,7 +848,7 @@ static struct wayland_output * wayland_output_create_for_config(struct wayland_compositor *c, struct weston_config_section *config_section, int option_width, int option_height, - int option_scale, int32_t x, int32_t y) + int option_scale) { struct wayland_output *output; char *mode, *t, *name, *str; @@ -914,7 +913,7 @@ wayland_output_create_for_config(struct wayland_compositor *c, weston_log("Invalid transform \"%s\" for output %s\n", t, name); free(t); - output = wayland_output_create(c, x, y, width, height, name, 0, + output = wayland_output_create(c, width, height, name, 0, transform, scale); free(name); @@ -1578,7 +1577,7 @@ backend_init(struct wl_display *display, int *argc, char *argv[], struct wayland_compositor *c; struct wayland_output *output; struct weston_config_section *section; - int x, count, width, height, scale, use_pixman, fullscreen; + int count, width, height, scale, use_pixman, fullscreen; const char *section_name, *display_name; char *name; @@ -1608,7 +1607,7 @@ backend_init(struct wl_display *display, int *argc, char *argv[], return NULL; if (fullscreen) { - output = wayland_output_create(c, 0, 0, width, height, + output = wayland_output_create(c, width, height, NULL, 1, 0, 1); if (!output) goto err_outputs; @@ -1618,7 +1617,6 @@ backend_init(struct wl_display *display, int *argc, char *argv[], } section = NULL; - x = 0; while (weston_config_next_section(config, §ion, §ion_name)) { if (!section_name || strcmp(section_name, "output") != 0) continue; @@ -1633,13 +1631,12 @@ backend_init(struct wl_display *display, int *argc, char *argv[], free(name); output = wayland_output_create_for_config(c, section, width, - height, scale, x, 0); + height, scale); if (!output) goto err_outputs; if (wayland_output_set_windowed(output)) goto err_outputs; - x += output->base.width; --count; } @@ -1650,14 +1647,13 @@ backend_init(struct wl_display *display, int *argc, char *argv[], if (!scale) scale = 1; while (count > 0) { - output = wayland_output_create(c, x, 0, width, height, + output = wayland_output_create(c, width, height, NULL, 0, 0, scale); if (!output) goto err_outputs; if (wayland_output_set_windowed(output)) goto err_outputs; - x += width; --count; } diff --git a/src/compositor-x11.c b/src/compositor-x11.c index 6b5eb64..01af835 100644 --- a/src/compositor-x11.c +++ b/src/compositor-x11.c @@ -748,7 +748,7 @@ x11_output_init_shm(struct x11_compositor *c, struct x11_output *output, } static struct x11_output * -x11_compositor_create_output(struct x11_compositor *c, int x, int y, +x11_compositor_create_output(struct x11_compositor *c, int width, int height, int fullscreen, int no_input, char *configured_name, uint32_t transform, int32_t scale) @@ -876,7 +876,7 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y, output->base.name = strdup(configured_name); weston_output_init(&output->base, &c->base, - x, y, width, height, transform, scale); + width, height, transform, scale); if (c->use_pixman) { if (x11_output_init_shm(c, output, @@ -1477,7 +1477,7 @@ x11_compositor_create(struct wl_display *display, struct x11_output *output; struct weston_config_section *section; xcb_screen_iterator_t s; - int i, x = 0, output_count = 0; + int i, output_count = 0; int width, height, count, scale; const char *section_name; char *name, *t, *mode; @@ -1568,28 +1568,24 @@ x11_compositor_create(struct wl_display *display, transform = parse_transform(t, name); free(t); - output = x11_compositor_create_output(c, x, 0, - width, height, + output = x11_compositor_create_output(c, width, height, fullscreen, no_input, name, transform, scale); free(name); if (output == NULL) goto err_x11_input; - x = pixman_region32_extents(&output->base.region)->x2; - output_count++; if (option_count && output_count >= option_count) break; } for (i = output_count; i < count; i++) { - output = x11_compositor_create_output(c, x, 0, width, height, + output = x11_compositor_create_output(c, width, height, fullscreen, no_input, NULL, WL_OUTPUT_TRANSFORM_NORMAL, 1); if (output == NULL) goto err_x11_input; - x = pixman_region32_extents(&output->base.region)->x2; } c->xcb_source = diff --git a/src/compositor.c b/src/compositor.c index 7c29d51..51f2fae 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -3259,12 +3259,24 @@ weston_output_move(struct weston_output *output, int x, int y) WL_EXPORT void weston_output_init(struct weston_output *output, struct weston_compositor *c, - int x, int y, int mm_width, int mm_height, uint32_t transform, + int mm_width, int mm_height, uint32_t transform, int32_t scale) { + struct weston_output *last; + + /* Find the position for this output */ + if (!wl_list_empty(&c->output_list)) { + last = container_of(c->output_list.prev, + struct weston_output, link); + + output->x = last->x + last->width; + output->y = 0; + } else { + output->x = 0; + output->y = 0; + } + output->compositor = c; - output->x = x; - output->y = y; output->mm_width = mm_width; output->mm_height = mm_height; output->dirty = 1; @@ -3273,7 +3285,7 @@ weston_output_init(struct weston_output *output, struct weston_compositor *c, weston_output_transform_scale_init(output, transform, scale); weston_output_init_zoom(output); - weston_output_init_geometry(output, x, y); + weston_output_init_geometry(output, output->x, output->y); weston_output_damage(output); wl_signal_init(&output->frame_signal); diff --git a/src/compositor.h b/src/compositor.h index 8fb8afb..e3412a1 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -1210,7 +1210,7 @@ void weston_output_move(struct weston_output *output, int x, int y); void weston_output_init(struct weston_output *output, struct weston_compositor *c, - int x, int y, int width, int height, uint32_t transform, int32_t scale); + int width, int height, uint32_t transform, int32_t scale); void weston_output_destroy(struct weston_output *output); void -- 1.8.3.2 _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
