[PATCH] Add a weston_surface_set_size function

Jason Ekstrand jason at jlekstrand.net
Wed Dec 4 18:32:03 PST 2013


Surfaces that are created by clients get their size automatically updated
by the attach/commit.  Surfaces created directly by shells (such as black
surfaces) sometimes need to be manually resized.  This function allows you
to do that while being somewhat less messy than messing with the internals
of weston_surface manually.

Signed-off-by: Jason Ekstrand <jason at jlekstrand.net>
---
 desktop-shell/shell.c |  9 +++------
 src/compositor.c      | 15 +++++++++++----
 src/compositor.h      |  4 ++++
 3 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index de54e37..56e0338 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -504,8 +504,7 @@ create_focus_surface(struct weston_compositor *ec,
 	fsurf->view = weston_view_create (surface);
 	fsurf->view->output = output;
 
-	surface->width = output->width;
-	surface->height = output->height;
+	weston_surface_set_size(surface, output->width, output->height);
 	weston_view_set_position(fsurf->view, output->x, output->y);
 	weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1.0);
 	pixman_region32_fini(&surface->opaque);
@@ -2452,8 +2451,7 @@ create_black_surface(struct weston_compositor *ec,
 	pixman_region32_fini(&surface->input);
 	pixman_region32_init_rect(&surface->input, 0, 0, w, h);
 
-	surface->width = w;
-	surface->height = h;
+	weston_surface_set_size(surface, w, y);
 	weston_view_set_position(view, x, y);
 
 	return view;
@@ -4585,8 +4583,7 @@ shell_fade_create_surface(struct desktop_shell *shell)
 		return NULL;
 	}
 
-	surface->width = 8192;
-	surface->height = 8192;
+	weston_surface_set_size(surface, 8192, 8192);
 	weston_view_set_position(view, 0, 0);
 	weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1.0);
 	wl_list_insert(&compositor->fade_layer.view_list,
diff --git a/src/compositor.c b/src/compositor.c
index 8f4bdef..97c42b3 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1133,8 +1133,7 @@ weston_surface_is_mapped(struct weston_surface *surface)
 }
 
 static void
-weston_surface_set_size(struct weston_surface *surface,
-			int32_t width, int32_t height)
+surface_set_size(struct weston_surface *surface, int32_t width, int32_t height)
 {
 	struct weston_view *view;
 
@@ -1148,13 +1147,21 @@ weston_surface_set_size(struct weston_surface *surface,
 		weston_view_geometry_dirty(view);
 }
 
+WL_EXPORT void
+weston_surface_set_size(struct weston_surface *surface,
+			int32_t width, int32_t height)
+{
+	assert(!surface->resource);
+	surface_set_size(surface, width, height);
+}
+
 static void
 weston_surface_set_size_from_buffer(struct weston_surface *surface)
 {
 	int32_t width, height;
 
 	if (!surface->buffer_ref.buffer) {
-		weston_surface_set_size(surface, 0, 0);
+		surface_set_size(surface, 0, 0);
 		return;
 	}
 
@@ -1174,7 +1181,7 @@ weston_surface_set_size_from_buffer(struct weston_surface *surface)
 
 	width = width / surface->buffer_viewport.scale;
 	height = height / surface->buffer_viewport.scale;
-	weston_surface_set_size(surface, width, height);
+	surface_set_size(surface, width, height);
 }
 
 WL_EXPORT uint32_t
diff --git a/src/compositor.h b/src/compositor.h
index 6bd637e..9f89d00 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -1138,6 +1138,10 @@ weston_view_schedule_repaint(struct weston_view *view);
 int
 weston_surface_is_mapped(struct weston_surface *surface);
 
+WL_EXPORT void
+weston_surface_set_size(struct weston_surface *surface,
+			int32_t width, int32_t height);
+
 void
 weston_surface_schedule_repaint(struct weston_surface *surface);
 
-- 
1.8.4.2



More information about the wayland-devel mailing list