window: Set egl_window_resize late and once

Previously we resized in attach_surface and create_surface.
THe second resize overwrote dx or dy from the first.
This commit is contained in:
Benjamin Franzke 2011-06-23 12:10:51 +02:00
parent d4af320178
commit 14f7ff91ad
1 changed files with 24 additions and 16 deletions

View File

@ -680,6 +680,23 @@ free_surface(void *data)
window_attach_surface(window);
}
static void
window_get_resize_dx_dy(struct window *window, int *x, int *y)
{
if (window->resize_edges & WINDOW_RESIZING_LEFT)
*x = window->server_allocation.width - window->allocation.width;
else
*x = 0;
if (window->resize_edges & WINDOW_RESIZING_TOP)
*y = window->server_allocation.height -
window->allocation.height;
else
*y = 0;
window->resize_edges = 0;
}
static void
window_attach_surface(struct window *window)
{
@ -687,27 +704,12 @@ window_attach_surface(struct window *window)
struct wl_buffer *buffer;
struct egl_window_surface_data *data;
int32_t x, y;
int width = window->allocation.width;
int height = window->allocation.height;
if (window->resize_edges & WINDOW_RESIZING_LEFT)
x = window->server_allocation.width - width;
else
x = 0;
if (window->resize_edges & WINDOW_RESIZING_TOP)
y = window->server_allocation.height - height;
else
y = 0;
window->resize_edges = 0;
switch (window->buffer_type) {
case WINDOW_BUFFER_TYPE_EGL_WINDOW:
data = cairo_surface_get_user_data(window->cairo_surface,
&surface_data_key);
wl_egl_window_resize(data->window, width, height, x, y);
cairo_gl_surface_swapbuffers(window->cairo_surface);
wl_egl_window_get_attached_size(data->window,
&window->server_allocation.width,
@ -715,6 +717,8 @@ window_attach_surface(struct window *window)
break;
case WINDOW_BUFFER_TYPE_EGL_IMAGE:
case WINDOW_BUFFER_TYPE_SHM:
window_get_resize_dx_dy(window, &x, &y);
if (window->pending_surface != NULL)
return;
@ -781,13 +785,17 @@ static void
window_resize_cairo_window_surface(struct window *window)
{
struct egl_window_surface_data *data;
int x, y;
data = cairo_surface_get_user_data(window->cairo_surface,
&surface_data_key);
window_get_resize_dx_dy(window, &x, &y),
wl_egl_window_resize(data->window,
window->allocation.width,
window->allocation.height, 0, 0);
window->allocation.height,
x,y);
cairo_gl_surface_set_size(window->cairo_surface,
window->allocation.width,
window->allocation.height);