From: Pekka Paalanen <[email protected]>

Signed-off-by: Pekka Paalanen <[email protected]>
---
 src/pixman-renderer.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)

diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
index 530e2ed..21c610e 100644
--- a/src/pixman-renderer.c
+++ b/src/pixman-renderer.c
@@ -1,6 +1,7 @@
 /*
  * Copyright © 2012 Intel Corporation
  * Copyright © 2013 Vasily Khoruzhick <[email protected]>
+ * Copyright © 2015 Collabora, Ltd.
  *
  * Permission to use, copy, modify, distribute, and sell this software and
  * its documentation for any purpose is hereby granted without fee, provided
@@ -676,6 +677,52 @@ pixman_renderer_destroy(struct weston_compositor *ec)
 }
 
 static void
+pixman_renderer_surface_get_content_size(struct weston_surface *surface,
+                                        int *width, int *height)
+{
+       struct pixman_surface_state *ps = get_surface_state(surface);
+
+       if (ps->image) {
+               *width = pixman_image_get_width(ps->image);
+               *height = pixman_image_get_height(ps->image);
+       } else {
+               *width = 0;
+               *height = 0;
+       }
+}
+
+static int
+pixman_renderer_surface_copy_content(struct weston_surface *surface,
+                                    void *target, size_t stride, size_t size,
+                                    int src_x, int src_y,
+                                    int width, int height,
+                                    pixman_format_code_t format)
+{
+       struct pixman_surface_state *ps = get_surface_state(surface);
+       pixman_image_t *out_buf;
+
+       if (!ps->image)
+               return -1;
+
+       out_buf = pixman_image_create_bits(format, width, height,
+                                          target, stride);
+
+       pixman_image_set_transform(ps->image, NULL);
+       pixman_image_composite32(PIXMAN_OP_SRC,
+                                ps->image,    /* src */
+                                NULL,         /* mask */
+                                out_buf,      /* dest */
+                                src_x, src_y, /* src_x, src_y */
+                                0, 0,         /* mask_x, mask_y */
+                                0, 0,         /* dest_x, dest_y */
+                                width, height);
+
+       pixman_image_unref(out_buf);
+
+       return 0;
+}
+
+static void
 debug_binding(struct weston_seat *seat, uint32_t time, uint32_t key,
              void *data)
 {
@@ -713,6 +760,10 @@ pixman_renderer_init(struct weston_compositor *ec)
        renderer->base.attach = pixman_renderer_attach;
        renderer->base.surface_set_color = pixman_renderer_surface_set_color;
        renderer->base.destroy = pixman_renderer_destroy;
+       renderer->base.surface_get_content_size =
+               pixman_renderer_surface_get_content_size;
+       renderer->base.surface_copy_content =
+               pixman_renderer_surface_copy_content;
        ec->renderer = &renderer->base;
        ec->capabilities |= WESTON_CAP_ROTATION_ANY;
        ec->capabilities |= WESTON_CAP_CAPTURE_YFLIP;
-- 
2.0.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to