[mutter] clutter/stage: Avoid duplicating code for capturing
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] clutter/stage: Avoid duplicating code for capturing
- Date: Fri, 1 Mar 2019 18:07:56 +0000 (UTC)
commit baf98bb205c5228a8249c7dc8218ed9248b46266
Author: Marco Trevisan (Treviño) <mail 3v1n0 net>
Date: Fri Jan 26 13:29:55 2018 +0100
clutter/stage: Avoid duplicating code for capturing
https://bugzilla.gnome.org/show_bug.cgi?id=765011
https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
clutter/clutter/clutter-stage.c | 40 ++++++++--------------------------------
1 file changed, 8 insertions(+), 32 deletions(-)
---
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 6ad803acb..c39753f51 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -202,6 +202,12 @@ static const ClutterColor default_stage_color = { 255, 255, 255, 255 };
static void clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage);
static void free_queue_redraw_entry (ClutterStageQueueRedrawEntry *entry);
+static void capture_view_into (ClutterStage *stage,
+ gboolean paint,
+ ClutterStageView *view,
+ cairo_rectangle_int_t *rect,
+ uint8_t *data,
+ int stride);
static void clutter_container_iface_init (ClutterContainerIface *iface);
@@ -4759,28 +4765,15 @@ capture_view (ClutterStage *stage,
ClutterStageView *view,
ClutterCapture *capture)
{
- CoglFramebuffer *framebuffer;
- ClutterBackend *backend;
- CoglContext *context;
cairo_surface_t *image;
uint8_t *data;
int stride;
- CoglBitmap *bitmap;
- cairo_rectangle_int_t view_layout;
cairo_rectangle_int_t *rect;
float view_scale;
float texture_width;
float texture_height;
rect = &capture->rect;
- framebuffer = clutter_stage_view_get_framebuffer (view);
-
- if (paint)
- {
- cogl_push_framebuffer (framebuffer);
- _clutter_stage_maybe_setup_viewport (stage, view);
- clutter_stage_do_paint_view (stage, view, rect);
- }
view_scale = clutter_stage_view_get_scale (view);
texture_width = roundf (rect->width * view_scale);
@@ -4789,31 +4782,14 @@ capture_view (ClutterStage *stage,
texture_width, texture_height);
cairo_surface_set_device_scale (image, view_scale, view_scale);
+
data = cairo_image_surface_get_data (image);
stride = cairo_image_surface_get_stride (image);
- backend = clutter_get_default_backend ();
- context = clutter_backend_get_cogl_context (backend);
- bitmap = cogl_bitmap_new_for_data (context, texture_width, texture_height,
- CLUTTER_CAIRO_FORMAT_ARGB32,
- stride,
- data);
-
- clutter_stage_view_get_layout (view, &view_layout);
-
- cogl_framebuffer_read_pixels_into_bitmap (framebuffer,
- roundf ((rect->x - view_layout.x) * view_scale),
- roundf ((rect->y - view_layout.y) * view_scale),
- COGL_READ_PIXELS_COLOR_BUFFER,
- bitmap);
-
- if (paint)
- cogl_pop_framebuffer ();
-
+ capture_view_into (stage, paint, view, rect, data, stride);
capture->image = image;
cairo_surface_mark_dirty (capture->image);
- cogl_object_unref (bitmap);
}
gboolean
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]