From 655b4a9c75fe8b92b3b789f5f512b18c179a09d6 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Mon, 4 Sep 2023 16:30:38 +0200 Subject: [PATCH] Port to MtkRegion Part-of: --- clutter/clutter/clutter-damage-history.c | 12 +- clutter/clutter/clutter-damage-history.h | 8 +- clutter/clutter/clutter-mutter.h | 2 +- .../clutter/clutter-paint-context-private.h | 8 +- clutter/clutter/clutter-paint-context.c | 24 +-- clutter/clutter/clutter-paint-context.h | 8 +- clutter/clutter/clutter-pick-stack-private.h | 2 +- clutter/clutter/clutter-pick-stack.c | 26 ++- clutter/clutter/clutter-stage-private.h | 10 +- clutter/clutter/clutter-stage-view-private.h | 12 +- clutter/clutter/clutter-stage-view.c | 115 ++++++------- clutter/clutter/clutter-stage.c | 86 +++++----- clutter/clutter/clutter-stage.h | 8 +- cogl/cogl/cogl-clip-stack.c | 10 +- cogl/cogl/cogl-clip-stack.h | 6 +- cogl/cogl/cogl-framebuffer.c | 2 +- cogl/cogl/cogl-framebuffer.h | 4 +- cogl/cogl/driver/gl/cogl-clip-stack-gl.c | 8 +- src/backends/meta-pointer-constraint.c | 12 +- src/backends/meta-pointer-constraint.h | 6 +- .../meta-screen-cast-area-stream-src.c | 28 ++-- .../meta-screen-cast-monitor-stream-src.c | 20 +-- src/backends/meta-screen-cast-stream-src.c | 16 +- src/backends/meta-screen-cast-stream-src.h | 4 +- .../meta-screen-cast-virtual-stream-src.c | 10 +- src/backends/meta-stage-impl-private.h | 2 - src/backends/meta-stage-impl.c | 134 +++++++-------- src/backends/meta-stage-private.h | 10 +- src/backends/meta-stage-view-private.h | 2 - src/backends/meta-stage.c | 20 +-- src/backends/native/meta-backend-native.c | 2 +- .../native/meta-pointer-constraint-native.c | 29 ++-- .../native/meta-pointer-constraint-native.h | 2 +- src/compositor/compositor.c | 14 +- .../meta-background-actor-private.h | 2 +- src/compositor/meta-background-actor.c | 12 +- .../meta-background-content-private.h | 6 +- src/compositor/meta-background-content.c | 69 ++++---- src/compositor/meta-background-group.c | 8 +- src/compositor/meta-cullable.c | 38 ++--- src/compositor/meta-cullable.h | 24 +-- src/compositor/meta-shadow-factory.c | 68 ++++---- src/compositor/meta-shaped-texture-private.h | 6 +- src/compositor/meta-shaped-texture.c | 72 ++++---- src/compositor/meta-surface-actor.c | 133 +++++++-------- src/compositor/meta-surface-actor.h | 6 +- src/compositor/meta-window-actor-wayland.c | 28 ++-- src/compositor/meta-window-actor-x11.c | 140 ++++++++-------- src/compositor/meta-window-group.c | 14 +- src/compositor/meta-window-shape.c | 16 +- src/compositor/region-utils.c | 156 +++++++++--------- src/compositor/region-utils.h | 48 +++--- src/core/frame.c | 25 ++- src/core/frame.h | 8 +- src/core/window-private.h | 8 +- src/core/window.c | 24 +-- src/meta/meta-shadow-factory.h | 20 +-- src/meta/meta-window-shape.h | 9 +- src/meta/window.h | 3 +- .../clutter/conform/actor-shader-effect.c | 2 +- src/tests/meta-ref-test.c | 10 +- src/tests/native-kms-render.c | 4 +- .../meta-pointer-confinement-wayland.c | 15 +- src/wayland/meta-pointer-lock-wayland.c | 7 +- src/wayland/meta-wayland-actor-surface.c | 63 ++++--- src/wayland/meta-wayland-buffer.c | 8 +- src/wayland/meta-wayland-buffer.h | 3 +- src/wayland/meta-wayland-cursor-surface.c | 4 +- .../meta-wayland-pointer-constraints.c | 41 +++-- .../meta-wayland-pointer-constraints.h | 2 +- src/wayland/meta-wayland-region.c | 32 ++-- src/wayland/meta-wayland-region.h | 3 +- src/wayland/meta-wayland-surface.c | 98 +++++------ src/wayland/meta-wayland-surface.h | 15 +- src/x11/window-props.c | 16 +- src/x11/window-x11.c | 54 +++--- 76 files changed, 928 insertions(+), 1054 deletions(-) diff --git a/clutter/clutter/clutter-damage-history.c b/clutter/clutter/clutter-damage-history.c index 3edefd4f9..32c14a17f 100644 --- a/clutter/clutter/clutter-damage-history.c +++ b/clutter/clutter/clutter-damage-history.c @@ -24,7 +24,7 @@ struct _ClutterDamageHistory { - cairo_region_t *damages[DAMAGE_HISTORY_LENGTH]; + MtkRegion *damages[DAMAGE_HISTORY_LENGTH]; int index; }; @@ -44,7 +44,7 @@ clutter_damage_history_free (ClutterDamageHistory *history) int i; for (i = 0; i < G_N_ELEMENTS (history->damages); i++) - g_clear_pointer (&history->damages[i], cairo_region_destroy); + g_clear_pointer (&history->damages[i], mtk_region_unref); g_free (history); } @@ -65,10 +65,10 @@ clutter_damage_history_is_age_valid (ClutterDamageHistory *history, void clutter_damage_history_record (ClutterDamageHistory *history, - const cairo_region_t *damage) + const MtkRegion *damage) { - g_clear_pointer (&history->damages[history->index], cairo_region_destroy); - history->damages[history->index] = cairo_region_copy (damage); + g_clear_pointer (&history->damages[history->index], mtk_region_unref); + history->damages[history->index] = mtk_region_copy (damage); } static inline int @@ -84,7 +84,7 @@ clutter_damage_history_step (ClutterDamageHistory *history) history->index = step_damage_index (history->index, 1); } -const cairo_region_t * +const MtkRegion * clutter_damage_history_lookup (ClutterDamageHistory *history, int age) { diff --git a/clutter/clutter/clutter-damage-history.h b/clutter/clutter/clutter-damage-history.h index dd60ec103..7328ac702 100644 --- a/clutter/clutter/clutter-damage-history.h +++ b/clutter/clutter/clutter-damage-history.h @@ -18,10 +18,10 @@ #pragma once -#include #include #include "clutter/clutter-macros.h" +#include "mtk/mtk.h" typedef struct _ClutterDamageHistory ClutterDamageHistory; @@ -37,11 +37,11 @@ gboolean clutter_damage_history_is_age_valid (ClutterDamageHistory *history, CLUTTER_EXPORT void clutter_damage_history_record (ClutterDamageHistory *history, - const cairo_region_t *damage); + const MtkRegion *damage); CLUTTER_EXPORT void clutter_damage_history_step (ClutterDamageHistory *history); CLUTTER_EXPORT -const cairo_region_t * clutter_damage_history_lookup (ClutterDamageHistory *history, - int age); +const MtkRegion * clutter_damage_history_lookup (ClutterDamageHistory *history, + int age); diff --git a/clutter/clutter/clutter-mutter.h b/clutter/clutter/clutter-mutter.h index b8d8933bf..917022afa 100644 --- a/clutter/clutter/clutter-mutter.h +++ b/clutter/clutter/clutter-mutter.h @@ -115,7 +115,7 @@ void clutter_stage_update_device (ClutterStage *stage, graphene_point_t point, uint32_t time, ClutterActor *new_actor, - cairo_region_t *region, + MtkRegion *region, gboolean emit_crossing); CLUTTER_EXPORT diff --git a/clutter/clutter/clutter-paint-context-private.h b/clutter/clutter/clutter-paint-context-private.h index 231e64ad5..b13ed2958 100644 --- a/clutter/clutter/clutter-paint-context-private.h +++ b/clutter/clutter/clutter-paint-context-private.h @@ -20,10 +20,10 @@ #include "clutter/clutter-paint-context.h" ClutterPaintContext * -clutter_paint_context_new_for_view (ClutterStageView *view, - const cairo_region_t *redraw_clip, - GArray *clip_frusta, - ClutterPaintFlag paint_flags); +clutter_paint_context_new_for_view (ClutterStageView *view, + const MtkRegion *redraw_clip, + GArray *clip_frusta, + ClutterPaintFlag paint_flags); gboolean clutter_paint_context_is_drawing_off_stage (ClutterPaintContext *paint_context); diff --git a/clutter/clutter/clutter-paint-context.c b/clutter/clutter/clutter-paint-context.c index e34944e46..096c4d10b 100644 --- a/clutter/clutter/clutter-paint-context.c +++ b/clutter/clutter/clutter-paint-context.c @@ -31,7 +31,7 @@ struct _ClutterPaintContext ClutterStageView *view; ClutterFrame *frame; - cairo_region_t *redraw_clip; + MtkRegion *redraw_clip; GArray *clip_frusta; }; @@ -40,10 +40,10 @@ G_DEFINE_BOXED_TYPE (ClutterPaintContext, clutter_paint_context, clutter_paint_context_unref) ClutterPaintContext * -clutter_paint_context_new_for_view (ClutterStageView *view, - const cairo_region_t *redraw_clip, - GArray *clip_frusta, - ClutterPaintFlag paint_flags) +clutter_paint_context_new_for_view (ClutterStageView *view, + const MtkRegion *redraw_clip, + GArray *clip_frusta, + ClutterPaintFlag paint_flags) { ClutterPaintContext *paint_context; CoglFramebuffer *framebuffer; @@ -51,7 +51,7 @@ clutter_paint_context_new_for_view (ClutterStageView *view, paint_context = g_new0 (ClutterPaintContext, 1); g_ref_count_init (&paint_context->ref_count); paint_context->view = view; - paint_context->redraw_clip = cairo_region_copy (redraw_clip); + paint_context->redraw_clip = mtk_region_copy (redraw_clip); paint_context->clip_frusta = g_array_ref (clip_frusta); paint_context->paint_flags = paint_flags; @@ -65,15 +65,15 @@ clutter_paint_context_new_for_view (ClutterStageView *view, * clutter_paint_context_new_for_framebuffer: (skip) */ ClutterPaintContext * -clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer, - const cairo_region_t *redraw_clip, - ClutterPaintFlag paint_flags) +clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer, + const MtkRegion *redraw_clip, + ClutterPaintFlag paint_flags) { ClutterPaintContext *paint_context; paint_context = g_new0 (ClutterPaintContext, 1); g_ref_count_init (&paint_context->ref_count); - paint_context->redraw_clip = cairo_region_copy (redraw_clip); + paint_context->redraw_clip = mtk_region_copy (redraw_clip); paint_context->paint_flags = paint_flags; clutter_paint_context_push_framebuffer (paint_context, framebuffer); @@ -93,7 +93,7 @@ clutter_paint_context_dispose (ClutterPaintContext *paint_context) { g_list_free_full (paint_context->framebuffers, g_object_unref); paint_context->framebuffers = NULL; - g_clear_pointer (&paint_context->redraw_clip, cairo_region_destroy); + g_clear_pointer (&paint_context->redraw_clip, mtk_region_unref); g_clear_pointer (&paint_context->clip_frusta, g_array_unref); g_clear_pointer (&paint_context->frame, clutter_frame_unref); } @@ -134,7 +134,7 @@ clutter_paint_context_pop_framebuffer (ClutterPaintContext *paint_context) paint_context->framebuffers); } -const cairo_region_t * +const MtkRegion * clutter_paint_context_get_redraw_clip (ClutterPaintContext *paint_context) { return paint_context->redraw_clip; diff --git a/clutter/clutter/clutter-paint-context.h b/clutter/clutter/clutter-paint-context.h index 4d6d828d8..ea35e3d61 100644 --- a/clutter/clutter/clutter-paint-context.h +++ b/clutter/clutter/clutter-paint-context.h @@ -42,9 +42,9 @@ CLUTTER_EXPORT GType clutter_paint_context_get_type (void); CLUTTER_EXPORT -ClutterPaintContext * clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer, - const cairo_region_t *redraw_clip, - ClutterPaintFlag paint_flags); +ClutterPaintContext * clutter_paint_context_new_for_framebuffer (CoglFramebuffer *framebuffer, + const MtkRegion *redraw_clip, + ClutterPaintFlag paint_flags); CLUTTER_EXPORT ClutterPaintContext * clutter_paint_context_ref (ClutterPaintContext *paint_context); @@ -69,7 +69,7 @@ CLUTTER_EXPORT void clutter_paint_context_pop_framebuffer (ClutterPaintContext *paint_context); CLUTTER_EXPORT -const cairo_region_t * clutter_paint_context_get_redraw_clip (ClutterPaintContext *paint_context); +const MtkRegion * clutter_paint_context_get_redraw_clip (ClutterPaintContext *paint_context); CLUTTER_EXPORT ClutterPaintFlag clutter_paint_context_get_paint_flags (ClutterPaintContext *paint_context); diff --git a/clutter/clutter/clutter-pick-stack-private.h b/clutter/clutter/clutter-pick-stack-private.h index ab4631575..7e1d8404d 100644 --- a/clutter/clutter/clutter-pick-stack-private.h +++ b/clutter/clutter/clutter-pick-stack-private.h @@ -61,7 +61,7 @@ ClutterActor * clutter_pick_stack_search_actor (ClutterPickStack *pick_stack, const graphene_point3d_t *point, const graphene_ray_t *ray, - cairo_region_t **clear_area); + MtkRegion **clear_area); G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterPickStack, clutter_pick_stack_unref) diff --git a/clutter/clutter/clutter-pick-stack.c b/clutter/clutter/clutter-pick-stack.c index 009ab8217..0e88a5087 100644 --- a/clutter/clutter/clutter-pick-stack.c +++ b/clutter/clutter/clutter-pick-stack.c @@ -455,9 +455,9 @@ static void calculate_clear_area (ClutterPickStack *pick_stack, PickRecord *pick_rec, int elem, - cairo_region_t **clear_area) + MtkRegion **clear_area) { - cairo_region_t *area = NULL; + MtkRegion *area = NULL; graphene_point3d_t verts[4]; MtkRectangle rect; int i; @@ -478,7 +478,7 @@ calculate_clear_area (ClutterPickStack *pick_stack, rect.height = MIN (rect.height, floor (pick_rec->base.rect.y2 - pick_rec->base.rect.y1)); - area = cairo_region_create_rectangle (&rect); + area = mtk_region_create_rectangle (&rect); for (i = elem + 1; i < pick_stack->vertices_stack->len; i++) { @@ -487,33 +487,31 @@ calculate_clear_area (ClutterPickStack *pick_stack, ClutterActorBox paint_box; if (!rec->is_overlap && - (rec->base.rect.x1 == rec->base.rect.x2 || - rec->base.rect.y1 == rec->base.rect.y2)) + (rec->base.rect.x1 == rec->base.rect.x2 || + rec->base.rect.y1 == rec->base.rect.y2)) continue; if (!clutter_actor_get_paint_box (rec->actor, &paint_box)) continue; - cairo_region_subtract_rectangle (area, - &(MtkRectangle) { - .x = paint_box.x1, - .y = paint_box.y1, - .width = paint_box.x2 - paint_box.x1, - .height = paint_box.y2 - paint_box.y1, - }); + mtk_region_subtract_rectangle (area, + &MTK_RECTANGLE_INIT (paint_box.x1, paint_box.y1, + paint_box.x2 - paint_box.x1, + paint_box.y2 - paint_box.y1) + ); } if (clear_area) *clear_area = g_steal_pointer (&area); - g_clear_pointer (&area, cairo_region_destroy); + g_clear_pointer (&area, mtk_region_unref); } ClutterActor * clutter_pick_stack_search_actor (ClutterPickStack *pick_stack, const graphene_point3d_t *point, const graphene_ray_t *ray, - cairo_region_t **clear_area) + MtkRegion **clear_area) { int i; diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h index 38d02178f..4aa75062b 100644 --- a/clutter/clutter/clutter-stage-private.h +++ b/clutter/clutter/clutter-stage-private.h @@ -42,10 +42,10 @@ typedef enum /* stage */ CLUTTER_EXPORT -void clutter_stage_paint_view (ClutterStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame); +void clutter_stage_paint_view (ClutterStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame); void clutter_stage_emit_before_update (ClutterStage *stage, ClutterStageView *view, @@ -122,7 +122,7 @@ void clutter_stage_update_device_entry (ClutterStage *self, ClutterEventSequence *sequence, graphene_point_t coords, ClutterActor *actor, - cairo_region_t *clear_area); + MtkRegion *clear_area); void clutter_stage_remove_device_entry (ClutterStage *self, ClutterInputDevice *device, diff --git a/clutter/clutter/clutter-stage-view-private.h b/clutter/clutter/clutter-stage-view-private.h index 04b196ac5..d19c01fbd 100644 --- a/clutter/clutter/clutter-stage-view-private.h +++ b/clutter/clutter/clutter-stage-view-private.h @@ -23,11 +23,11 @@ CLUTTER_EXPORT void clutter_stage_view_after_paint (ClutterStageView *view, - cairo_region_t *redraw_clip); + MtkRegion *redraw_clip); CLUTTER_EXPORT -void clutter_stage_view_before_swap_buffer (ClutterStageView *view, - const cairo_region_t *swap_region); +void clutter_stage_view_before_swap_buffer (ClutterStageView *view, + const MtkRegion *swap_region); gboolean clutter_stage_view_is_dirty_viewport (ClutterStageView *view); @@ -54,13 +54,13 @@ gboolean clutter_stage_view_has_full_redraw_clip (ClutterStageView *view); gboolean clutter_stage_view_has_redraw_clip (ClutterStageView *view); -const cairo_region_t * clutter_stage_view_peek_redraw_clip (ClutterStageView *view); +const MtkRegion * clutter_stage_view_peek_redraw_clip (ClutterStageView *view); CLUTTER_EXPORT -cairo_region_t * clutter_stage_view_take_redraw_clip (ClutterStageView *view); +MtkRegion * clutter_stage_view_take_redraw_clip (ClutterStageView *view); CLUTTER_EXPORT -cairo_region_t * clutter_stage_view_take_accumulated_redraw_clip (ClutterStageView *view); +MtkRegion * clutter_stage_view_take_accumulated_redraw_clip (ClutterStageView *view); CLUTTER_EXPORT void clutter_stage_view_accumulate_redraw_clip (ClutterStageView *view); diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c index a07c7bc40..45ab7876d 100644 --- a/clutter/clutter/clutter-stage-view.c +++ b/clutter/clutter/clutter-stage-view.c @@ -84,9 +84,9 @@ typedef struct _ClutterStageViewPrivate CoglScanout *next_scanout; gboolean has_redraw_clip; - cairo_region_t *redraw_clip; + MtkRegion *redraw_clip; gboolean has_accumulated_redraw_clip; - cairo_region_t *accumulated_redraw_clip; + MtkRegion *accumulated_redraw_clip; float refresh_rate; int64_t vblank_duration_us; @@ -228,11 +228,11 @@ clutter_stage_view_transform_rect_to_onscreen (ClutterStageView *view, } static void -paint_transformed_framebuffer (ClutterStageView *view, - CoglPipeline *pipeline, - CoglOffscreen *src_framebuffer, - CoglFramebuffer *dst_framebuffer, - const cairo_region_t *redraw_clip) +paint_transformed_framebuffer (ClutterStageView *view, + CoglPipeline *pipeline, + CoglOffscreen *src_framebuffer, + CoglFramebuffer *dst_framebuffer, + const MtkRegion *redraw_clip) { graphene_matrix_t matrix; unsigned int n_rectangles, i; @@ -246,10 +246,8 @@ paint_transformed_framebuffer (ClutterStageView *view, dst_height = cogl_framebuffer_get_height (dst_framebuffer); clutter_stage_view_get_layout (view, &view_layout); clutter_stage_view_transform_rect_to_onscreen (view, - &(MtkRectangle) { - .width = view_layout.width, - .height = view_layout.height, - }, + &MTK_RECTANGLE_INIT (0, 0, + view_layout.width, view_layout.height), view_layout.width, view_layout.height, &onscreen_layout); @@ -269,7 +267,7 @@ paint_transformed_framebuffer (ClutterStageView *view, cogl_framebuffer_set_viewport (dst_framebuffer, 0, 0, dst_width, dst_height); - n_rectangles = cairo_region_num_rectangles (redraw_clip); + n_rectangles = mtk_region_num_rectangles (redraw_clip); coordinates = g_newa (float, 2 * 4 * n_rectangles); for (i = 0; i < n_rectangles; i++) @@ -277,7 +275,7 @@ paint_transformed_framebuffer (ClutterStageView *view, MtkRectangle src_rect; MtkRectangle dst_rect; - cairo_region_get_rectangle (redraw_clip, i, &src_rect); + src_rect = mtk_region_get_rectangle (redraw_clip, i); src_rect.x -= view_layout.x; src_rect.y -= view_layout.y; @@ -463,7 +461,7 @@ init_shadowfb (ClutterStageView *view) void clutter_stage_view_after_paint (ClutterStageView *view, - cairo_region_t *redraw_clip) + MtkRegion *redraw_clip) { ClutterStageViewPrivate *priv = clutter_stage_view_get_instance_private (view); @@ -520,14 +518,14 @@ flip_dma_buf_idx (int idx) return (idx + 1) % 2; } -static cairo_region_t * -find_damaged_tiles (ClutterStageView *view, - const cairo_region_t *damage_region, - GError **error) +static MtkRegion * +find_damaged_tiles (ClutterStageView *view, + const MtkRegion *damage_region, + GError **error) { ClutterStageViewPrivate *priv = clutter_stage_view_get_instance_private (view); - cairo_region_t *tile_damage_region; + MtkRegion *tile_damage_region; MtkRectangle damage_extents; MtkRectangle fb_rect; int prev_dma_buf_idx; @@ -573,7 +571,7 @@ find_damaged_tiles (ClutterStageView *view, .height = height, }; - cairo_region_get_extents (damage_region, &damage_extents); + damage_extents = mtk_region_get_extents (damage_region); tile_x_min = damage_extents.x / tile_size; tile_x_max = ((damage_extents.x + damage_extents.width + tile_size - 1) / @@ -582,7 +580,7 @@ find_damaged_tiles (ClutterStageView *view, tile_y_max = ((damage_extents.y + damage_extents.height + tile_size - 1) / tile_size); - tile_damage_region = cairo_region_create (); + tile_damage_region = mtk_region_create (); for (tile_y = tile_y_min; tile_y <= tile_y_max; tile_y++) { @@ -595,14 +593,14 @@ find_damaged_tiles (ClutterStageView *view, .height = tile_size, }; - if (cairo_region_contains_rectangle (damage_region, &tile) == - CAIRO_REGION_OVERLAP_OUT) + if (mtk_region_contains_rectangle (damage_region, &tile) == + MTK_REGION_OVERLAP_OUT) continue; mtk_rectangle_intersect (&tile, &fb_rect, &tile); if (is_tile_dirty (&tile, current_data, prev_data, bpp, stride)) - cairo_region_union_rectangle (tile_damage_region, &tile); + mtk_region_union_rectangle (tile_damage_region, &tile); } } @@ -623,7 +621,7 @@ find_damaged_tiles (ClutterStageView *view, cogl_dma_buf_handle_munmap (prev_dma_buf_handle, prev_data, NULL); cogl_dma_buf_handle_munmap (current_dma_buf_handle, current_data, NULL); - cairo_region_intersect (tile_damage_region, damage_region); + mtk_region_intersect (tile_damage_region, damage_region); return tile_damage_region; @@ -660,33 +658,33 @@ swap_dma_buf_framebuffer (ClutterStageView *view) } static void -copy_shadowfb_to_onscreen (ClutterStageView *view, - const cairo_region_t *swap_region) +copy_shadowfb_to_onscreen (ClutterStageView *view, + const MtkRegion *swap_region) { ClutterStageViewPrivate *priv = clutter_stage_view_get_instance_private (view); ClutterDamageHistory *damage_history = priv->shadow.dma_buf.damage_history; - cairo_region_t *damage_region; + g_autoptr (MtkRegion) damage_region = NULL; int age; int i; - if (cairo_region_is_empty (swap_region)) + if (mtk_region_is_empty (swap_region)) { MtkRectangle full_damage = { .width = cogl_framebuffer_get_width (priv->framebuffer), .height = cogl_framebuffer_get_height (priv->framebuffer), }; - damage_region = cairo_region_create_rectangle (&full_damage); + damage_region = mtk_region_create_rectangle (&full_damage); } else { - damage_region = cairo_region_copy (swap_region); + damage_region = mtk_region_copy (swap_region); } if (is_shadowfb_double_buffered (view)) { CoglOnscreen *onscreen = COGL_ONSCREEN (priv->framebuffer); - cairo_region_t *changed_region; + g_autoptr (MtkRegion) changed_region = NULL; if (cogl_onscreen_get_frame_counter (onscreen) >= 1) { @@ -708,7 +706,7 @@ copy_shadowfb_to_onscreen (ClutterStageView *view, } else { - changed_region = cairo_region_copy (damage_region); + changed_region = mtk_region_copy (damage_region); } if (changed_region) @@ -722,31 +720,27 @@ copy_shadowfb_to_onscreen (ClutterStageView *view, { for (age = 1; age <= buffer_age; age++) { - const cairo_region_t *old_damage; + const MtkRegion *old_damage; old_damage = clutter_damage_history_lookup (damage_history, age); - cairo_region_union (changed_region, old_damage); + mtk_region_union (changed_region, old_damage); } - cairo_region_destroy (damage_region); + g_clear_pointer (&damage_region, mtk_region_unref); damage_region = g_steal_pointer (&changed_region); } - else - { - cairo_region_destroy (changed_region); - } clutter_damage_history_step (damage_history); } } - for (i = 0; i < cairo_region_num_rectangles (damage_region); i++) + for (i = 0; i < mtk_region_num_rectangles (damage_region); i++) { CoglFramebuffer *shadowfb = COGL_FRAMEBUFFER (priv->shadow.framebuffer); g_autoptr (GError) error = NULL; MtkRectangle rect; - cairo_region_get_rectangle (damage_region, i, &rect); + rect = mtk_region_get_rectangle (damage_region, i); if (!cogl_blit_framebuffer (shadowfb, priv->framebuffer, @@ -756,20 +750,17 @@ copy_shadowfb_to_onscreen (ClutterStageView *view, &error)) { g_warning ("Failed to blit shadow buffer: %s", error->message); - cairo_region_destroy (damage_region); return; } } - cairo_region_destroy (damage_region); - if (is_shadowfb_double_buffered (view)) swap_dma_buf_framebuffer (view); } void -clutter_stage_view_before_swap_buffer (ClutterStageView *view, - const cairo_region_t *swap_region) +clutter_stage_view_before_swap_buffer (ClutterStageView *view, + const MtkRegion *swap_region) { ClutterStageViewPrivate *priv = clutter_stage_view_get_instance_private (view); @@ -930,18 +921,18 @@ clutter_stage_view_get_offscreen_transformation_matrix (ClutterStageView *view, static void maybe_mark_full_redraw (ClutterStageView *view, - cairo_region_t **region) + MtkRegion **region) { ClutterStageViewPrivate *priv = clutter_stage_view_get_instance_private (view); - if (cairo_region_num_rectangles (*region) == 1) + if (mtk_region_num_rectangles (*region) == 1) { MtkRectangle region_extents; - cairo_region_get_extents (*region, ®ion_extents); + region_extents = mtk_region_get_extents (*region); if (mtk_rectangle_equal (&priv->layout, ®ion_extents)) - g_clear_pointer (region, cairo_region_destroy); + g_clear_pointer (region, mtk_region_unref); } } @@ -957,7 +948,7 @@ clutter_stage_view_add_redraw_clip (ClutterStageView *view, if (!clip) { - g_clear_pointer (&priv->redraw_clip, cairo_region_destroy); + g_clear_pointer (&priv->redraw_clip, mtk_region_unref); priv->has_redraw_clip = TRUE; return; } @@ -968,11 +959,11 @@ clutter_stage_view_add_redraw_clip (ClutterStageView *view, if (!priv->redraw_clip) { if (!mtk_rectangle_equal (&priv->layout, clip)) - priv->redraw_clip = cairo_region_create_rectangle (clip); + priv->redraw_clip = mtk_region_create_rectangle (clip); } else { - cairo_region_union_rectangle (priv->redraw_clip, clip); + mtk_region_union_rectangle (priv->redraw_clip, clip); maybe_mark_full_redraw (view, &priv->redraw_clip); } @@ -997,7 +988,7 @@ clutter_stage_view_has_full_redraw_clip (ClutterStageView *view) return priv->has_redraw_clip && !priv->redraw_clip; } -const cairo_region_t * +const MtkRegion * clutter_stage_view_peek_redraw_clip (ClutterStageView *view) { ClutterStageViewPrivate *priv = @@ -1006,7 +997,7 @@ clutter_stage_view_peek_redraw_clip (ClutterStageView *view) return priv->redraw_clip; } -cairo_region_t * +MtkRegion * clutter_stage_view_take_redraw_clip (ClutterStageView *view) { ClutterStageViewPrivate *priv = @@ -1017,7 +1008,7 @@ clutter_stage_view_take_redraw_clip (ClutterStageView *view) return g_steal_pointer (&priv->redraw_clip); } -cairo_region_t * +MtkRegion * clutter_stage_view_take_accumulated_redraw_clip (ClutterStageView *view) { ClutterStageViewPrivate *priv = @@ -1041,7 +1032,7 @@ clutter_stage_view_accumulate_redraw_clip (ClutterStageView *view) if (priv->redraw_clip && priv->accumulated_redraw_clip) { - cairo_region_union (priv->accumulated_redraw_clip, priv->redraw_clip); + mtk_region_union (priv->accumulated_redraw_clip, priv->redraw_clip); maybe_mark_full_redraw (view, &priv->accumulated_redraw_clip); } else if (priv->redraw_clip && !priv->has_accumulated_redraw_clip) @@ -1050,10 +1041,10 @@ clutter_stage_view_accumulate_redraw_clip (ClutterStageView *view) } else { - g_clear_pointer (&priv->accumulated_redraw_clip, cairo_region_destroy); + g_clear_pointer (&priv->accumulated_redraw_clip, mtk_region_unref); } - g_clear_pointer (&priv->redraw_clip, cairo_region_destroy); + g_clear_pointer (&priv->redraw_clip, mtk_region_unref); priv->has_accumulated_redraw_clip = TRUE; priv->has_redraw_clip = FALSE; } @@ -1486,8 +1477,8 @@ clutter_stage_view_dispose (GObject *object) g_clear_object (&priv->offscreen); g_clear_object (&priv->offscreen_pipeline); - g_clear_pointer (&priv->redraw_clip, cairo_region_destroy); - g_clear_pointer (&priv->accumulated_redraw_clip, cairo_region_destroy); + g_clear_pointer (&priv->redraw_clip, mtk_region_unref); + g_clear_pointer (&priv->accumulated_redraw_clip, mtk_region_unref); g_clear_pointer (&priv->frame_clock, clutter_frame_clock_destroy); G_OBJECT_CLASS (clutter_stage_view_parent_class)->dispose (object); diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 58d61f299..fdda0f65f 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -38,7 +38,6 @@ #include "clutter/clutter-build-config.h" #include -#include #define CLUTTER_DISABLE_DEPRECATION_WARNINGS @@ -102,7 +101,7 @@ typedef struct _PointerDeviceEntry ClutterEventSequence *sequence; graphene_point_t coords; ClutterActor *current_actor; - cairo_region_t *clear_area; + MtkRegion *clear_area; unsigned int press_count; ClutterActor *implicit_grab_actor; @@ -400,10 +399,10 @@ setup_clip_frustum (ClutterStage *stage, } static void -clutter_stage_do_paint_view (ClutterStage *stage, - ClutterStageView *view, - ClutterFrame *frame, - const cairo_region_t *redraw_clip) +clutter_stage_do_paint_view (ClutterStage *stage, + ClutterStageView *view, + ClutterFrame *frame, + const MtkRegion *redraw_clip) { ClutterPaintContext *paint_context; MtkRectangle clip_rect; @@ -415,7 +414,7 @@ clutter_stage_do_paint_view (ClutterStage *stage, int n_rectangles; ClutterPaintFlag paint_flags; - n_rectangles = redraw_clip ? cairo_region_num_rectangles (redraw_clip) : 0; + n_rectangles = redraw_clip ? mtk_region_num_rectangles (redraw_clip) : 0; if (redraw_clip && n_rectangles < MAX_FRUSTA) { int i; @@ -426,7 +425,7 @@ clutter_stage_do_paint_view (ClutterStage *stage, for (i = 0; i < n_rectangles; i++) { - cairo_region_get_rectangle (redraw_clip, i, &clip_rect); + clip_rect = mtk_region_get_rectangle (redraw_clip, i); setup_clip_frustum (stage, &clip_rect, &clip_frustum); g_array_append_val (clip_frusta, clip_frustum); } @@ -437,7 +436,7 @@ clutter_stage_do_paint_view (ClutterStage *stage, sizeof (graphene_frustum_t), 1); if (redraw_clip) - cairo_region_get_extents (redraw_clip, &clip_rect); + clip_rect = mtk_region_get_extents (redraw_clip); else clutter_stage_view_get_layout (view, &clip_rect); @@ -475,10 +474,10 @@ clutter_stage_do_paint_view (ClutterStage *stage, * for picking or painting... */ void -clutter_stage_paint_view (ClutterStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame) +clutter_stage_paint_view (ClutterStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame) { ClutterStagePrivate *priv = stage->priv; @@ -1073,7 +1072,7 @@ _clutter_stage_do_pick_on_view (ClutterStage *stage, float y, ClutterPickMode mode, ClutterStageView *view, - cairo_region_t **clear_area) + MtkRegion **clear_area) { g_autoptr (ClutterPickStack) pick_stack = NULL; ClutterPickContext *pick_context; @@ -1127,7 +1126,7 @@ _clutter_stage_do_pick (ClutterStage *stage, float x, float y, ClutterPickMode mode, - cairo_region_t **clear_area) + MtkRegion **clear_area) { ClutterActor *actor = CLUTTER_ACTOR (stage); ClutterStagePrivate *priv = stage->priv; @@ -1300,10 +1299,10 @@ clutter_stage_finalize (GObject *object) } static void -clutter_stage_real_paint_view (ClutterStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame) +clutter_stage_real_paint_view (ClutterStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame) { clutter_stage_do_paint_view (stage, view, frame, redraw_clip); } @@ -1571,7 +1570,7 @@ clutter_stage_class_init (ClutterStageClass *klass) * ClutterStage::paint-view: * @stage: the stage that received the event * @view: a #ClutterStageView - * @redraw_clip: a #cairo_region_t with the redraw clip + * @redraw_clip: a #MtkRegion with the redraw clip * @frame: a #ClutterFrame * * The signal is emitted before a [class@Clutter.StageView] is being @@ -1590,7 +1589,7 @@ clutter_stage_class_init (ClutterStageClass *klass) _clutter_marshal_VOID__OBJECT_BOXED_BOXED, G_TYPE_NONE, 3, CLUTTER_TYPE_STAGE_VIEW, - CAIRO_GOBJECT_TYPE_REGION | G_SIGNAL_TYPE_STATIC_SCOPE, + MTK_TYPE_REGION | G_SIGNAL_TYPE_STATIC_SCOPE, CLUTTER_TYPE_FRAME | G_SIGNAL_TYPE_STATIC_SCOPE); g_signal_set_va_marshaller (stage_signals[PAINT_VIEW], G_TYPE_FROM_CLASS (gobject_class), @@ -1945,7 +1944,7 @@ clutter_stage_read_pixels (ClutterStage *stage, ClutterActorBox box; GList *l; ClutterStageView *view; - cairo_region_t *clip; + g_autoptr (MtkRegion) clip = NULL; MtkRectangle clip_rect; CoglFramebuffer *framebuffer; float view_scale; @@ -1977,27 +1976,17 @@ clutter_stage_read_pixels (ClutterStage *stage, view = l->data; clutter_stage_view_get_layout (view, &clip_rect); - clip = cairo_region_create_rectangle (&clip_rect); - cairo_region_intersect_rectangle (clip, - &(MtkRectangle) { - .x = x, - .y = y, - .width = width, - .height = height, - }); - cairo_region_get_extents (clip, &clip_rect); + clip = mtk_region_create_rectangle (&clip_rect); + mtk_region_intersect_rectangle (clip, + &MTK_RECTANGLE_INIT (x, y, width, height)); + clip_rect = mtk_region_get_extents (clip); if (clip_rect.width == 0 || clip_rect.height == 0) - { - cairo_region_destroy (clip); - return NULL; - } + return NULL; framebuffer = clutter_stage_view_get_framebuffer (view); clutter_stage_do_paint_view (stage, view, NULL, clip); - cairo_region_destroy (clip); - view_scale = clutter_stage_view_get_scale (view); pixel_width = roundf (clip_rect.width * view_scale); pixel_height = roundf (clip_rect.height * view_scale); @@ -2725,7 +2714,7 @@ clutter_stage_paint_to_framebuffer (ClutterStage *stage, { ClutterStagePrivate *priv = stage->priv; ClutterPaintContext *paint_context; - cairo_region_t *redraw_clip; + g_autoptr (MtkRegion) redraw_clip = NULL; if (paint_flags & CLUTTER_PAINT_FLAG_CLEAR) { @@ -2735,12 +2724,11 @@ clutter_stage_paint_to_framebuffer (ClutterStage *stage, cogl_framebuffer_clear (framebuffer, COGL_BUFFER_BIT_COLOR, &clear_color); } - redraw_clip = cairo_region_create_rectangle (rect); + redraw_clip = mtk_region_create_rectangle (rect); paint_context = clutter_paint_context_new_for_framebuffer (framebuffer, redraw_clip, paint_flags); - cairo_region_destroy (redraw_clip); cogl_framebuffer_push_matrix (framebuffer); cogl_framebuffer_set_projection_matrix (framebuffer, &priv->projection); @@ -3048,7 +3036,7 @@ free_pointer_device_entry (PointerDeviceEntry *entry) if (entry->current_actor) _clutter_actor_set_has_pointer (entry->current_actor, FALSE); - g_clear_pointer (&entry->clear_area, cairo_region_destroy); + g_clear_pointer (&entry->clear_area, mtk_region_unref); g_assert (!entry->press_count); g_assert (entry->event_emission_chain->len == 0); @@ -3063,7 +3051,7 @@ clutter_stage_update_device_entry (ClutterStage *self, ClutterEventSequence *sequence, graphene_point_t coords, ClutterActor *actor, - cairo_region_t *clear_area) + MtkRegion *clear_area) { ClutterStagePrivate *priv = self->priv; PointerDeviceEntry *entry = NULL; @@ -3108,9 +3096,9 @@ clutter_stage_update_device_entry (ClutterStage *self, _clutter_actor_set_has_pointer (actor, TRUE); } - g_clear_pointer (&entry->clear_area, cairo_region_destroy); + g_clear_pointer (&entry->clear_area, mtk_region_unref); if (clear_area) - entry->clear_area = cairo_region_reference (clear_area); + entry->clear_area = mtk_region_ref (clear_area); } void @@ -3446,7 +3434,7 @@ clutter_stage_update_device (ClutterStage *stage, graphene_point_t point, uint32_t time_ms, ClutterActor *new_actor, - cairo_region_t *clear_area, + MtkRegion *clear_area, gboolean emit_crossing) { ClutterInputDeviceType device_type; @@ -3587,8 +3575,8 @@ clutter_stage_check_in_clear_area (ClutterStage *stage, if (!entry->clear_area) return FALSE; - return cairo_region_contains_point (entry->clear_area, - point.x, point.y); + return mtk_region_contains_point (entry->clear_area, + point.x, point.y); } ClutterActor * @@ -3601,7 +3589,7 @@ clutter_stage_pick_and_update_device (ClutterStage *stage, uint32_t time_ms) { ClutterActor *new_actor; - cairo_region_t *clear_area = NULL; + MtkRegion *clear_area = NULL; if ((flags & CLUTTER_DEVICE_UPDATE_IGNORE_CACHE) == 0) { @@ -3632,7 +3620,7 @@ clutter_stage_pick_and_update_device (ClutterStage *stage, clear_area, !!(flags & CLUTTER_DEVICE_UPDATE_EMIT_CROSSING)); - g_clear_pointer (&clear_area, cairo_region_destroy); + g_clear_pointer (&clear_area, mtk_region_unref); return new_actor; } diff --git a/clutter/clutter/clutter-stage.h b/clutter/clutter/clutter-stage.h index cb79a8438..12238f3f5 100644 --- a/clutter/clutter/clutter-stage.h +++ b/clutter/clutter/clutter-stage.h @@ -75,10 +75,10 @@ struct _ClutterStageClass ClutterStageView *view, ClutterFrame *frame); - void (* paint_view) (ClutterStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame); + void (* paint_view) (ClutterStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame); }; /** diff --git a/cogl/cogl/cogl-clip-stack.c b/cogl/cogl/cogl-clip-stack.c index 15daeae6a..6d6ab67e4 100644 --- a/cogl/cogl/cogl-clip-stack.c +++ b/cogl/cogl/cogl-clip-stack.c @@ -272,8 +272,8 @@ _cogl_clip_stack_push_primitive (CoglClipStack *stack, } CoglClipStack * -cogl_clip_stack_push_region (CoglClipStack *stack, - cairo_region_t *region) +cogl_clip_stack_push_region (CoglClipStack *stack, + MtkRegion *region) { CoglClipStack *entry; CoglClipStackRegion *entry_region; @@ -284,13 +284,13 @@ cogl_clip_stack_push_region (CoglClipStack *stack, COGL_CLIP_STACK_REGION); entry = (CoglClipStack *) entry_region; - cairo_region_get_extents (region, &bounds); + bounds = mtk_region_get_extents (region); entry->bounds_x0 = bounds.x; entry->bounds_x1 = bounds.x + bounds.width; entry->bounds_y0 = bounds.y; entry->bounds_y1 = bounds.y + bounds.height; - entry_region->region = cairo_region_reference (region); + entry_region->region = mtk_region_ref (region); return entry; } @@ -336,7 +336,7 @@ _cogl_clip_stack_unref (CoglClipStack *entry) case COGL_CLIP_STACK_REGION: { CoglClipStackRegion *region = (CoglClipStackRegion *) entry; - cairo_region_destroy (region->region); + g_clear_pointer (®ion->region, mtk_region_unref); g_free (entry); break; } diff --git a/cogl/cogl/cogl-clip-stack.h b/cogl/cogl/cogl-clip-stack.h index 66b880b71..e66f0ddfd 100644 --- a/cogl/cogl/cogl-clip-stack.h +++ b/cogl/cogl/cogl-clip-stack.h @@ -157,7 +157,7 @@ struct _CoglClipStackRegion { CoglClipStack _parent_data; - cairo_region_t *region; + MtkRegion *region; }; COGL_EXPORT CoglClipStack * @@ -181,8 +181,8 @@ _cogl_clip_stack_push_primitive (CoglClipStack *stack, CoglMatrixEntry *projection_entry, const float *viewport); CoglClipStack * -cogl_clip_stack_push_region (CoglClipStack *stack, - cairo_region_t *region); +cogl_clip_stack_push_region (CoglClipStack *stack, + MtkRegion *region); CoglClipStack * _cogl_clip_stack_pop (CoglClipStack *stack); diff --git a/cogl/cogl/cogl-framebuffer.c b/cogl/cogl/cogl-framebuffer.c index a6b9c47be..8853d17a9 100644 --- a/cogl/cogl/cogl-framebuffer.c +++ b/cogl/cogl/cogl-framebuffer.c @@ -2070,7 +2070,7 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer, void cogl_framebuffer_push_region_clip (CoglFramebuffer *framebuffer, - cairo_region_t *region) + MtkRegion *region) { CoglFramebufferPrivate *priv = cogl_framebuffer_get_instance_private (framebuffer); diff --git a/cogl/cogl/cogl-framebuffer.h b/cogl/cogl/cogl-framebuffer.h index 00ac006db..6da8d26f5 100644 --- a/cogl/cogl/cogl-framebuffer.h +++ b/cogl/cogl/cogl-framebuffer.h @@ -38,9 +38,9 @@ #include "cogl/cogl-indices.h" #include "cogl/cogl-bitmap.h" #include "cogl/cogl-texture.h" +#include "mtk/mtk.h" #include -#include #include @@ -529,7 +529,7 @@ cogl_framebuffer_push_primitive_clip (CoglFramebuffer *framebuffer, COGL_EXPORT void cogl_framebuffer_push_region_clip (CoglFramebuffer *framebuffer, - cairo_region_t *region); + MtkRegion *region); /** * cogl_framebuffer_pop_clip: diff --git a/cogl/cogl/driver/gl/cogl-clip-stack-gl.c b/cogl/cogl/driver/gl/cogl-clip-stack-gl.c index e3f666c5f..5c4df709b 100644 --- a/cogl/cogl/driver/gl/cogl-clip-stack-gl.c +++ b/cogl/cogl/driver/gl/cogl-clip-stack-gl.c @@ -122,13 +122,13 @@ add_stencil_clip_rectangle (CoglFramebuffer *framebuffer, static void add_stencil_clip_region (CoglFramebuffer *framebuffer, - cairo_region_t *region, + MtkRegion *region, gboolean merge) { CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); CoglMatrixEntry *old_projection_entry, *old_modelview_entry; graphene_matrix_t matrix; - int num_rectangles = cairo_region_num_rectangles (region); + int num_rectangles = mtk_region_num_rectangles (region); int i; CoglVertexP2 *vertices; graphene_point3d_t p; @@ -189,7 +189,7 @@ add_stencil_clip_region (CoglFramebuffer *framebuffer, float x2, y2, z2, w2; CoglVertexP2 *v = vertices + i * 6; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); x1 = rect.x; y1 = rect.y; @@ -527,7 +527,7 @@ _cogl_clip_stack_gl_flush (CoglClipStack *stack, /* If nrectangles <= 1, it can be fully represented with the * scissor clip. */ - if (cairo_region_num_rectangles (region->region) > 1 || + if (mtk_region_num_rectangles (region->region) > 1 || G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_STENCILLING))) { COGL_NOTE (CLIPPING, "Adding stencil clip for region"); diff --git a/src/backends/meta-pointer-constraint.c b/src/backends/meta-pointer-constraint.c index b122187fe..16c3c85e6 100644 --- a/src/backends/meta-pointer-constraint.c +++ b/src/backends/meta-pointer-constraint.c @@ -47,7 +47,7 @@ struct _MetaPointerConstraint { GObject parent_instance; - cairo_region_t *region; + MtkRegion *region; double min_edge_distance; }; @@ -61,7 +61,7 @@ meta_pointer_constraint_finalize (GObject *object) { MetaPointerConstraint *constraint = META_POINTER_CONSTRAINT (object); - g_clear_pointer (&constraint->region, cairo_region_destroy); + g_clear_pointer (&constraint->region, mtk_region_unref); G_OBJECT_CLASS (meta_pointer_constraint_parent_class)->finalize (object); } @@ -81,19 +81,19 @@ meta_pointer_constraint_class_init (MetaPointerConstraintClass *klass) MetaPointerConstraint * -meta_pointer_constraint_new (const cairo_region_t *region, - double min_edge_distance) +meta_pointer_constraint_new (const MtkRegion *region, + double min_edge_distance) { MetaPointerConstraint *constraint; constraint = g_object_new (META_TYPE_POINTER_CONSTRAINT, NULL); - constraint->region = cairo_region_copy (region); + constraint->region = mtk_region_copy (region); constraint->min_edge_distance = min_edge_distance; return constraint; } -cairo_region_t * +MtkRegion * meta_pointer_constraint_get_region (MetaPointerConstraint *constraint) { return constraint->region; diff --git a/src/backends/meta-pointer-constraint.h b/src/backends/meta-pointer-constraint.h index 435ec3b2b..181592109 100644 --- a/src/backends/meta-pointer-constraint.h +++ b/src/backends/meta-pointer-constraint.h @@ -32,10 +32,10 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (MetaPointerConstraint, meta_pointer_constraint, META, POINTER_CONSTRAINT, GObject); -MetaPointerConstraint * meta_pointer_constraint_new (const cairo_region_t *region, - double min_edge_distance); +MetaPointerConstraint * meta_pointer_constraint_new (const MtkRegion *region, + double min_edge_distance); -cairo_region_t * meta_pointer_constraint_get_region (MetaPointerConstraint *constraint); +MtkRegion * meta_pointer_constraint_get_region (MetaPointerConstraint *constraint); double meta_pointer_constraint_get_min_edge_distance (MetaPointerConstraint *constraint); diff --git a/src/backends/meta-screen-cast-area-stream-src.c b/src/backends/meta-screen-cast-area-stream-src.c index 3f3095e5e..0e499dab7 100644 --- a/src/backends/meta-screen-cast-area-stream-src.c +++ b/src/backends/meta-screen-cast-area-stream-src.c @@ -243,11 +243,11 @@ maybe_record_frame_on_idle (gpointer user_data) } static void -before_stage_painted (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +before_stage_painted (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { MetaScreenCastAreaStreamSrc *area_src = META_SCREEN_CAST_AREA_STREAM_SRC (user_data); @@ -263,11 +263,11 @@ before_stage_painted (MetaStage *stage, } static void -stage_painted (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +stage_painted (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { MetaScreenCastAreaStreamSrc *area_src = META_SCREEN_CAST_AREA_STREAM_SRC (user_data); @@ -283,12 +283,12 @@ stage_painted (MetaStage *stage, if (redraw_clip) { - switch (cairo_region_contains_rectangle (redraw_clip, area)) + switch (mtk_region_contains_rectangle (redraw_clip, area)) { - case CAIRO_REGION_OVERLAP_IN: - case CAIRO_REGION_OVERLAP_PART: + case MTK_REGION_OVERLAP_IN: + case MTK_REGION_OVERLAP_PART: break; - case CAIRO_REGION_OVERLAP_OUT: + case MTK_REGION_OVERLAP_OUT: return; } } diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c b/src/backends/meta-screen-cast-monitor-stream-src.c index 10f65f7b8..fa7f6b292 100644 --- a/src/backends/meta-screen-cast-monitor-stream-src.c +++ b/src/backends/meta-screen-cast-monitor-stream-src.c @@ -147,11 +147,11 @@ maybe_record_frame_on_idle (gpointer user_data) } static void -stage_painted (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +stage_painted (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { MetaScreenCastMonitorStreamSrc *monitor_src = META_SCREEN_CAST_MONITOR_STREAM_SRC (user_data); @@ -187,11 +187,11 @@ stage_painted (MetaStage *stage, } static void -before_stage_painted (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +before_stage_painted (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { MetaScreenCastMonitorStreamSrc *monitor_src = META_SCREEN_CAST_MONITOR_STREAM_SRC (user_data); diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c index 581c66e26..45c39ea36 100644 --- a/src/backends/meta-screen-cast-stream-src.c +++ b/src/backends/meta-screen-cast-stream-src.c @@ -112,7 +112,7 @@ typedef struct _MetaScreenCastStreamSrcPrivate gboolean uses_dma_bufs; GHashTable *dmabuf_handles; - cairo_region_t *redraw_clip; + MtkRegion *redraw_clip; } MetaScreenCastStreamSrcPrivate; static const struct { @@ -687,7 +687,7 @@ maybe_add_damaged_regions_metadata (MetaScreenCastStreamSrc *src, int num_buffers_available; i = 0; - n_rectangles = cairo_region_num_rectangles (priv->redraw_clip); + n_rectangles = mtk_region_num_rectangles (priv->redraw_clip); num_buffers_available = 0; spa_meta_for_each (meta_region, spa_meta_video_damage) @@ -714,7 +714,7 @@ maybe_add_damaged_regions_metadata (MetaScreenCastStreamSrc *src, { MtkRectangle rect; - cairo_region_get_rectangle (priv->redraw_clip, i, &rect); + rect = mtk_region_get_rectangle (priv->redraw_clip, i); meta_region->region = SPA_REGION (rect.x, rect.y, rect.width, rect.height); @@ -724,13 +724,13 @@ maybe_add_damaged_regions_metadata (MetaScreenCastStreamSrc *src, } } - g_clear_pointer (&priv->redraw_clip, cairo_region_destroy); + g_clear_pointer (&priv->redraw_clip, mtk_region_unref); } MetaScreenCastRecordResult meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src, MetaScreenCastRecordFlag flags, - const cairo_region_t *redraw_clip) + const MtkRegion *redraw_clip) { int64_t now_us = g_get_monotonic_time (); @@ -743,7 +743,7 @@ meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src, MetaScreenCastRecordResult meta_screen_cast_stream_src_maybe_record_frame_with_timestamp (MetaScreenCastStreamSrc *src, MetaScreenCastRecordFlag flags, - const cairo_region_t *redraw_clip, + const MtkRegion *redraw_clip, int64_t frame_timestamp_us) { MetaScreenCastStreamSrcPrivate *priv = @@ -762,9 +762,9 @@ meta_screen_cast_stream_src_maybe_record_frame_with_timestamp (MetaScreenCastStr if (redraw_clip) { if (priv->redraw_clip) - cairo_region_union (priv->redraw_clip, redraw_clip); + mtk_region_union (priv->redraw_clip, redraw_clip); else - priv->redraw_clip = cairo_region_copy (redraw_clip); + priv->redraw_clip = mtk_region_copy (redraw_clip); } if (priv->buffer_count == 0) diff --git a/src/backends/meta-screen-cast-stream-src.h b/src/backends/meta-screen-cast-stream-src.h index 9a850b7dd..7d7a44ca9 100644 --- a/src/backends/meta-screen-cast-stream-src.h +++ b/src/backends/meta-screen-cast-stream-src.h @@ -91,11 +91,11 @@ gboolean meta_screen_cast_stream_src_is_enabled (MetaScreenCastStreamSrc *src); MetaScreenCastRecordResult meta_screen_cast_stream_src_maybe_record_frame (MetaScreenCastStreamSrc *src, MetaScreenCastRecordFlag flags, - const cairo_region_t *redraw_clip); + const MtkRegion *redraw_clip); MetaScreenCastRecordResult meta_screen_cast_stream_src_maybe_record_frame_with_timestamp (MetaScreenCastStreamSrc *src, MetaScreenCastRecordFlag flags, - const cairo_region_t *redraw_clip, + const MtkRegion *redraw_clip, int64_t frame_timestamp_us); gboolean meta_screen_cast_stream_src_pending_follow_up_frame (MetaScreenCastStreamSrc *src); diff --git a/src/backends/meta-screen-cast-virtual-stream-src.c b/src/backends/meta-screen-cast-virtual-stream-src.c index 19f2ddb59..160ab7acd 100644 --- a/src/backends/meta-screen-cast-virtual-stream-src.c +++ b/src/backends/meta-screen-cast-virtual-stream-src.c @@ -194,11 +194,11 @@ uninhibit_hw_cursor (MetaScreenCastVirtualStreamSrc *virtual_src) } static void -actors_painted (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +actors_painted (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (user_data); MetaScreenCastRecordFlag flags; diff --git a/src/backends/meta-stage-impl-private.h b/src/backends/meta-stage-impl-private.h index 9a9ffed09..7f2afebc6 100644 --- a/src/backends/meta-stage-impl-private.h +++ b/src/backends/meta-stage-impl-private.h @@ -25,8 +25,6 @@ #pragma once -#include - #include "backends/meta-backend-types.h" #include "clutter/clutter.h" diff --git a/src/backends/meta-stage-impl.c b/src/backends/meta-stage-impl.c index 6872abfef..c95bcf60d 100644 --- a/src/backends/meta-stage-impl.c +++ b/src/backends/meta-stage-impl.c @@ -132,8 +132,8 @@ meta_stage_impl_resize (ClutterStageWindow *stage_window, static void paint_damage_region (ClutterStageWindow *stage_window, ClutterStageView *view, - cairo_region_t *swap_region, - cairo_region_t *queued_redraw_clip) + MtkRegion *swap_region, + MtkRegion *queued_redraw_clip) { CoglFramebuffer *framebuffer = clutter_stage_view_get_framebuffer (view); CoglContext *ctx = cogl_framebuffer_get_context (framebuffer); @@ -154,13 +154,13 @@ paint_damage_region (ClutterStageWindow *stage_window, cogl_pipeline_set_color4ub (overlay_blue, 0x00, 0x00, 0x33, 0x33); } - n_rects = cairo_region_num_rectangles (swap_region); + n_rects = mtk_region_num_rectangles (swap_region); for (i = 0; i < n_rects; i++) { MtkRectangle rect; float x_1, x_2, y_1, y_2; - cairo_region_get_rectangle (swap_region, i, &rect); + rect = mtk_region_get_rectangle (swap_region, i); x_1 = rect.x; x_2 = rect.x + rect.width; y_1 = rect.y; @@ -180,13 +180,13 @@ paint_damage_region (ClutterStageWindow *stage_window, cogl_pipeline_set_color4ub (overlay_red, 0x33, 0x00, 0x00, 0x33); } - n_rects = cairo_region_num_rectangles (queued_redraw_clip); + n_rects = mtk_region_num_rectangles (queued_redraw_clip); for (i = 0; i < n_rects; i++) { MtkRectangle rect; float x_1, x_2, y_1, y_2; - cairo_region_get_rectangle (queued_redraw_clip, i, &rect); + rect = mtk_region_get_rectangle (queued_redraw_clip, i); x_1 = rect.x; x_2 = rect.x + rect.width; y_1 = rect.y; @@ -202,7 +202,7 @@ paint_damage_region (ClutterStageWindow *stage_window, static void queue_damage_region (ClutterStageWindow *stage_window, ClutterStageView *stage_view, - cairo_region_t *damage_region) + MtkRegion *damage_region) { int *damage, n_rects, i; g_autofree int *freeme = NULL; @@ -211,7 +211,7 @@ queue_damage_region (ClutterStageWindow *stage_window, int fb_width; int fb_height; - if (cairo_region_is_empty (damage_region)) + if (mtk_region_is_empty (damage_region)) return; framebuffer = clutter_stage_view_get_onscreen (stage_view); @@ -222,7 +222,7 @@ queue_damage_region (ClutterStageWindow *stage_window, fb_width = cogl_framebuffer_get_width (framebuffer); fb_height = cogl_framebuffer_get_height (framebuffer); - n_rects = cairo_region_num_rectangles (damage_region); + n_rects = mtk_region_num_rectangles (damage_region); if (n_rects < MAX_STACK_RECTS) damage = g_newa (int, n_rects * 4); @@ -233,7 +233,7 @@ queue_damage_region (ClutterStageWindow *stage_window, { MtkRectangle rect; - cairo_region_get_rectangle (damage_region, i, &rect); + rect = mtk_region_get_rectangle (damage_region, i); clutter_stage_view_transform_rect_to_onscreen (stage_view, &rect, @@ -254,7 +254,7 @@ queue_damage_region (ClutterStageWindow *stage_window, static void swap_framebuffer (ClutterStageWindow *stage_window, ClutterStageView *stage_view, - cairo_region_t *swap_region, + MtkRegion *swap_region, gboolean swap_with_damage, ClutterFrame *frame) { @@ -273,13 +273,13 @@ swap_framebuffer (ClutterStageWindow *stage_window, int *damage, n_rects, i; CoglFrameInfo *frame_info; - n_rects = cairo_region_num_rectangles (swap_region); + n_rects = mtk_region_num_rectangles (swap_region); damage = g_newa (int, n_rects * 4); for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (swap_region, i, &rect); + rect = mtk_region_get_rectangle (swap_region, i); damage[i * 4] = rect.x; damage[i * 4 + 1] = rect.y; damage[i * 4 + 2] = rect.width; @@ -333,20 +333,20 @@ swap_framebuffer (ClutterStageWindow *stage_window, } } -static cairo_region_t * -offset_scale_and_clamp_region (const cairo_region_t *region, - int offset_x, - int offset_y, - float scale) +static MtkRegion * +offset_scale_and_clamp_region (const MtkRegion *region, + int offset_x, + int offset_y, + float scale) { int n_rects, i; MtkRectangle *rects; g_autofree MtkRectangle *freeme = NULL; - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); if (n_rects == 0) - return cairo_region_create (); + return mtk_region_create (); if (n_rects < MAX_STACK_RECTS) rects = g_newa (MtkRectangle, n_rects); @@ -358,7 +358,7 @@ offset_scale_and_clamp_region (const cairo_region_t *region, MtkRectangle *rect = &rects[i]; graphene_rect_t tmp; - cairo_region_get_rectangle (region, i, rect); + *rect = mtk_region_get_rectangle (region, i); tmp = mtk_rectangle_to_graphene_rect (rect); graphene_rect_offset (&tmp, offset_x, offset_y); @@ -367,23 +367,23 @@ offset_scale_and_clamp_region (const cairo_region_t *region, rect); } - return cairo_region_create_rectangles (rects, n_rects); + return mtk_region_create_rectangles (rects, n_rects); } -static cairo_region_t * -scale_offset_and_clamp_region (const cairo_region_t *region, - float scale, - int offset_x, - int offset_y) +static MtkRegion * +scale_offset_and_clamp_region (const MtkRegion *region, + float scale, + int offset_x, + int offset_y) { int n_rects, i; MtkRectangle *rects; g_autofree MtkRectangle *freeme = NULL; - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); if (n_rects == 0) - return cairo_region_create (); + return mtk_region_create (); if (n_rects < MAX_STACK_RECTS) rects = g_newa (MtkRectangle, n_rects); @@ -395,7 +395,7 @@ scale_offset_and_clamp_region (const cairo_region_t *region, MtkRectangle *rect = &rects[i]; graphene_rect_t tmp; - cairo_region_get_rectangle (region, i, rect); + *rect = mtk_region_get_rectangle (region, i); tmp = mtk_rectangle_to_graphene_rect (rect); graphene_rect_scale (&tmp, scale, scale, &tmp); @@ -405,13 +405,13 @@ scale_offset_and_clamp_region (const cairo_region_t *region, rect); } - return cairo_region_create_rectangles (rects, n_rects); + return mtk_region_create_rectangles (rects, n_rects); } static void paint_stage (MetaStageImpl *stage_impl, ClutterStageView *stage_view, - cairo_region_t *redraw_clip, + MtkRegion *redraw_clip, ClutterFrame *frame) { ClutterStage *stage = stage_impl->wrapper; @@ -422,31 +422,31 @@ paint_stage (MetaStageImpl *stage_impl, clutter_stage_view_after_paint (stage_view, redraw_clip); } -static cairo_region_t * +static MtkRegion * transform_swap_region_to_onscreen (ClutterStageView *stage_view, - cairo_region_t *swap_region) + MtkRegion *swap_region) { CoglFramebuffer *onscreen = clutter_stage_view_get_onscreen (stage_view); int n_rects, i; MtkRectangle *rects; - cairo_region_t *transformed_region; + MtkRegion *transformed_region; int width, height; width = cogl_framebuffer_get_width (onscreen); height = cogl_framebuffer_get_height (onscreen); - n_rects = cairo_region_num_rectangles (swap_region); + n_rects = mtk_region_num_rectangles (swap_region); rects = g_newa (MtkRectangle, n_rects); for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (swap_region, i, &rects[i]); + rects[i] = mtk_region_get_rectangle (swap_region, i); clutter_stage_view_transform_rect_to_onscreen (stage_view, &rects[i], width, height, &rects[i]); } - transformed_region = cairo_region_create_rectangles (rects, n_rects); + transformed_region = mtk_region_create_rectangles (rects, n_rects); return transformed_region; } @@ -506,10 +506,10 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, gboolean buffer_has_valid_damage_history = FALSE; gboolean has_buffer_age; gboolean swap_with_damage; - cairo_region_t *redraw_clip; - cairo_region_t *queued_redraw_clip = NULL; - cairo_region_t *fb_clip_region; - cairo_region_t *swap_region; + g_autoptr (MtkRegion) redraw_clip = NULL; + g_autoptr (MtkRegion) queued_redraw_clip = NULL; + g_autoptr (MtkRegion) fb_clip_region = NULL; + g_autoptr (MtkRegion) swap_region = NULL; ClutterDrawDebugFlag paint_debug_flags; ClutterDamageHistory *damage_history; float fb_scale; @@ -577,16 +577,16 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, .width = fb_width, .height = fb_height, }; - fb_clip_region = cairo_region_create_rectangle (&fb_rect); + fb_clip_region = mtk_region_create_rectangle (&fb_rect); - g_clear_pointer (&redraw_clip, cairo_region_destroy); - redraw_clip = cairo_region_create_rectangle (&view_rect); + g_clear_pointer (&redraw_clip, mtk_region_unref); + redraw_clip = mtk_region_create_rectangle (&view_rect); if (G_UNLIKELY (paint_debug_flags & CLUTTER_DEBUG_PAINT_DAMAGE_REGION)) - queued_redraw_clip = cairo_region_reference (redraw_clip); + queued_redraw_clip = mtk_region_ref (redraw_clip); } - g_return_if_fail (!cairo_region_is_empty (fb_clip_region)); + g_return_if_fail (!mtk_region_is_empty (fb_clip_region)); /* XXX: It seems there will be a race here in that the stage * window may be resized before the cogl_onscreen_swap_region @@ -598,11 +598,11 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, */ /* swap_region does not need damage history, set it up before that */ if (!use_clipped_redraw) - swap_region = cairo_region_create (); + swap_region = mtk_region_create (); else if (clutter_stage_view_has_shadowfb (stage_view)) - swap_region = cairo_region_reference (fb_clip_region); + swap_region = mtk_region_ref (fb_clip_region); else - swap_region = cairo_region_copy (fb_clip_region); + swap_region = mtk_region_copy (fb_clip_region); swap_with_damage = FALSE; if (has_buffer_age) @@ -615,17 +615,17 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, for (age = 1; age <= buffer_age; age++) { - const cairo_region_t *old_damage; + const MtkRegion *old_damage; old_damage = clutter_damage_history_lookup (damage_history, age); - cairo_region_union (fb_clip_region, old_damage); + mtk_region_union (fb_clip_region, old_damage); } meta_topic (META_DEBUG_BACKEND, "Reusing back buffer(age=%d) - repairing region: num rects: %d", buffer_age, - cairo_region_num_rectangles (fb_clip_region)); + mtk_region_num_rectangles (fb_clip_region)); swap_with_damage = TRUE; } @@ -643,7 +643,7 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, * offset_scale_and_clamp_region. So we need to ensure redraw_clip * is a superset of fb_clip_region to avoid such gaps. */ - cairo_region_destroy (redraw_clip); + g_clear_pointer (&redraw_clip, mtk_region_unref); redraw_clip = scale_offset_and_clamp_region (fb_clip_region, 1.0 / fb_scale, view_rect.x, @@ -652,11 +652,10 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, if (paint_debug_flags & CLUTTER_DEBUG_PAINT_DAMAGE_REGION) { - cairo_region_t *debug_redraw_clip; + g_autoptr (MtkRegion) debug_redraw_clip = NULL; - debug_redraw_clip = cairo_region_create_rectangle (&view_rect); + debug_redraw_clip = mtk_region_create_rectangle (&view_rect); paint_stage (stage_impl, stage_view, debug_redraw_clip, frame); - cairo_region_destroy (debug_redraw_clip); } else if (use_clipped_redraw) { @@ -675,15 +674,15 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, paint_stage (stage_impl, stage_view, redraw_clip, frame); } - g_clear_pointer (&redraw_clip, cairo_region_destroy); - g_clear_pointer (&fb_clip_region, cairo_region_destroy); + g_clear_pointer (&redraw_clip, mtk_region_unref); + g_clear_pointer (&fb_clip_region, mtk_region_unref); COGL_TRACE_BEGIN_SCOPED (MetaStageImplRedrawViewSwapFramebuffer, "Paint (swap framebuffer)"); if (queued_redraw_clip) { - cairo_region_t *swap_region_in_stage_space; + g_autoptr (MtkRegion) swap_region_in_stage_space = NULL; swap_region_in_stage_space = scale_offset_and_clamp_region (swap_region, @@ -691,25 +690,22 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, view_rect.x, view_rect.y); - cairo_region_subtract (swap_region_in_stage_space, queued_redraw_clip); + mtk_region_subtract (swap_region_in_stage_space, queued_redraw_clip); paint_damage_region (stage_window, stage_view, swap_region_in_stage_space, queued_redraw_clip); - - cairo_region_destroy (queued_redraw_clip); - cairo_region_destroy (swap_region_in_stage_space); } if (clutter_stage_view_get_onscreen (stage_view) != clutter_stage_view_get_framebuffer (stage_view) && - cairo_region_num_rectangles (swap_region) != 0) + mtk_region_num_rectangles (swap_region) != 0) { - cairo_region_t *transformed_swap_region; + g_autoptr (MtkRegion) transformed_swap_region = NULL; transformed_swap_region = transform_swap_region_to_onscreen (stage_view, swap_region); - cairo_region_destroy (swap_region); - swap_region = transformed_swap_region; + g_clear_pointer (&swap_region, mtk_region_unref); + swap_region = g_steal_pointer (&transformed_swap_region); } swap_framebuffer (stage_window, @@ -717,8 +713,6 @@ meta_stage_impl_redraw_view_primary (MetaStageImpl *stage_impl, swap_region, swap_with_damage, frame); - - cairo_region_destroy (swap_region); } static gboolean diff --git a/src/backends/meta-stage-private.h b/src/backends/meta-stage-private.h index d3d777def..e288f92bb 100644 --- a/src/backends/meta-stage-private.h +++ b/src/backends/meta-stage-private.h @@ -36,11 +36,11 @@ typedef enum META_STAGE_WATCH_AFTER_PAINT, } MetaStageWatchPhase; -typedef void (* MetaStageWatchFunc) (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data); +typedef void (* MetaStageWatchFunc) (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data); ClutterActor *meta_stage_new (MetaBackend *backend); diff --git a/src/backends/meta-stage-view-private.h b/src/backends/meta-stage-view-private.h index 823490b4d..838ea3e87 100644 --- a/src/backends/meta-stage-view-private.h +++ b/src/backends/meta-stage-view-private.h @@ -25,8 +25,6 @@ #pragma once -#include - #include "backends/meta-stage-view.h" G_BEGIN_DECLS diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c index 172a6186f..a532b58e5 100644 --- a/src/backends/meta-stage.c +++ b/src/backends/meta-stage.c @@ -175,11 +175,11 @@ meta_stage_finalize (GObject *object) } static void -notify_watchers_for_mode (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - MetaStageWatchPhase watch_phase) +notify_watchers_for_mode (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + MetaStageWatchPhase watch_phase) { GPtrArray *watchers; int i; @@ -215,7 +215,7 @@ meta_stage_paint (ClutterActor *actor, MetaStage *stage = META_STAGE (actor); ClutterStageView *view; ClutterFrame *frame; - const cairo_region_t *redraw_clip; + const MtkRegion *redraw_clip; CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor, paint_context); @@ -258,10 +258,10 @@ meta_stage_paint (ClutterActor *actor, } static void -meta_stage_paint_view (ClutterStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame) +meta_stage_paint_view (ClutterStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame) { MetaStage *meta_stage = META_STAGE (stage); diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c index f01890460..3a6799c63 100644 --- a/src/backends/native/meta-backend-native.c +++ b/src/backends/native/meta-backend-native.c @@ -427,7 +427,7 @@ meta_backend_native_set_pointer_constraint (MetaBackend *backend, ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend); MetaPointerConstraintImpl *constraint_impl = NULL; - cairo_region_t *region; + MtkRegion *region; if (constraint) { diff --git a/src/backends/native/meta-pointer-constraint-native.c b/src/backends/native/meta-pointer-constraint-native.c index 8f18b54e4..fb2053df3 100644 --- a/src/backends/native/meta-pointer-constraint-native.c +++ b/src/backends/native/meta-pointer-constraint-native.c @@ -32,7 +32,7 @@ struct _MetaPointerConstraintImplNative { MetaPointerConstraintImpl parent; MetaPointerConstraint *constraint; - cairo_region_t *region; + MtkRegion *region; double min_edge_distance; }; @@ -223,8 +223,8 @@ add_band_bottom_edges (MetaBox *boxes, } static void -region_to_outline (cairo_region_t *region, - GArray *borders) +region_to_outline (MtkRegion *region, + GArray *borders) { MetaBox *boxes; int num_boxes; @@ -249,12 +249,12 @@ region_to_outline (cairo_region_t *region, * */ - num_boxes = cairo_region_num_rectangles (region); + num_boxes = mtk_region_num_rectangles (region); boxes = g_new (MetaBox, num_boxes); for (i = 0; i < num_boxes; i++) { MtkRectangle rect; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); boxes[i] = (MetaBox) { .x1 = rect.x, .y1 = rect.y, @@ -451,7 +451,7 @@ meta_pointer_constraint_impl_native_constraint (MetaPointerConstraintImpl *const float *y_inout) { MetaPointerConstraintImplNative *constraint_impl_native; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; float x, y; g_autoptr (GArray) borders = NULL; MetaLine2 motion; @@ -460,7 +460,7 @@ meta_pointer_constraint_impl_native_constraint (MetaPointerConstraintImpl *const constraint_impl_native = META_POINTER_CONSTRAINT_IMPL_NATIVE (constraint_impl); - region = cairo_region_reference (constraint_impl_native->region); + region = mtk_region_ref (constraint_impl_native->region); x = *x_inout; y = *y_inout; @@ -484,7 +484,6 @@ meta_pointer_constraint_impl_native_constraint (MetaPointerConstraintImpl *const * confined motion vectors. */ region_to_outline (region, borders); - cairo_region_destroy (region); motion = (MetaLine2) { .a = (MetaVector2) { @@ -590,19 +589,19 @@ meta_pointer_constraint_impl_native_ensure_constrained (MetaPointerConstraintImp { MetaPointerConstraintImplNative *constraint_impl_native; graphene_point_t point; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; float x; float y; constraint_impl_native = META_POINTER_CONSTRAINT_IMPL_NATIVE (constraint_impl); - region = cairo_region_reference (constraint_impl_native->region); + region = mtk_region_ref (constraint_impl_native->region); clutter_seat_query_state (clutter_input_device_get_seat (device), device, NULL, &point, NULL); x = point.x; y = point.y; - if (!cairo_region_contains_point (region, (int) x, (int) y)) + if (!mtk_region_contains_point (region, (int) x, (int) y)) { g_autoptr (GArray) borders = NULL; float closest_distance_2 = FLT_MAX; @@ -632,8 +631,6 @@ meta_pointer_constraint_impl_native_ensure_constrained (MetaPointerConstraintImp seat = clutter_backend_get_default_seat (clutter_get_default_backend ()); clutter_seat_warp_pointer (seat, x, y); } - - cairo_region_destroy (region); } static void @@ -642,7 +639,7 @@ meta_pointer_constraint_impl_native_finalize (GObject *object) MetaPointerConstraintImplNative *constraint_impl_native; constraint_impl_native = META_POINTER_CONSTRAINT_IMPL_NATIVE (object); - g_clear_pointer (&constraint_impl_native->region, cairo_region_destroy); + g_clear_pointer (&constraint_impl_native->region, mtk_region_unref); G_OBJECT_CLASS (meta_pointer_constraint_impl_native_parent_class)->finalize (object); } @@ -669,7 +666,7 @@ meta_pointer_constraint_impl_native_class_init (MetaPointerConstraintImplNativeC MetaPointerConstraintImpl * meta_pointer_constraint_impl_native_new (MetaPointerConstraint *constraint, - const cairo_region_t *region, + const MtkRegion *region, double min_edge_distance) { MetaPointerConstraintImplNative *constraint_impl; @@ -677,7 +674,7 @@ meta_pointer_constraint_impl_native_new (MetaPointerConstraint *constraint, constraint_impl = g_object_new (META_TYPE_POINTER_CONSTRAINT_IMPL_NATIVE, NULL); constraint_impl->constraint = constraint; - constraint_impl->region = cairo_region_copy (region); + constraint_impl->region = mtk_region_copy (region); constraint_impl->min_edge_distance = min_edge_distance; return META_POINTER_CONSTRAINT_IMPL (constraint_impl); diff --git a/src/backends/native/meta-pointer-constraint-native.h b/src/backends/native/meta-pointer-constraint-native.h index b8112de1c..0f0b58a42 100644 --- a/src/backends/native/meta-pointer-constraint-native.h +++ b/src/backends/native/meta-pointer-constraint-native.h @@ -36,7 +36,7 @@ G_DECLARE_FINAL_TYPE (MetaPointerConstraintImplNative, MetaPointerConstraintImpl) MetaPointerConstraintImpl * meta_pointer_constraint_impl_native_new (MetaPointerConstraint *constraint_impl, - const cairo_region_t *region, + const MtkRegion *region, double min_edge_distance); G_END_DECLS diff --git a/src/compositor/compositor.c b/src/compositor/compositor.c index dac170e9f..3b8c15ee9 100644 --- a/src/compositor/compositor.c +++ b/src/compositor/compositor.c @@ -1024,7 +1024,7 @@ meta_compositor_real_before_paint (MetaCompositor *compositor, ClutterActor *stage = meta_backend_get_stage (priv->backend); ClutterStageView *stage_view; MtkRectangle stage_rect; - cairo_region_t *unobscured_region; + MtkRegion *unobscured_region; GList *l; stage_rect = (MtkRectangle) { @@ -1033,17 +1033,17 @@ meta_compositor_real_before_paint (MetaCompositor *compositor, clutter_actor_get_height (stage), }; - unobscured_region = cairo_region_create_rectangle (&stage_rect); + unobscured_region = mtk_region_create_rectangle (&stage_rect); meta_cullable_cull_unobscured (META_CULLABLE (priv->window_group), unobscured_region); - cairo_region_destroy (unobscured_region); + mtk_region_unref (unobscured_region); - unobscured_region = cairo_region_create_rectangle (&stage_rect); + unobscured_region = mtk_region_create_rectangle (&stage_rect); meta_cullable_cull_unobscured (META_CULLABLE (priv->top_window_group), unobscured_region); - cairo_region_destroy (unobscured_region); + mtk_region_unref (unobscured_region); - unobscured_region = cairo_region_create_rectangle (&stage_rect); + unobscured_region = mtk_region_create_rectangle (&stage_rect); meta_cullable_cull_unobscured (META_CULLABLE (priv->feedback_group), unobscured_region); - cairo_region_destroy (unobscured_region); + mtk_region_unref (unobscured_region); stage_view = meta_compositor_view_get_stage_view (compositor_view); diff --git a/src/compositor/meta-background-actor-private.h b/src/compositor/meta-background-actor-private.h index f74dd98cc..d9878c663 100644 --- a/src/compositor/meta-background-actor-private.h +++ b/src/compositor/meta-background-actor-private.h @@ -4,4 +4,4 @@ #include "meta/meta-background-actor.h" -cairo_region_t *meta_background_actor_get_clip_region (MetaBackgroundActor *self); +MtkRegion *meta_background_actor_get_clip_region (MetaBackgroundActor *self); diff --git a/src/compositor/meta-background-actor.c b/src/compositor/meta-background-actor.c index 7be0f99a8..a58d41a41 100644 --- a/src/compositor/meta-background-actor.c +++ b/src/compositor/meta-background-actor.c @@ -164,8 +164,8 @@ meta_background_actor_new (MetaDisplay *display, } static void -meta_background_actor_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_background_actor_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); @@ -176,8 +176,8 @@ meta_background_actor_cull_unobscured (MetaCullable *cullable, } static void -meta_background_actor_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_background_actor_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { MetaBackgroundActor *self = META_BACKGROUND_ACTOR (cullable); @@ -198,11 +198,11 @@ cullable_iface_init (MetaCullableInterface *iface) * meta_background_actor_get_clip_region: * @self: a #MetaBackgroundActor * - * Return value (transfer none): a #cairo_region_t that represents the part of + * Return value (transfer none): a #MtkRegion that represents the part of * the background not obscured by other #MetaBackgroundActor or * #MetaWindowActor objects. */ -cairo_region_t * +MtkRegion * meta_background_actor_get_clip_region (MetaBackgroundActor *self) { if (!self->content) diff --git a/src/compositor/meta-background-content-private.h b/src/compositor/meta-background-content-private.h index e711f0ffe..36031a43e 100644 --- a/src/compositor/meta-background-content-private.h +++ b/src/compositor/meta-background-content-private.h @@ -4,10 +4,10 @@ #include "meta/meta-background-content.h" -cairo_region_t *meta_background_content_get_clip_region (MetaBackgroundContent *self); +MtkRegion *meta_background_content_get_clip_region (MetaBackgroundContent *self); void meta_background_content_cull_unobscured (MetaBackgroundContent *self, - cairo_region_t *unobscured_region); + MtkRegion *unobscured_region); void meta_background_content_cull_redraw_clip (MetaBackgroundContent *self, - cairo_region_t *clip_region); + MtkRegion *clip_region); diff --git a/src/compositor/meta-background-content.c b/src/compositor/meta-background-content.c index f367c5da1..cbb3a0a36 100644 --- a/src/compositor/meta-background-content.c +++ b/src/compositor/meta-background-content.c @@ -232,8 +232,8 @@ struct _MetaBackgroundContent MtkRectangle texture_area; int texture_width, texture_height; - cairo_region_t *clip_region; - cairo_region_t *unobscured_region; + MtkRegion *clip_region; + MtkRegion *unobscured_region; }; static void clutter_content_iface_init (ClutterContentInterface *iface); @@ -264,29 +264,29 @@ static GParamSpec *properties[N_PROPS] = { NULL, }; static void set_clip_region (MetaBackgroundContent *self, - cairo_region_t *clip_region) + MtkRegion *clip_region) { - g_clear_pointer (&self->clip_region, cairo_region_destroy); + g_clear_pointer (&self->clip_region, mtk_region_unref); if (clip_region) { - if (cairo_region_is_empty (clip_region)) - self->clip_region = cairo_region_reference (clip_region); + if (mtk_region_is_empty (clip_region)) + self->clip_region = mtk_region_ref (clip_region); else - self->clip_region = cairo_region_copy (clip_region); + self->clip_region = mtk_region_copy (clip_region); } } static void set_unobscured_region (MetaBackgroundContent *self, - cairo_region_t *unobscured_region) + MtkRegion *unobscured_region) { - g_clear_pointer (&self->unobscured_region, cairo_region_destroy); + g_clear_pointer (&self->unobscured_region, mtk_region_unref); if (unobscured_region) { - if (cairo_region_is_empty (unobscured_region)) - self->unobscured_region = cairo_region_reference (unobscured_region); + if (mtk_region_is_empty (unobscured_region)) + self->unobscured_region = mtk_region_ref (unobscured_region); else - self->unobscured_region = cairo_region_copy (unobscured_region); + self->unobscured_region = mtk_region_copy (unobscured_region); } } @@ -661,12 +661,12 @@ meta_background_content_paint_content (ClutterContent *content, ClutterActorBox actor_box; MtkRectangle rect_within_actor; MtkRectangle rect_within_stage; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; int i, n_rects; float transformed_x, transformed_y, transformed_width, transformed_height; gboolean untransformed; - if ((self->clip_region && cairo_region_is_empty (self->clip_region))) + if ((self->clip_region && mtk_region_is_empty (self->clip_region))) return; clutter_actor_get_content_box (actor, &actor_box); @@ -704,22 +704,22 @@ meta_background_content_paint_content (ClutterContent *content, { if (self->clip_region) { - region = cairo_region_copy (self->clip_region); - cairo_region_intersect_rectangle (region, &rect_within_stage); + region = mtk_region_copy (self->clip_region); + mtk_region_intersect_rectangle (region, &rect_within_stage); } else { - const cairo_region_t *redraw_clip; + const MtkRegion *redraw_clip; redraw_clip = clutter_paint_context_get_redraw_clip (paint_context); if (redraw_clip) { - region = cairo_region_copy (redraw_clip); - cairo_region_intersect_rectangle (region, &rect_within_stage); + region = mtk_region_copy (redraw_clip); + mtk_region_intersect_rectangle (region, &rect_within_stage); } else { - region = cairo_region_create_rectangle (&rect_within_stage); + region = mtk_region_create_rectangle (&rect_within_stage); } } } @@ -727,24 +727,21 @@ meta_background_content_paint_content (ClutterContent *content, { if (self->clip_region) { - region = cairo_region_copy (self->clip_region); - cairo_region_intersect_rectangle (region, &rect_within_actor); + region = mtk_region_copy (self->clip_region); + mtk_region_intersect_rectangle (region, &rect_within_actor); } else { - region = cairo_region_create_rectangle (&rect_within_actor); + region = mtk_region_create_rectangle (&rect_within_actor); } } if (self->unobscured_region) - cairo_region_intersect (region, self->unobscured_region); + mtk_region_intersect (region, self->unobscured_region); /* region is now in actor space */ - if (cairo_region_is_empty (region)) - { - cairo_region_destroy (region); - return; - } + if (mtk_region_is_empty (region)) + return; setup_pipeline (self, actor, paint_context, &rect_within_actor); set_glsl_parameters (self, &rect_within_actor); @@ -753,24 +750,22 @@ meta_background_content_paint_content (ClutterContent *content, * fall back and draw the whole thing */ #define MAX_RECTS 64 - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); if (n_rects <= MAX_RECTS) { for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); paint_clipped_rectangle (self, node, &actor_box, &rect); } } else { MtkRectangle rect; - cairo_region_get_extents (region, &rect); + rect = mtk_region_get_extents (region); paint_clipped_rectangle (self, node, &actor_box, &rect); } - - cairo_region_destroy (region); } static gboolean @@ -1208,7 +1203,7 @@ meta_background_content_set_rounded_clip_bounds (MetaBackgroundContent *self, clutter_content_invalidate (CLUTTER_CONTENT (self)); } -cairo_region_t * +MtkRegion * meta_background_content_get_clip_region (MetaBackgroundContent *self) { return self->clip_region; @@ -1216,14 +1211,14 @@ meta_background_content_get_clip_region (MetaBackgroundContent *self) void meta_background_content_cull_unobscured (MetaBackgroundContent *self, - cairo_region_t *unobscured_region) + MtkRegion *unobscured_region) { set_unobscured_region (self, unobscured_region); } void meta_background_content_cull_redraw_clip (MetaBackgroundContent *self, - cairo_region_t *clip_region) + MtkRegion *clip_region) { set_clip_region (self, clip_region); } diff --git a/src/compositor/meta-background-group.c b/src/compositor/meta-background-group.c index 7091f178e..0c226ca8b 100644 --- a/src/compositor/meta-background-group.c +++ b/src/compositor/meta-background-group.c @@ -30,15 +30,15 @@ meta_background_group_class_init (MetaBackgroundGroupClass *klass) } static void -meta_background_group_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_background_group_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { meta_cullable_cull_unobscured_children (cullable, unobscured_region); } static void -meta_background_group_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_background_group_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { meta_cullable_cull_redraw_clip_children (cullable, clip_region); } diff --git a/src/compositor/meta-cullable.c b/src/compositor/meta-cullable.c index 20a56dcc3..7279f4ff3 100644 --- a/src/compositor/meta-cullable.c +++ b/src/compositor/meta-cullable.c @@ -46,12 +46,12 @@ has_active_effects (ClutterActor *actor) return FALSE; } -static cairo_region_t * -region_apply_transform_expand_maybe_ref (cairo_region_t *region, +static MtkRegion * +region_apply_transform_expand_maybe_ref (MtkRegion *region, graphene_matrix_t *transform) { - if (cairo_region_is_empty (region)) - return cairo_region_reference (region); + if (mtk_region_is_empty (region)) + return mtk_region_ref (region); return meta_region_apply_matrix_transform_expand (region, transform); } @@ -75,12 +75,12 @@ region_apply_transform_expand_maybe_ref (cairo_region_t *region, * so that actors underneath know not to draw there as well. */ -typedef void (* ChildCullMethod) (MetaCullable *cullable, - cairo_region_t *region); +typedef void (* ChildCullMethod) (MetaCullable *cullable, + MtkRegion *region); static void cull_out_children_common (MetaCullable *cullable, - cairo_region_t *region, + MtkRegion *region, ChildCullMethod method) { ClutterActor *actor = CLUTTER_ACTOR (cullable); @@ -121,7 +121,8 @@ cull_out_children_common (MetaCullable *cullable, if (needs_culling) { - cairo_region_t *actor_region, *reduced_region; + g_autoptr (MtkRegion) actor_region = NULL; + g_autoptr (MtkRegion) reduced_region = NULL; graphene_matrix_t actor_transform, inverted_actor_transform; clutter_actor_get_transform (child, &actor_transform); @@ -155,10 +156,7 @@ cull_out_children_common (MetaCullable *cullable, g_assert (reduced_region); - cairo_region_intersect (region, reduced_region); - - cairo_region_destroy (actor_region); - cairo_region_destroy (reduced_region); + mtk_region_intersect (region, reduced_region); } else { @@ -178,8 +176,8 @@ cull_out_children_common (MetaCullable *cullable, * See #MetaCullable and meta_cullable_cull_unobscured() for more details. */ void -meta_cullable_cull_unobscured_children (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_cullable_cull_unobscured_children (MetaCullable *cullable, + MtkRegion *unobscured_region) { cull_out_children_common (cullable, unobscured_region, @@ -197,8 +195,8 @@ meta_cullable_cull_unobscured_children (MetaCullable *cullable, * See #MetaCullable and meta_cullable_cull_redraw_clip() for more details. */ void -meta_cullable_cull_redraw_clip_children (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_cullable_cull_redraw_clip_children (MetaCullable *cullable, + MtkRegion *clip_region) { cull_out_children_common (cullable, clip_region, @@ -227,8 +225,8 @@ meta_cullable_default_init (MetaCullableInterface *iface) * helper method to do a simple cull across all their children. */ void -meta_cullable_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_cullable_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { META_CULLABLE_GET_IFACE (cullable)->cull_unobscured (cullable, unobscured_region); } @@ -251,8 +249,8 @@ meta_cullable_cull_unobscured (MetaCullable *cullable, * helper method to do a simple cull across all their children. */ void -meta_cullable_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_cullable_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { META_CULLABLE_GET_IFACE (cullable)->cull_redraw_clip (cullable, clip_region); } diff --git a/src/compositor/meta-cullable.h b/src/compositor/meta-cullable.h index 1b0b5a719..bb3c9fc33 100644 --- a/src/compositor/meta-cullable.h +++ b/src/compositor/meta-cullable.h @@ -35,21 +35,21 @@ struct _MetaCullableInterface { GTypeInterface g_iface; - void (* cull_unobscured) (MetaCullable *cullable, - cairo_region_t *unobscured_region); - void (* cull_redraw_clip) (MetaCullable *cullable, - cairo_region_t *clip_region); + void (* cull_unobscured) (MetaCullable *cullable, + MtkRegion *unobscured_region); + void (* cull_redraw_clip) (MetaCullable *cullable, + MtkRegion *clip_region); }; -void meta_cullable_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region); -void meta_cullable_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region); +void meta_cullable_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region); +void meta_cullable_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region); /* Utility methods for implementations */ -void meta_cullable_cull_unobscured_children (MetaCullable *cullable, - cairo_region_t *unobscured_region); -void meta_cullable_cull_redraw_clip_children (MetaCullable *cullable, - cairo_region_t *clip_region); +void meta_cullable_cull_unobscured_children (MetaCullable *cullable, + MtkRegion *unobscured_region); +void meta_cullable_cull_redraw_clip_children (MetaCullable *cullable, + MtkRegion *clip_region); G_END_DECLS diff --git a/src/compositor/meta-shadow-factory.c b/src/compositor/meta-shadow-factory.c index 738f938c6..25cb8f13d 100644 --- a/src/compositor/meta-shadow-factory.c +++ b/src/compositor/meta-shadow-factory.c @@ -200,7 +200,7 @@ meta_shadow_paint (MetaShadow *shadow, int window_width, int window_height, guint8 opacity, - cairo_region_t *clip, + MtkRegion *clip, gboolean clip_strictly) { float texture_width = cogl_texture_get_width (shadow->texture); @@ -212,7 +212,7 @@ meta_shadow_paint (MetaShadow *shadow, int dest_y[4]; int n_x, n_y; - if (clip && cairo_region_is_empty (clip)) + if (clip && mtk_region_is_empty (clip)) return; cogl_pipeline_set_color4ub (shadow->pipeline, @@ -279,7 +279,7 @@ meta_shadow_paint (MetaShadow *shadow, for (i = 0; i < n_x; i++) { - cairo_region_overlap_t overlap; + MtkRegionOverlap overlap; dest_rect.x = dest_x[i]; dest_rect.width = dest_x[i + 1] - dest_x[i]; @@ -288,11 +288,11 @@ meta_shadow_paint (MetaShadow *shadow, continue; if (clip) - overlap = cairo_region_contains_rectangle (clip, &dest_rect); + overlap = mtk_region_contains_rectangle (clip, &dest_rect); else - overlap = CAIRO_REGION_OVERLAP_IN; + overlap = MTK_REGION_OVERLAP_IN; - if (overlap == CAIRO_REGION_OVERLAP_OUT) + if (overlap == MTK_REGION_OVERLAP_OUT) continue; /* There's quite a bit of overhead from allocating a new @@ -301,8 +301,8 @@ meta_shadow_paint (MetaShadow *shadow, * unless we have to clip strictly it will be cheaper to * just draw the entire rectangle. */ - if (overlap == CAIRO_REGION_OVERLAP_IN || - (overlap == CAIRO_REGION_OVERLAP_PART && !clip_strictly)) + if (overlap == MTK_REGION_OVERLAP_IN || + (overlap == MTK_REGION_OVERLAP_PART && !clip_strictly)) { cogl_framebuffer_draw_textured_rectangle (framebuffer, shadow->pipeline, @@ -311,21 +311,21 @@ meta_shadow_paint (MetaShadow *shadow, src_x[i], src_y[j], src_x[i + 1], src_y[j + 1]); } - else if (overlap == CAIRO_REGION_OVERLAP_PART) + else if (overlap == MTK_REGION_OVERLAP_PART) { - cairo_region_t *intersection; + g_autoptr (MtkRegion) intersection = NULL; int n_rectangles, k; - intersection = cairo_region_create_rectangle (&dest_rect); - cairo_region_intersect (intersection, clip); + intersection = mtk_region_create_rectangle (&dest_rect); + mtk_region_intersect (intersection, clip); - n_rectangles = cairo_region_num_rectangles (intersection); + n_rectangles = mtk_region_num_rectangles (intersection); for (k = 0; k < n_rectangles; k++) { MtkRectangle rect; float src_x1, src_x2, src_y1, src_y2; - cairo_region_get_rectangle (intersection, k, &rect); + rect = mtk_region_get_rectangle (intersection, k); /* Separately linear interpolate X and Y coordinates in the source * based on the destination X and Y coordinates */ @@ -346,8 +346,6 @@ meta_shadow_paint (MetaShadow *shadow, rect.x + rect.width, rect.y + rect.height, src_x1, src_y1, src_x2, src_y2); } - - cairo_region_destroy (intersection); } } } @@ -565,13 +563,13 @@ blur_xspan (guchar *row, } static void -blur_rows (cairo_region_t *convolve_region, - int x_offset, - int y_offset, - guchar *buffer, - int buffer_width, - int buffer_height, - int d) +blur_rows (MtkRegion *convolve_region, + int x_offset, + int y_offset, + guchar *buffer, + int buffer_width, + int buffer_height, + int d) { int i, j; int n_rectangles; @@ -579,12 +577,12 @@ blur_rows (cairo_region_t *convolve_region, tmp_buffer = g_malloc (buffer_width); - n_rectangles = cairo_region_num_rectangles (convolve_region); + n_rectangles = mtk_region_num_rectangles (convolve_region); for (i = 0; i < n_rectangles; i++) { MtkRectangle rect; - cairo_region_get_rectangle (convolve_region, i, &rect); + rect = mtk_region_get_rectangle (convolve_region, i); for (j = y_offset + rect.y; j < y_offset + rect.y + rect.height; j++) { @@ -702,8 +700,8 @@ flip_buffer (guchar *buffer, } static void -make_shadow (MetaShadow *shadow, - cairo_region_t *region) +make_shadow (MetaShadow *shadow, + MtkRegion *region) { ClutterBackend *backend = clutter_get_default_backend (); CoglContext *ctx = clutter_backend_get_cogl_context (backend); @@ -711,8 +709,8 @@ make_shadow (MetaShadow *shadow, int d = get_box_filter_size (shadow->key.radius); int spread = get_shadow_spread (shadow->key.radius); MtkRectangle extents; - cairo_region_t *row_convolve_region; - cairo_region_t *column_convolve_region; + g_autoptr (MtkRegion) row_convolve_region = NULL; + g_autoptr (MtkRegion) column_convolve_region = NULL; guchar *buffer; int buffer_width; int buffer_height; @@ -720,7 +718,7 @@ make_shadow (MetaShadow *shadow, int y_offset; int n_rectangles, j, k; - cairo_region_get_extents (region, &extents); + extents = mtk_region_get_extents (region); /* In the case where top_fade >= 0 and the portion above the top * edge of the shape will be cropped, it seems like we could create @@ -760,12 +758,12 @@ make_shadow (MetaShadow *shadow, y_offset = spread; /* Step 1: unblurred image */ - n_rectangles = cairo_region_num_rectangles (region); + n_rectangles = mtk_region_num_rectangles (region); for (k = 0; k < n_rectangles; k++) { MtkRectangle rect; - cairo_region_get_rectangle (region, k, &rect); + rect = mtk_region_get_rectangle (region, k); for (j = y_offset + rect.y; j < y_offset + rect.y + rect.height; j++) memset (buffer + buffer_width * j + x_offset + rect.x, 255, rect.width); } @@ -813,8 +811,6 @@ make_shadow (MetaShadow *shadow, g_error_free (error); } - cairo_region_destroy (row_convolve_region); - cairo_region_destroy (column_convolve_region); g_free (buffer); shadow->pipeline = meta_create_texture_pipeline (shadow->texture); @@ -880,7 +876,7 @@ meta_shadow_factory_get_shadow (MetaShadowFactory *factory, MetaShadowParams *params; MetaShadowCacheKey key; MetaShadow *shadow; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; int spread; int shape_border_top, shape_border_right, shape_border_bottom, shape_border_left; int inner_border_top, inner_border_right, inner_border_bottom, inner_border_left; @@ -983,8 +979,6 @@ meta_shadow_factory_get_shadow (MetaShadowFactory *factory, region = meta_window_shape_to_region (shape, center_width, center_height); make_shadow (shadow, region); - cairo_region_destroy (region); - if (cacheable) g_hash_table_insert (factory->shadows, &shadow->key, shadow); diff --git a/src/compositor/meta-shaped-texture-private.h b/src/compositor/meta-shaped-texture-private.h index 24298db2b..1a6a5f194 100644 --- a/src/compositor/meta-shaped-texture-private.h +++ b/src/compositor/meta-shaped-texture-private.h @@ -37,7 +37,7 @@ void meta_shaped_texture_set_snippet (MetaShapedTexture *stex, void meta_shaped_texture_set_fallback_size (MetaShapedTexture *stex, int fallback_width, int fallback_height); -cairo_region_t * meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex); +MtkRegion * meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex); gboolean meta_shaped_texture_is_opaque (MetaShapedTexture *stex); gboolean meta_shaped_texture_has_alpha (MetaShapedTexture *stex); void meta_shaped_texture_set_transform (MetaShapedTexture *stex, @@ -67,9 +67,9 @@ float meta_shaped_texture_get_unscaled_width (MetaShapedTexture *stex); float meta_shaped_texture_get_unscaled_height (MetaShapedTexture *stex); void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, - cairo_region_t *clip_region); + MtkRegion *clip_region); void meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex, - cairo_region_t *opaque_region); + MtkRegion *opaque_region); void meta_shaped_texture_ensure_size_valid (MetaShapedTexture *stex); diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c index bf018ee48..380ec2081 100644 --- a/src/compositor/meta-shaped-texture.c +++ b/src/compositor/meta-shaped-texture.c @@ -88,10 +88,10 @@ struct _MetaShapedTexture gboolean is_y_inverted; /* The region containing only fully opaque pixels */ - cairo_region_t *opaque_region; + MtkRegion *opaque_region; /* MetaCullable regions, see that documentation for more details */ - cairo_region_t *clip_region; + MtkRegion *clip_region; gboolean size_invalid; MetaMonitorTransform transform; @@ -216,11 +216,11 @@ meta_shaped_texture_ensure_size_valid (MetaShapedTexture *stex) void meta_shaped_texture_set_clip_region (MetaShapedTexture *stex, - cairo_region_t *clip_region) + MtkRegion *clip_region) { - g_clear_pointer (&stex->clip_region, cairo_region_destroy); + g_clear_pointer (&stex->clip_region, mtk_region_unref); if (clip_region) - stex->clip_region = cairo_region_reference (clip_region); + stex->clip_region = mtk_region_ref (clip_region); } static void @@ -248,8 +248,8 @@ meta_shaped_texture_dispose (GObject *object) meta_shaped_texture_set_mask_texture (stex, NULL); meta_shaped_texture_reset_pipelines (stex); - g_clear_pointer (&stex->opaque_region, cairo_region_destroy); - g_clear_pointer (&stex->clip_region, cairo_region_destroy); + g_clear_pointer (&stex->opaque_region, mtk_region_unref); + g_clear_pointer (&stex->clip_region, mtk_region_unref); g_clear_pointer (&stex->snippet, g_object_unref); @@ -627,7 +627,7 @@ do_paint_content (MetaShapedTexture *stex, int dst_width, dst_height; MtkRectangle content_rect; gboolean use_opaque_region; - cairo_region_t *blended_tex_region; + MtkRegion *blended_tex_region; CoglContext *ctx; CoglPipelineFilter min_filter, mag_filter; MetaTransforms transforms; @@ -710,16 +710,16 @@ do_paint_content (MetaShapedTexture *stex, if (use_opaque_region) { if (stex->clip_region) - blended_tex_region = cairo_region_copy (stex->clip_region); + blended_tex_region = mtk_region_copy (stex->clip_region); else - blended_tex_region = cairo_region_create_rectangle (&content_rect); + blended_tex_region = mtk_region_create_rectangle (&content_rect); - cairo_region_subtract (blended_tex_region, stex->opaque_region); + mtk_region_subtract (blended_tex_region, stex->opaque_region); } else { if (stex->clip_region) - blended_tex_region = cairo_region_reference (stex->clip_region); + blended_tex_region = mtk_region_ref (stex->clip_region); else blended_tex_region = NULL; } @@ -730,13 +730,13 @@ do_paint_content (MetaShapedTexture *stex, if (blended_tex_region) { - int n_rects = cairo_region_num_rectangles (blended_tex_region); + int n_rects = mtk_region_num_rectangles (blended_tex_region); if (n_rects > MAX_RECTS) { /* Fall back to taking the fully blended path. */ use_opaque_region = FALSE; - g_clear_pointer (&blended_tex_region, cairo_region_destroy); + g_clear_pointer (&blended_tex_region, mtk_region_unref); } } @@ -745,21 +745,21 @@ do_paint_content (MetaShapedTexture *stex, /* First, paint the unblended parts, which are part of the opaque region. */ if (use_opaque_region) { - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; int n_rects; int i; if (stex->clip_region) { - region = cairo_region_copy (stex->clip_region); - cairo_region_intersect (region, stex->opaque_region); + region = mtk_region_copy (stex->clip_region); + mtk_region_intersect (region, stex->opaque_region); } else { - region = cairo_region_reference (stex->opaque_region); + region = mtk_region_ref (stex->opaque_region); } - if (!cairo_region_is_empty (region)) + if (!mtk_region_is_empty (region)) { CoglPipeline *opaque_pipeline; @@ -774,11 +774,11 @@ do_paint_content (MetaShapedTexture *stex, min_filter, mag_filter); } - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); paint_clipped_rectangle_node (stex, root_node, opaque_pipeline, &rect, alloc); @@ -794,8 +794,6 @@ do_paint_content (MetaShapedTexture *stex, } } } - - cairo_region_destroy (region); } /* Now, go ahead and paint the blended parts. */ @@ -808,7 +806,7 @@ do_paint_content (MetaShapedTexture *stex, * 1) and 3) are the times where we have to paint stuff. This tests * for 1) and 3). */ - if (!blended_tex_region || !cairo_region_is_empty (blended_tex_region)) + if (!blended_tex_region || !mtk_region_is_empty (blended_tex_region)) { CoglPipeline *blended_pipeline; CoglColor color; @@ -840,12 +838,12 @@ do_paint_content (MetaShapedTexture *stex, { /* 1) blended_tex_region is not empty. Paint the rectangles. */ int i; - int n_rects = cairo_region_num_rectangles (blended_tex_region); + int n_rects = mtk_region_num_rectangles (blended_tex_region); for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (blended_tex_region, i, &rect); + rect = mtk_region_get_rectangle (blended_tex_region, i); if (!mtk_rectangle_intersect (&content_rect, &rect, &rect)) continue; @@ -892,7 +890,7 @@ do_paint_content (MetaShapedTexture *stex, } } - g_clear_pointer (&blended_tex_region, cairo_region_destroy); + g_clear_pointer (&blended_tex_region, mtk_region_unref); } static void @@ -905,7 +903,7 @@ meta_shaped_texture_paint_content (ClutterContent *content, ClutterActorBox alloc; uint8_t opacity; - if (stex->clip_region && cairo_region_is_empty (stex->clip_region)) + if (stex->clip_region && mtk_region_is_empty (stex->clip_region)) return; /* The GL EXT_texture_from_pixmap extension does allow for it to be @@ -1190,14 +1188,14 @@ meta_shaped_texture_get_texture (MetaShapedTexture *stex) */ void meta_shaped_texture_set_opaque_region (MetaShapedTexture *stex, - cairo_region_t *opaque_region) + MtkRegion *opaque_region) { - g_clear_pointer (&stex->opaque_region, cairo_region_destroy); + g_clear_pointer (&stex->opaque_region, mtk_region_unref); if (opaque_region) - stex->opaque_region = cairo_region_reference (opaque_region); + stex->opaque_region = mtk_region_ref (opaque_region); } -cairo_region_t * +MtkRegion * meta_shaped_texture_get_opaque_region (MetaShapedTexture *stex) { return stex->opaque_region; @@ -1248,18 +1246,16 @@ meta_shaped_texture_is_opaque (MetaShapedTexture *stex) if (!stex->opaque_region) return FALSE; - if (cairo_region_num_rectangles (stex->opaque_region) != 1) + if (mtk_region_num_rectangles (stex->opaque_region) != 1) return FALSE; - cairo_region_get_extents (stex->opaque_region, &opaque_rect); + opaque_rect = mtk_region_get_extents (stex->opaque_region); meta_shaped_texture_ensure_size_valid (stex); return mtk_rectangle_equal (&opaque_rect, - &(MtkRectangle) { - .width = stex->dst_width, - .height = stex->dst_height - }); + &MTK_RECTANGLE_INIT (0, 0, + stex->dst_width, stex->dst_height)); } void diff --git a/src/compositor/meta-surface-actor.c b/src/compositor/meta-surface-actor.c index 3dc3a5481..82e82f6e6 100644 --- a/src/compositor/meta-surface-actor.c +++ b/src/compositor/meta-surface-actor.c @@ -42,14 +42,14 @@ typedef struct _MetaSurfaceActorPrivate { MetaShapedTexture *texture; - cairo_region_t *input_region; + MtkRegion *input_region; /* MetaCullable regions, see that documentation for more details */ - cairo_region_t *unobscured_region; + MtkRegion *unobscured_region; gboolean is_obscured; /* Freeze/thaw accounting */ - cairo_region_t *pending_damage; + MtkRegion *pending_damage; guint frozen : 1; } MetaSurfaceActorPrivate; @@ -75,7 +75,7 @@ typedef enum IN_ACTOR_PERSPECTIVE } ScalePerspectiveType; -static cairo_region_t * +static MtkRegion * effective_unobscured_region (MetaSurfaceActor *surface_actor) { MetaSurfaceActorPrivate *priv = @@ -94,13 +94,13 @@ update_is_obscured (MetaSurfaceActor *surface_actor) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (surface_actor); - cairo_region_t *unobscured_region; + MtkRegion *unobscured_region; gboolean is_obscured; unobscured_region = priv->unobscured_region; if (unobscured_region) - is_obscured = cairo_region_is_empty (unobscured_region); + is_obscured = mtk_region_is_empty (unobscured_region); else is_obscured = FALSE; @@ -114,17 +114,17 @@ update_is_obscured (MetaSurfaceActor *surface_actor) static void set_unobscured_region (MetaSurfaceActor *surface_actor, - cairo_region_t *unobscured_region) + MtkRegion *unobscured_region) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (surface_actor); - g_clear_pointer (&priv->unobscured_region, cairo_region_destroy); + g_clear_pointer (&priv->unobscured_region, mtk_region_unref); if (unobscured_region) { - if (cairo_region_is_empty (unobscured_region)) + if (mtk_region_is_empty (unobscured_region)) { - priv->unobscured_region = cairo_region_reference (unobscured_region); + priv->unobscured_region = mtk_region_ref (unobscured_region); } else { @@ -139,9 +139,9 @@ set_unobscured_region (MetaSurfaceActor *surface_actor, .height = height, }; - priv->unobscured_region = cairo_region_copy (unobscured_region); + priv->unobscured_region = mtk_region_copy (unobscured_region); - cairo_region_intersect_rectangle (priv->unobscured_region, &bounds); + mtk_region_intersect_rectangle (priv->unobscured_region, &bounds); } } @@ -150,25 +150,17 @@ set_unobscured_region (MetaSurfaceActor *surface_actor, static void set_clip_region (MetaSurfaceActor *surface_actor, - cairo_region_t *clip_region) + MtkRegion *clip_region) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (surface_actor); MetaShapedTexture *stex = priv->texture; - if (clip_region && !cairo_region_is_empty (clip_region)) - { - cairo_region_t *clip_region_copy; - - clip_region_copy = cairo_region_copy (clip_region); - meta_shaped_texture_set_clip_region (stex, clip_region_copy); - - cairo_region_destroy (clip_region_copy); - } + if (clip_region && !mtk_region_is_empty (clip_region)) + meta_shaped_texture_set_clip_region (stex, + mtk_region_copy (clip_region)); else - { - meta_shaped_texture_set_clip_region (stex, clip_region); - } + meta_shaped_texture_set_clip_region (stex, clip_region); } static void @@ -197,14 +189,14 @@ meta_surface_actor_pick (ClutterActor *actor, int n_rects; int i; - n_rects = cairo_region_num_rectangles (priv->input_region); + n_rects = mtk_region_num_rectangles (priv->input_region); for (i = 0; i < n_rects; i++) { MtkRectangle rect; ClutterActorBox box; - cairo_region_get_rectangle (priv->input_region, i, &rect); + rect = mtk_region_get_rectangle (priv->input_region, i); box.x1 = rect.x; box.y1 = rect.y; @@ -255,7 +247,7 @@ meta_surface_actor_dispose (GObject *object) MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (self); - g_clear_pointer (&priv->input_region, cairo_region_destroy); + g_clear_pointer (&priv->input_region, mtk_region_unref); g_clear_object (&priv->texture); set_unobscured_region (self, NULL); @@ -306,7 +298,7 @@ meta_surface_actor_is_opaque (MetaSurfaceActor *self) static void subtract_opaque_region (MetaSurfaceActor *surface_actor, - cairo_region_t *region) + MtkRegion *region) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (surface_actor); @@ -317,20 +309,20 @@ subtract_opaque_region (MetaSurfaceActor *surface_actor, if (opacity == 0xff) { - cairo_region_t *opaque_region; + MtkRegion *opaque_region; opaque_region = meta_shaped_texture_get_opaque_region (priv->texture); if (!opaque_region) return; - cairo_region_subtract (region, opaque_region); + mtk_region_subtract (region, opaque_region); } } static void -meta_surface_actor_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_surface_actor_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { MetaSurfaceActor *surface_actor = META_SURFACE_ACTOR (cullable); @@ -340,8 +332,8 @@ meta_surface_actor_cull_redraw_clip (MetaCullable *cullable, } static void -meta_surface_actor_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_surface_actor_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { MetaSurfaceActor *surface_actor = META_SURFACE_ACTOR (cullable); @@ -404,37 +396,35 @@ meta_surface_actor_update_area (MetaSurfaceActor *self, if (meta_shaped_texture_update_area (priv->texture, x, y, width, height, &clip)) { - cairo_region_t *unobscured_region; + MtkRegion *unobscured_region; unobscured_region = effective_unobscured_region (self); if (unobscured_region) { - cairo_region_t *intersection; + g_autoptr (MtkRegion) intersection = NULL; - if (cairo_region_is_empty (unobscured_region)) + if (mtk_region_is_empty (unobscured_region)) return; - intersection = cairo_region_copy (unobscured_region); - cairo_region_intersect_rectangle (intersection, &clip); + intersection = mtk_region_copy (unobscured_region); + mtk_region_intersect_rectangle (intersection, &clip); - if (!cairo_region_is_empty (intersection)) + if (!mtk_region_is_empty (intersection)) { int i, n_rectangles; - n_rectangles = cairo_region_num_rectangles (intersection); + n_rectangles = mtk_region_num_rectangles (intersection); for (i = 0; i < n_rectangles; i++) { MtkRectangle rect; - cairo_region_get_rectangle (intersection, i, &rect); + rect = mtk_region_get_rectangle (intersection, i); clutter_actor_queue_redraw_with_clip (CLUTTER_ACTOR (self), &rect); } repaint_scheduled = TRUE; } - - cairo_region_destroy (intersection); } else { @@ -473,7 +463,7 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, ClutterStageView *stage_view, float *unobscurred_fraction) { - cairo_region_t *unobscured_region; + MtkRegion *unobscured_region; unobscured_region = effective_unobscured_region (self); @@ -482,7 +472,7 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (self); ClutterActor *stage = clutter_actor_get_stage (CLUTTER_ACTOR (self)); - cairo_region_t *intersection_region; + g_autoptr (MtkRegion) intersection_region = NULL; MtkRectangle stage_rect; graphene_matrix_t transform; graphene_rect_t actor_bounds; @@ -491,7 +481,7 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, int intersection_size = 0; int n_rects, i; - if (cairo_region_is_empty (unobscured_region)) + if (mtk_region_is_empty (unobscured_region)) return TRUE; clutter_actor_get_relative_transformation_matrix (CLUTTER_ACTOR (self), @@ -501,19 +491,13 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, intersection_region = meta_region_apply_matrix_transform_expand (unobscured_region, &transform); clutter_stage_view_get_layout (stage_view, &stage_rect); - cairo_region_intersect_rectangle (intersection_region, - &stage_rect); + mtk_region_intersect_rectangle (intersection_region, + &stage_rect); - if (cairo_region_is_empty (intersection_region)) - { - cairo_region_destroy (intersection_region); - return TRUE; - } + if (mtk_region_is_empty (intersection_region)) + return TRUE; else if (!unobscurred_fraction) - { - cairo_region_destroy (intersection_region); - return FALSE; - } + return FALSE; clutter_content_get_preferred_size (CLUTTER_CONTENT (priv->texture), &bounds_width, @@ -523,15 +507,14 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, graphene_rect_round_extents (&actor_bounds, &actor_bounds); bounds_size = graphene_rect_get_area (&actor_bounds); - n_rects = cairo_region_num_rectangles (intersection_region); + n_rects = mtk_region_num_rectangles (intersection_region); for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (intersection_region, i, &rect); + rect = mtk_region_get_rectangle (intersection_region, i); intersection_size += rect.width * rect.height; } - cairo_region_destroy (intersection_region); g_return_val_if_fail (bounds_size > 0, FALSE); @@ -545,23 +528,22 @@ meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, void meta_surface_actor_set_input_region (MetaSurfaceActor *self, - cairo_region_t *region) + MtkRegion *region) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (self); - if (priv->input_region) - cairo_region_destroy (priv->input_region); + g_clear_pointer (&priv->input_region, mtk_region_unref); if (region) - priv->input_region = cairo_region_reference (region); + priv->input_region = mtk_region_ref (region); else priv->input_region = NULL; } void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, - cairo_region_t *region) + MtkRegion *region) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (self); @@ -569,7 +551,7 @@ meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, meta_shaped_texture_set_opaque_region (priv->texture, region); } -cairo_region_t * +MtkRegion * meta_surface_actor_get_opaque_region (MetaSurfaceActor *self) { MetaSurfaceActorPrivate *priv = @@ -580,7 +562,10 @@ meta_surface_actor_get_opaque_region (MetaSurfaceActor *self) void meta_surface_actor_process_damage (MetaSurfaceActor *self, - int x, int y, int width, int height) + int x, + int y, + int width, + int height) { MetaSurfaceActorPrivate *priv = meta_surface_actor_get_instance_private (self); @@ -603,9 +588,9 @@ meta_surface_actor_process_damage (MetaSurfaceActor *self, MtkRectangle rect = { .x = x, .y = y, .width = width, .height = height }; if (!priv->pending_damage) - priv->pending_damage = cairo_region_create_rectangle (&rect); + priv->pending_damage = mtk_region_create_rectangle (&rect); else - cairo_region_union_rectangle (priv->pending_damage, &rect); + mtk_region_union_rectangle (priv->pending_damage, &rect); return; } @@ -626,7 +611,7 @@ meta_surface_actor_set_frozen (MetaSurfaceActor *self, if (!frozen && priv->pending_damage) { - int i, n_rects = cairo_region_num_rectangles (priv->pending_damage); + int i, n_rects = mtk_region_num_rectangles (priv->pending_damage); MtkRectangle rect; /* Since we ignore damage events while a window is frozen for certain effects @@ -634,11 +619,11 @@ meta_surface_actor_set_frozen (MetaSurfaceActor *self, for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (priv->pending_damage, i, &rect); + rect = mtk_region_get_rectangle (priv->pending_damage, i); meta_surface_actor_process_damage (self, rect.x, rect.y, rect.width, rect.height); } - g_clear_pointer (&priv->pending_damage, cairo_region_destroy); + g_clear_pointer (&priv->pending_damage, mtk_region_unref); } } diff --git a/src/compositor/meta-surface-actor.h b/src/compositor/meta-surface-actor.h index 70eded69d..8072aae01 100644 --- a/src/compositor/meta-surface-actor.h +++ b/src/compositor/meta-surface-actor.h @@ -43,10 +43,10 @@ gboolean meta_surface_actor_is_obscured_on_stage_view (MetaSurfaceActor *self, float *unobscurred_fraction); void meta_surface_actor_set_input_region (MetaSurfaceActor *self, - cairo_region_t *region); + MtkRegion *region); void meta_surface_actor_set_opaque_region (MetaSurfaceActor *self, - cairo_region_t *region); -cairo_region_t * meta_surface_actor_get_opaque_region (MetaSurfaceActor *self); + MtkRegion *region); +MtkRegion * meta_surface_actor_get_opaque_region (MetaSurfaceActor *self); void meta_surface_actor_process_damage (MetaSurfaceActor *actor, int x, int y, int width, int height); diff --git a/src/compositor/meta-window-actor-wayland.c b/src/compositor/meta-window-actor-wayland.c index d6f125ebf..bb8263eef 100644 --- a/src/compositor/meta-window-actor-wayland.c +++ b/src/compositor/meta-window-actor-wayland.c @@ -78,15 +78,15 @@ surface_container_new (MetaWindowActor *window_actor) } static void -surface_container_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +surface_container_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { meta_cullable_cull_unobscured_children (cullable, unobscured_region); } static void -surface_container_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +surface_container_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { meta_cullable_cull_redraw_clip_children (cullable, clip_region); } @@ -273,7 +273,7 @@ meta_window_actor_wayland_rebuild_surface_tree (MetaWindowActor *actor) &traverse_data); } -static cairo_region_t * +static MtkRegion * calculate_background_cull_region (MetaWindowActorWayland *self) { MetaWindowActor *window_actor = META_WINDOW_ACTOR (self); @@ -288,12 +288,12 @@ calculate_background_cull_region (MetaWindowActorWayland *self) .height = clutter_actor_get_height (self->background) * geometry_scale, }; - return cairo_region_create_rectangle (&rect); + return mtk_region_create_rectangle (&rect); } static void subtract_background_opaque_region (MetaWindowActorWayland *self, - cairo_region_t *region) + MtkRegion *region) { if (!region) return; @@ -301,19 +301,17 @@ subtract_background_opaque_region (MetaWindowActorWayland *self, if (self->background && clutter_actor_get_paint_opacity (CLUTTER_ACTOR (self)) == 0xff) { - cairo_region_t *background_cull_region; + g_autoptr (MtkRegion) background_cull_region = NULL; background_cull_region = calculate_background_cull_region (self); - cairo_region_subtract (region, background_cull_region); - - cairo_region_destroy (background_cull_region); + mtk_region_subtract (region, background_cull_region); } } static void -meta_window_actor_wayland_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_window_actor_wayland_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { MetaWindowActorWayland *self = META_WINDOW_ACTOR_WAYLAND (cullable); @@ -324,8 +322,8 @@ meta_window_actor_wayland_cull_unobscured (MetaCullable *cullable, } static void -meta_window_actor_wayland_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_window_actor_wayland_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { MetaWindowActorWayland *self = META_WINDOW_ACTOR_WAYLAND (cullable); diff --git a/src/compositor/meta-window-actor-x11.c b/src/compositor/meta-window-actor-x11.c index 47a4e943c..201c3e15f 100644 --- a/src/compositor/meta-window-actor-x11.c +++ b/src/compositor/meta-window-actor-x11.c @@ -77,11 +77,11 @@ struct _MetaWindowActorX11 MetaShadow *unfocused_shadow; /* A region that matches the shape of the window, including frame bounds */ - cairo_region_t *shape_region; + MtkRegion *shape_region; /* The region we should clip to when painting the shadow */ - cairo_region_t *shadow_clip; + MtkRegion *shadow_clip; /* The frame region */ - cairo_region_t *frame_bounds; + MtkRegion *frame_bounds; /* Extracted size-invariant shape used for shadows */ MetaWindowShape *shadow_shape; @@ -523,7 +523,7 @@ static void get_shape_bounds (MetaWindowActorX11 *actor_x11, MtkRectangle *bounds) { - cairo_region_get_extents (actor_x11->shape_region, bounds); + *bounds = mtk_region_get_extents (actor_x11->shape_region); } static void @@ -587,7 +587,7 @@ clip_shadow_under_window (MetaWindowActorX11 *actor_x11) */ static void set_clip_region_beneath (MetaWindowActorX11 *actor_x11, - cairo_region_t *beneath_region) + MtkRegion *beneath_region) { MetaWindow *window; gboolean appears_focused; @@ -596,16 +596,16 @@ set_clip_region_beneath (MetaWindowActorX11 *actor_x11, appears_focused = meta_window_appears_focused (window); if (appears_focused ? actor_x11->focused_shadow : actor_x11->unfocused_shadow) { - g_clear_pointer (&actor_x11->shadow_clip, cairo_region_destroy); + g_clear_pointer (&actor_x11->shadow_clip, mtk_region_unref); if (beneath_region) { - actor_x11->shadow_clip = cairo_region_copy (beneath_region); + actor_x11->shadow_clip = mtk_region_copy (beneath_region); if (clip_shadow_under_window (actor_x11)) { if (actor_x11->frame_bounds) - cairo_region_subtract (actor_x11->shadow_clip, actor_x11->frame_bounds); + mtk_region_subtract (actor_x11->shadow_clip, actor_x11->frame_bounds); } } else @@ -699,12 +699,12 @@ meta_window_actor_x11_process_damage (MetaWindowActorX11 *actor_x11, meta_window_actor_notify_damaged (META_WINDOW_ACTOR (actor_x11)); } -static cairo_region_t * -scan_visible_region (guchar *mask_data, - int stride, - cairo_region_t *scan_area) +static MtkRegion * +scan_visible_region (guchar *mask_data, + int stride, + MtkRegion *scan_area) { - int i, n_rects = cairo_region_num_rectangles (scan_area); + int i, n_rects = mtk_region_num_rectangles (scan_area); MetaRegionBuilder builder; meta_region_builder_init (&builder); @@ -714,7 +714,7 @@ scan_visible_region (guchar *mask_data, int x, y; MtkRectangle rect; - cairo_region_get_rectangle (scan_area, i, &rect); + rect = mtk_region_get_rectangle (scan_area, i); for (y = rect.y; y < (rect.y + rect.height); y++) { @@ -772,8 +772,8 @@ get_client_area_rect (MetaWindowActorX11 *actor_x11, } static void -build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11, - cairo_region_t *shape_region) +build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11, + MtkRegion *shape_region) { ClutterBackend *backend = clutter_get_default_backend (); MetaWindow *window = @@ -815,7 +815,8 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11, if (window->frame) { - cairo_region_t *frame_paint_region, *scanned_region; + g_autoptr (MtkRegion) frame_paint_region = NULL; + g_autoptr (MtkRegion) scanned_region = NULL; MtkRectangle rect = { 0, 0, tex_width, tex_height }; MtkRectangle client_area; MtkRectangle frame_rect; @@ -838,8 +839,8 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11, } /* Make sure we don't paint the frame over the client window. */ - frame_paint_region = cairo_region_create_rectangle (&rect); - cairo_region_subtract_rectangle (frame_paint_region, &client_area); + frame_paint_region = mtk_region_create_rectangle (&rect); + mtk_region_subtract_rectangle (frame_paint_region, &client_area); meta_region_to_cairo_path (frame_paint_region, cr); cairo_clip (cr); @@ -848,9 +849,7 @@ build_and_scan_frame_mask (MetaWindowActorX11 *actor_x11, cairo_surface_flush (image); scanned_region = scan_visible_region (mask_data, stride, frame_paint_region); - cairo_region_union (shape_region, scanned_region); - cairo_region_destroy (scanned_region); - cairo_region_destroy (frame_paint_region); + mtk_region_union (shape_region, scanned_region); } cairo_destroy (cr); @@ -897,32 +896,32 @@ update_shape_region (MetaWindowActorX11 *actor_x11) { MetaWindow *window = meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11)); - cairo_region_t *region = NULL; + MtkRegion *region = NULL; MtkRectangle client_area; get_client_area_rect (actor_x11, &client_area); if (window->frame && window->shape_region) { - region = cairo_region_copy (window->shape_region); - cairo_region_translate (region, client_area.x, client_area.y); + region = mtk_region_copy (window->shape_region); + mtk_region_translate (region, client_area.x, client_area.y); } else if (window->shape_region != NULL) { - region = cairo_region_reference (window->shape_region); + region = mtk_region_ref (window->shape_region); } else { /* If we don't have a shape on the server, that means that * we have an implicit shape of one rectangle covering the * entire window. */ - region = cairo_region_create_rectangle (&client_area); + region = mtk_region_create_rectangle (&client_area); } if (window->shape_region || window->frame) build_and_scan_frame_mask (actor_x11, region); - g_clear_pointer (&actor_x11->shape_region, cairo_region_destroy); + g_clear_pointer (&actor_x11->shape_region, mtk_region_unref); actor_x11->shape_region = region; g_clear_pointer (&actor_x11->shadow_shape, meta_window_shape_unref); @@ -937,24 +936,23 @@ update_input_region (MetaWindowActorX11 *actor_x11) meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11)); MetaSurfaceActor *surface = meta_window_actor_get_surface (META_WINDOW_ACTOR (actor_x11)); - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; if (window->shape_region && window->input_region) { MtkRectangle client_area; - cairo_region_t *frames_input; - cairo_region_t *client_input; + g_autoptr (MtkRegion) frames_input = NULL; + g_autoptr (MtkRegion) client_input = NULL; get_client_area_rect (actor_x11, &client_area); - frames_input = cairo_region_copy (window->input_region); - cairo_region_subtract_rectangle (frames_input, &client_area); + frames_input = mtk_region_copy (window->input_region); + mtk_region_subtract_rectangle (frames_input, &client_area); - client_input = cairo_region_copy (actor_x11->shape_region); - cairo_region_intersect (client_input, window->input_region); + client_input = mtk_region_copy (actor_x11->shape_region); + mtk_region_intersect (client_input, window->input_region); - cairo_region_union (frames_input, client_input); - cairo_region_destroy (client_input); + mtk_region_union (frames_input, client_input); region = g_steal_pointer (&frames_input); } @@ -964,20 +962,15 @@ update_input_region (MetaWindowActorX11 *actor_x11) meta_window_get_client_area_rect (window, &client_area); - region = cairo_region_copy (window->shape_region); - cairo_region_translate (region, client_area.x, client_area.y); + region = mtk_region_copy (window->shape_region); + mtk_region_translate (region, client_area.x, client_area.y); } else if (window->input_region) - { - region = cairo_region_reference (window->input_region); - } + region = mtk_region_ref (window->input_region); else - { - region = NULL; - } + region = NULL; meta_surface_actor_set_input_region (surface, region); - cairo_region_destroy (region); } static gboolean @@ -1007,7 +1000,7 @@ update_opaque_region (MetaWindowActorX11 *actor_x11) MetaWindow *window = meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11)); gboolean is_maybe_transparent; - cairo_region_t *opaque_region = NULL; + g_autoptr (MtkRegion) opaque_region = NULL; MetaSurfaceActor *surface; is_maybe_transparent = is_actor_maybe_transparent (actor_x11); @@ -1018,16 +1011,16 @@ update_opaque_region (MetaWindowActorX11 *actor_x11) MtkRectangle client_area; if (window->frame && window->frame->opaque_region) - opaque_region = cairo_region_copy (window->frame->opaque_region); + opaque_region = mtk_region_copy (window->frame->opaque_region); get_client_area_rect (actor_x11, &client_area); if (opaque_region && meta_window_x11_has_alpha_channel (window)) - cairo_region_subtract_rectangle (opaque_region, &client_area); + mtk_region_subtract_rectangle (opaque_region, &client_area); if (window->opaque_region) { - cairo_region_t *client_opaque_region; + g_autoptr (MtkRegion) client_opaque_region = NULL; /* The opaque region is defined to be a part of the * window which ARGB32 will always paint with opaque @@ -1039,28 +1032,25 @@ update_opaque_region (MetaWindowActorX11 *actor_x11) * to be undefined, and considered a client bug. In mutter's * case, graphical glitches will occur. */ - client_opaque_region = cairo_region_copy (window->opaque_region); - cairo_region_translate (client_opaque_region, - client_area.x, client_area.y); + client_opaque_region = mtk_region_copy (window->opaque_region); + mtk_region_translate (client_opaque_region, + client_area.x, client_area.y); if (opaque_region) - cairo_region_union (opaque_region, client_opaque_region); + mtk_region_union (opaque_region, client_opaque_region); else - opaque_region = cairo_region_reference (client_opaque_region); - - cairo_region_destroy (client_opaque_region); + opaque_region = mtk_region_ref (client_opaque_region); } - cairo_region_intersect (opaque_region, actor_x11->shape_region); + mtk_region_intersect (opaque_region, actor_x11->shape_region); } else if (!is_maybe_transparent) { - opaque_region = cairo_region_reference (actor_x11->shape_region); + opaque_region = mtk_region_ref (actor_x11->shape_region); } surface = meta_window_actor_get_surface (META_WINDOW_ACTOR (actor_x11)); meta_surface_actor_set_opaque_region (surface, opaque_region); - cairo_region_destroy (opaque_region); } static void @@ -1068,11 +1058,11 @@ update_frame_bounds (MetaWindowActorX11 *actor_x11) { MetaWindow *window = meta_window_actor_get_meta_window (META_WINDOW_ACTOR (actor_x11)); - cairo_region_t *frame_bounds = meta_window_get_frame_bounds (window); - g_clear_pointer (&actor_x11->frame_bounds, cairo_region_destroy); + MtkRegion *frame_bounds = meta_window_get_frame_bounds (window); + g_clear_pointer (&actor_x11->frame_bounds, mtk_region_unref); if (frame_bounds) - actor_x11->frame_bounds = cairo_region_copy (frame_bounds); + actor_x11->frame_bounds = mtk_region_copy (frame_bounds); } static void @@ -1214,7 +1204,7 @@ meta_window_actor_x11_paint (ClutterActor *actor, { MetaShadowParams params; MtkRectangle shape_bounds; - cairo_region_t *clip = actor_x11->shadow_clip; + MtkRegion *clip = actor_x11->shadow_clip; CoglFramebuffer *framebuffer; get_shape_bounds (actor_x11, &shape_bounds); @@ -1228,10 +1218,10 @@ meta_window_actor_x11_paint (ClutterActor *actor, MtkRectangle bounds; get_shadow_bounds (actor_x11, appears_focused, &bounds); - clip = cairo_region_create_rectangle (&bounds); + clip = mtk_region_create_rectangle (&bounds); if (actor_x11->frame_bounds) - cairo_region_subtract (clip, actor_x11->frame_bounds); + mtk_region_subtract (clip, actor_x11->frame_bounds); } framebuffer = clutter_paint_context_get_framebuffer (paint_context); @@ -1247,7 +1237,7 @@ meta_window_actor_x11_paint (ClutterActor *actor, clip_shadow_under_window (actor_x11)); if (clip && clip != actor_x11->shadow_clip) - cairo_region_destroy (clip); + mtk_region_unref (clip); } CLUTTER_ACTOR_CLASS (meta_window_actor_x11_parent_class)->paint (actor, @@ -1487,7 +1477,7 @@ meta_window_actor_x11_constructed (GObject *object) * Start off with an empty shape region to maintain the invariant that it's * always set. */ - actor_x11->shape_region = cairo_region_create (); + actor_x11->shape_region = mtk_region_create (); G_OBJECT_CLASS (meta_window_actor_x11_parent_class)->constructed (object); @@ -1503,15 +1493,15 @@ meta_window_actor_x11_constructed (GObject *object) } static void -meta_window_actor_x11_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_window_actor_x11_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { meta_cullable_cull_unobscured_children (cullable, unobscured_region); } static void -meta_window_actor_x11_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_window_actor_x11_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { MetaWindowActorX11 *self = META_WINDOW_ACTOR_X11 (cullable); @@ -1549,9 +1539,9 @@ meta_window_actor_x11_dispose (GObject *object) CLUTTER_ACTOR (surface_actor)); } - g_clear_pointer (&actor_x11->shape_region, cairo_region_destroy); - g_clear_pointer (&actor_x11->shadow_clip, cairo_region_destroy); - g_clear_pointer (&actor_x11->frame_bounds, cairo_region_destroy); + g_clear_pointer (&actor_x11->shape_region, mtk_region_unref); + g_clear_pointer (&actor_x11->shadow_clip, mtk_region_unref); + g_clear_pointer (&actor_x11->frame_bounds, mtk_region_unref); g_clear_pointer (&actor_x11->shadow_class, g_free); g_clear_pointer (&actor_x11->focused_shadow, meta_shadow_unref); diff --git a/src/compositor/meta-window-group.c b/src/compositor/meta-window-group.c index 288cf5afc..46be63812 100644 --- a/src/compositor/meta-window-group.c +++ b/src/compositor/meta-window-group.c @@ -31,15 +31,15 @@ G_DEFINE_TYPE_WITH_CODE (MetaWindowGroup, meta_window_group, CLUTTER_TYPE_ACTOR, G_IMPLEMENT_INTERFACE (META_TYPE_CULLABLE, cullable_iface_init)); static void -meta_window_group_cull_unobscured (MetaCullable *cullable, - cairo_region_t *unobscured_region) +meta_window_group_cull_unobscured (MetaCullable *cullable, + MtkRegion *unobscured_region) { meta_cullable_cull_unobscured_children (cullable, unobscured_region); } static void -meta_window_group_cull_redraw_clip (MetaCullable *cullable, - cairo_region_t *clip_region) +meta_window_group_cull_redraw_clip (MetaCullable *cullable, + MtkRegion *clip_region) { meta_cullable_cull_redraw_clip_children (cullable, clip_region); } @@ -59,8 +59,8 @@ meta_window_group_paint (ClutterActor *actor, ClutterActorClass *parent_actor_class = CLUTTER_ACTOR_CLASS (meta_window_group_parent_class); ClutterActor *stage = clutter_actor_get_stage (actor); - const cairo_region_t *redraw_clip; - cairo_region_t *clip_region; + const MtkRegion *redraw_clip; + g_autoptr (MtkRegion) clip_region = NULL; graphene_matrix_t stage_to_actor; redraw_clip = clutter_paint_context_get_redraw_clip (paint_context); @@ -125,8 +125,6 @@ meta_window_group_paint (ClutterActor *actor, meta_cullable_cull_redraw_clip (META_CULLABLE (window_group), clip_region); - cairo_region_destroy (clip_region); - parent_actor_class->paint (actor, paint_context); meta_cullable_cull_redraw_clip (META_CULLABLE (window_group), NULL); diff --git a/src/compositor/meta-window-shape.c b/src/compositor/meta-window-shape.c index fc6e74d3c..709de869c 100644 --- a/src/compositor/meta-window-shape.c +++ b/src/compositor/meta-window-shape.c @@ -40,7 +40,7 @@ struct _MetaWindowShape }; MetaWindowShape * -meta_window_shape_new (cairo_region_t *region) +meta_window_shape_new (MtkRegion *region) { MetaWindowShape *shape; MetaRegionIterator iter; @@ -54,9 +54,9 @@ meta_window_shape_new (cairo_region_t *region) shape = g_new0 (MetaWindowShape, 1); shape->ref_count = 1; - cairo_region_get_extents (region, &extents); + extents = mtk_region_get_extents (region); - shape->n_rectangles = cairo_region_num_rectangles (region); + shape->n_rectangles = mtk_region_num_rectangles (region); if (shape->n_rectangles == 0) { @@ -220,20 +220,20 @@ meta_window_shape_get_borders (MetaWindowShape *shape, * @center_width: size of the central region horizontally * @center_height: size of the central region vertically * - * Converts the shape to to a cairo_region_t using the given width + * Converts the shape to to a MtkRegion using the given width * and height for the central scaled region. * * Return value: a newly created region */ -cairo_region_t * +MtkRegion * meta_window_shape_to_region (MetaWindowShape *shape, int center_width, int center_height) { - cairo_region_t *region; + MtkRegion *region; int i; - region = cairo_region_create (); + region = mtk_region_create (); for (i = 0; i < shape->n_rectangles; i++) { @@ -249,7 +249,7 @@ meta_window_shape_to_region (MetaWindowShape *shape, else if (rect.y >= shape->top + 1) rect.y += center_height; - cairo_region_union_rectangle (region, &rect); + mtk_region_union_rectangle (region, &rect); } return region; diff --git a/src/compositor/region-utils.c b/src/compositor/region-utils.c index 2d7d138ed..118e922a3 100644 --- a/src/compositor/region-utils.c +++ b/src/compositor/region-utils.c @@ -39,7 +39,7 @@ /* Various algorithms in this file require unioning together a set of rectangles * that are unsorted or overlap; unioning such a set of rectangles 1-by-1 - * using cairo_region_union_rectangle() produces O(N^2) behavior (if the union + * using mtk_region_union_rectangle() produces O(N^2) behavior (if the union * adds or removes rectangles in the middle of the region, then it has to * move all the rectangles after that.) To avoid this behavior, MetaRegionBuilder * creates regions for small groups of rectangles and merges them together in @@ -47,7 +47,7 @@ * * Possible improvement: From a glance at the code, accumulating all the rectangles * into a flat array and then calling the (not usefully documented) - * cairo_region_create_rectangles() would have the same behavior and would be + * mtk_region_create_rectangles() would have the same behavior and would be * simpler and a bit more efficient. */ @@ -75,15 +75,15 @@ meta_region_builder_add_rectangle (MetaRegionBuilder *builder, int i; if (builder->levels[0] == NULL) - builder->levels[0] = cairo_region_create (); + builder->levels[0] = mtk_region_create (); rect.x = x; rect.y = y; rect.width = width; rect.height = height; - cairo_region_union_rectangle (builder->levels[0], &rect); - if (cairo_region_num_rectangles (builder->levels[0]) >= MAX_CHUNK_RECTANGLES) + mtk_region_union_rectangle (builder->levels[0], &rect); + if (mtk_region_num_rectangles (builder->levels[0]) >= MAX_CHUNK_RECTANGLES) { for (i = 1; i < builder->n_levels + 1; i++) { @@ -101,18 +101,18 @@ meta_region_builder_add_rectangle (MetaRegionBuilder *builder, } else { - cairo_region_union (builder->levels[i], builder->levels[i - 1]); - cairo_region_destroy (builder->levels[i - 1]); + mtk_region_union (builder->levels[i], builder->levels[i - 1]); + mtk_region_unref (builder->levels[i - 1]); builder->levels[i - 1] = NULL; } } } } -cairo_region_t * +MtkRegion * meta_region_builder_finish (MetaRegionBuilder *builder) { - cairo_region_t *result = NULL; + MtkRegion *result = NULL; int i; for (i = 0; i < builder->n_levels; i++) @@ -123,14 +123,14 @@ meta_region_builder_finish (MetaRegionBuilder *builder) result = builder->levels[i]; else { - cairo_region_union(result, builder->levels[i]); - cairo_region_destroy (builder->levels[i]); + mtk_region_union (result, builder->levels[i]); + mtk_region_unref (builder->levels[i]); } } } if (result == NULL) - result = cairo_region_create (); + result = mtk_region_create (); return result; } @@ -140,23 +140,23 @@ meta_region_builder_finish (MetaRegionBuilder *builder) void meta_region_iterator_init (MetaRegionIterator *iter, - cairo_region_t *region) + MtkRegion *region) { iter->region = region; iter->i = 0; - iter->n_rectangles = cairo_region_num_rectangles (region); + iter->n_rectangles = mtk_region_num_rectangles (region); iter->line_start = TRUE; if (iter->n_rectangles > 1) { - cairo_region_get_rectangle (region, 0, &iter->rectangle); - cairo_region_get_rectangle (region, 1, &iter->next_rectangle); + iter->rectangle = mtk_region_get_rectangle (region, 0); + iter->next_rectangle = mtk_region_get_rectangle (region, 1); iter->line_end = iter->next_rectangle.y != iter->rectangle.y; } else if (iter->n_rectangles > 0) { - cairo_region_get_rectangle (region, 0, &iter->rectangle); + iter->rectangle = mtk_region_get_rectangle (region, 0); iter->line_end = TRUE; } } @@ -176,7 +176,7 @@ meta_region_iterator_next (MetaRegionIterator *iter) if (iter->i + 1 < iter->n_rectangles) { - cairo_region_get_rectangle (iter->region, iter->i + 1, &iter->next_rectangle); + iter->next_rectangle = mtk_region_get_rectangle (iter->region, iter->i + 1); iter->line_end = iter->next_rectangle.y != iter->rectangle.y; } else @@ -185,28 +185,29 @@ meta_region_iterator_next (MetaRegionIterator *iter) } } -cairo_region_t * -meta_region_scale (cairo_region_t *region, int scale) +MtkRegion * +meta_region_scale (MtkRegion *region, + int scale) { int n_rects, i; MtkRectangle *rects; - cairo_region_t *scaled_region; + MtkRegion *scaled_region; if (scale == 1) - return cairo_region_copy (region); + return mtk_region_copy (region); - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); META_REGION_CREATE_RECTANGLE_ARRAY_SCOPED (n_rects, rects); for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (region, i, &rects[i]); + rects[i] = mtk_region_get_rectangle (region, i); rects[i].x *= scale; rects[i].y *= scale; rects[i].width *= scale; rects[i].height *= scale; } - scaled_region = cairo_region_create_rectangles (rects, n_rects); + scaled_region = mtk_region_create_rectangles (rects, n_rects); return scaled_region; } @@ -231,11 +232,11 @@ add_expanded_rect (MetaRegionBuilder *builder, width + 2 * x_amount, height + 2 * y_amount); } -static cairo_region_t * -expand_region (cairo_region_t *region, - int x_amount, - int y_amount, - gboolean flip) +static MtkRegion * +expand_region (MtkRegion *region, + int x_amount, + int y_amount, + gboolean flip) { MetaRegionBuilder builder; int n; @@ -243,12 +244,12 @@ expand_region (cairo_region_t *region, meta_region_builder_init (&builder); - n = cairo_region_num_rectangles (region); + n = mtk_region_num_rectangles (region); for (i = 0; i < n; i++) { MtkRectangle rect; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); add_expanded_rect (&builder, rect.x, rect.y, rect.width, rect.height, x_amount, y_amount, flip); @@ -259,11 +260,11 @@ expand_region (cairo_region_t *region, /* This computes a (clipped version) of the inverse of the region * and expands it by the given amount */ -static cairo_region_t * -expand_region_inverse (cairo_region_t *region, - int x_amount, - int y_amount, - gboolean flip) +static MtkRegion * +expand_region_inverse (MtkRegion *region, + int x_amount, + int y_amount, + gboolean flip) { MetaRegionBuilder builder; MetaRegionIterator iter; @@ -273,7 +274,7 @@ expand_region_inverse (cairo_region_t *region, meta_region_builder_init (&builder); - cairo_region_get_extents (region, &extents); + extents = mtk_region_get_extents (region); add_expanded_rect (&builder, extents.x, extents.y - 1, extents.width, 1, x_amount, y_amount, flip); @@ -316,7 +317,7 @@ expand_region_inverse (cairo_region_t *region, /** * meta_make_border_region: - * @region: a #cairo_region_t + * @region: a #MtkRegion * @x_amount: distance from the border to extend horizontally * @y_amount: distance from the border to extend vertically * @flip: if true, the result is computed with x and y interchanged @@ -332,41 +333,40 @@ expand_region_inverse (cairo_region_t *region, * * Return value: a new region which is the border of the given region */ -cairo_region_t * -meta_make_border_region (cairo_region_t *region, - int x_amount, - int y_amount, - gboolean flip) +MtkRegion * +meta_make_border_region (MtkRegion *region, + int x_amount, + int y_amount, + gboolean flip) { - cairo_region_t *border_region; - cairo_region_t *inverse_region; + g_autoptr (MtkRegion) border_region = NULL; + g_autoptr (MtkRegion) inverse_region = NULL; border_region = expand_region (region, x_amount, y_amount, flip); inverse_region = expand_region_inverse (region, x_amount, y_amount, flip); - cairo_region_intersect (border_region, inverse_region); - cairo_region_destroy (inverse_region); + mtk_region_intersect (border_region, inverse_region); - return border_region; + return g_steal_pointer (&border_region); } -cairo_region_t * -meta_region_transform (const cairo_region_t *region, +MtkRegion * +meta_region_transform (const MtkRegion *region, MetaMonitorTransform transform, int width, int height) { int n_rects, i; MtkRectangle *rects; - cairo_region_t *transformed_region; + MtkRegion *transformed_region; if (transform == META_MONITOR_TRANSFORM_NORMAL) - return cairo_region_copy (region); + return mtk_region_copy (region); - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); META_REGION_CREATE_RECTANGLE_ARRAY_SCOPED (n_rects, rects); for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (region, i, &rects[i]); + rects[i] = mtk_region_get_rectangle (region, i); meta_rectangle_transform (&rects[i], transform, @@ -375,20 +375,20 @@ meta_region_transform (const cairo_region_t *region, &rects[i]); } - transformed_region = cairo_region_create_rectangles (rects, n_rects); + transformed_region = mtk_region_create_rectangles (rects, n_rects); return transformed_region; } -cairo_region_t * -meta_region_crop_and_scale (cairo_region_t *region, +MtkRegion * +meta_region_crop_and_scale (MtkRegion *region, graphene_rect_t *src_rect, int dst_width, int dst_height) { int n_rects, i; MtkRectangle *rects; - cairo_region_t *viewport_region; + MtkRegion *viewport_region; if (G_APPROX_VALUE (src_rect->size.width, dst_width, FLT_EPSILON) && G_APPROX_VALUE (src_rect->size.height, dst_height, FLT_EPSILON) && @@ -397,24 +397,24 @@ meta_region_crop_and_scale (cairo_region_t *region, G_APPROX_VALUE (roundf (src_rect->origin.y), src_rect->origin.y, FLT_EPSILON)) { - viewport_region = cairo_region_copy (region); + viewport_region = mtk_region_copy (region); if (!G_APPROX_VALUE (src_rect->origin.x, 0, FLT_EPSILON) || !G_APPROX_VALUE (src_rect->origin.y, 0, FLT_EPSILON)) { - cairo_region_translate (viewport_region, - (int) src_rect->origin.x, - (int) src_rect->origin.y); + mtk_region_translate (viewport_region, + (int) src_rect->origin.x, + (int) src_rect->origin.y); } return viewport_region; } - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); META_REGION_CREATE_RECTANGLE_ARRAY_SCOPED (n_rects, rects); for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (region, i, &rects[i]); + rects[i] = mtk_region_get_rectangle (region, i); meta_rectangle_crop_and_scale (&rects[i], src_rect, @@ -423,46 +423,46 @@ meta_region_crop_and_scale (cairo_region_t *region, &rects[i]); } - viewport_region = cairo_region_create_rectangles (rects, n_rects); + viewport_region = mtk_region_create_rectangles (rects, n_rects); return viewport_region; } void -meta_region_to_cairo_path (cairo_region_t *region, - cairo_t *cr) +meta_region_to_cairo_path (MtkRegion *region, + cairo_t *cr) { MtkRectangle rect; int n_rects, i; - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); for (i = 0; i < n_rects; i++) { - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height); } } -cairo_region_t * -meta_region_apply_matrix_transform_expand (const cairo_region_t *region, - graphene_matrix_t *transform) +MtkRegion * +meta_region_apply_matrix_transform_expand (const MtkRegion *region, + graphene_matrix_t *transform) { int n_rects, i; MtkRectangle *rects; - cairo_region_t *transformed_region; + MtkRegion *transformed_region; if (graphene_matrix_is_identity (transform)) - return cairo_region_copy (region); + return mtk_region_copy (region); - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); META_REGION_CREATE_RECTANGLE_ARRAY_SCOPED (n_rects, rects); for (i = 0; i < n_rects; i++) { graphene_rect_t transformed_rect, rect; MtkRectangle int_rect; - cairo_region_get_rectangle (region, i, &int_rect); + int_rect = mtk_region_get_rectangle (region, i); rect = mtk_rectangle_to_graphene_rect (&int_rect); graphene_matrix_transform_bounds (transform, &rect, &transformed_rect); @@ -472,7 +472,7 @@ meta_region_apply_matrix_transform_expand (const cairo_region_t *region, &rects[i]); } - transformed_region = cairo_region_create_rectangles (rects, n_rects); + transformed_region = mtk_region_create_rectangles (rects, n_rects); return transformed_region; } diff --git a/src/compositor/region-utils.h b/src/compositor/region-utils.h index fa74f9331..0c847fb6e 100644 --- a/src/compositor/region-utils.h +++ b/src/compositor/region-utils.h @@ -34,7 +34,7 @@ * @line_start: whether the current rectangle starts a horizontal band * @line_end: whether the current rectangle ends a horizontal band * - * cairo_region_t is a yx banded region; sometimes its useful to iterate through + * MtkRegion is a yx banded region; sometimes its useful to iterate through * such a region treating the start and end of each horizontal band in a distinct * fashion. * @@ -51,7 +51,7 @@ typedef struct _MetaRegionIterator MetaRegionIterator; struct _MetaRegionIterator { - cairo_region_t *region; + MtkRegion *region; MtkRectangle rectangle; gboolean line_start; gboolean line_end; @@ -76,7 +76,7 @@ struct _MetaRegionBuilder { * |d |c |ab | * |e | | |abcd| */ - cairo_region_t *levels[META_REGION_BUILDER_MAX_LEVELS]; + MtkRegion *levels[META_REGION_BUILDER_MAX_LEVELS]; int n_levels; }; @@ -86,34 +86,34 @@ void meta_region_builder_add_rectangle (MetaRegionBuilder *builder, int y, int width, int height); -cairo_region_t * meta_region_builder_finish (MetaRegionBuilder *builder); +MtkRegion * meta_region_builder_finish (MetaRegionBuilder *builder); void meta_region_iterator_init (MetaRegionIterator *iter, - cairo_region_t *region); + MtkRegion *region); gboolean meta_region_iterator_at_end (MetaRegionIterator *iter); void meta_region_iterator_next (MetaRegionIterator *iter); -cairo_region_t * meta_region_scale (cairo_region_t *region, - int scale); +MtkRegion * meta_region_scale (MtkRegion *region, + int scale); -cairo_region_t * meta_make_border_region (cairo_region_t *region, - int x_amount, - int y_amount, - gboolean flip); +MtkRegion * meta_make_border_region (MtkRegion *region, + int x_amount, + int y_amount, + gboolean flip); -cairo_region_t * meta_region_transform (const cairo_region_t *region, - MetaMonitorTransform transform, - int width, - int height); +MtkRegion * meta_region_transform (const MtkRegion *region, + MetaMonitorTransform transform, + int width, + int height); -cairo_region_t * meta_region_crop_and_scale (cairo_region_t *region, - graphene_rect_t *src_rect, - int dst_width, - int dst_height); +MtkRegion * meta_region_crop_and_scale (MtkRegion *region, + graphene_rect_t *src_rect, + int dst_width, + int dst_height); -void meta_region_to_cairo_path (cairo_region_t *region, - cairo_t *cr); +void meta_region_to_cairo_path (MtkRegion *region, + cairo_t *cr); -cairo_region_t * -meta_region_apply_matrix_transform_expand (const cairo_region_t *region, - graphene_matrix_t *transform); +MtkRegion * +meta_region_apply_matrix_transform_expand (const MtkRegion *region, + graphene_matrix_t *transform); diff --git a/src/core/frame.c b/src/core/frame.c index 3d6e7ab78..6b97306a1 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -237,13 +237,8 @@ meta_window_destroy_frame (MetaWindow *window) meta_x11_display_unregister_x_window (x11_display, frame->xwindow); window->frame = NULL; - if (window->frame_bounds) - { - cairo_region_destroy (window->frame_bounds); - window->frame_bounds = NULL; - } - - g_clear_pointer (&frame->opaque_region, cairo_region_destroy); + g_clear_pointer (&window->frame_bounds, mtk_region_unref); + g_clear_pointer (&frame->opaque_region, mtk_region_unref); /* Move keybindings to window instead of frame */ meta_window_grab_keys (window); @@ -397,17 +392,17 @@ meta_frame_sync_to_window (MetaFrame *frame, return need_resize; } -cairo_region_t * +MtkRegion * meta_frame_get_frame_bounds (MetaFrame *frame) { MetaFrameBorders borders; - cairo_region_t *bounds; + MtkRegion *bounds; meta_frame_calc_borders (frame, &borders); /* FIXME: currently just the client area, should shape closer to * frame border, incl. rounded corners. */ - bounds = cairo_region_create_rectangle (&(MtkRectangle) { + bounds = mtk_region_create_rectangle (&(MtkRectangle) { borders.total.left, borders.total.top, frame->rect.width - borders.total.left - borders.total.right, @@ -583,18 +578,18 @@ meta_frame_get_sync_counter (MetaFrame *frame) } void -meta_frame_set_opaque_region (MetaFrame *frame, - cairo_region_t *region) +meta_frame_set_opaque_region (MetaFrame *frame, + MtkRegion *region) { MetaWindow *window = frame->window; - if (cairo_region_equal (frame->opaque_region, region)) + if (mtk_region_equal (frame->opaque_region, region)) return; - g_clear_pointer (&frame->opaque_region, cairo_region_destroy); + g_clear_pointer (&frame->opaque_region, mtk_region_unref); if (region != NULL) - frame->opaque_region = cairo_region_reference (region); + frame->opaque_region = mtk_region_ref (region); meta_compositor_window_shape_changed (window->display->compositor, window); } diff --git a/src/core/frame.h b/src/core/frame.h index c134433ad..240e4edfa 100644 --- a/src/core/frame.h +++ b/src/core/frame.h @@ -40,7 +40,7 @@ struct _MetaFrame MetaFrameBorders cached_borders; /* valid if borders_cached is set */ - cairo_region_t *opaque_region; + MtkRegion *opaque_region; MetaSyncCounter sync_counter; @@ -67,7 +67,7 @@ gboolean meta_frame_sync_to_window (MetaFrame *frame, void meta_frame_clear_cached_borders (MetaFrame *frame); -cairo_region_t *meta_frame_get_frame_bounds (MetaFrame *frame); +MtkRegion *meta_frame_get_frame_bounds (MetaFrame *frame); void meta_frame_get_mask (MetaFrame *frame, MtkRectangle *frame_rect, @@ -81,5 +81,5 @@ GSubprocess * meta_frame_launch_client (MetaX11Display *x11_display, MetaSyncCounter * meta_frame_get_sync_counter (MetaFrame *frame); -void meta_frame_set_opaque_region (MetaFrame *frame, - cairo_region_t *region); +void meta_frame_set_opaque_region (MetaFrame *frame, + MtkRegion *region); diff --git a/src/core/window-private.h b/src/core/window-private.h index 4df552abe..1375eee40 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -246,17 +246,17 @@ struct _MetaWindow } fullscreen_monitors; /* if non-NULL, the bounds of the window frame */ - cairo_region_t *frame_bounds; + MtkRegion *frame_bounds; /* if non-NULL, the bounding shape region of the window. Relative to * the server-side client window. */ - cairo_region_t *shape_region; + MtkRegion *shape_region; /* if non-NULL, the opaque region _NET_WM_OPAQUE_REGION */ - cairo_region_t *opaque_region; + MtkRegion *opaque_region; /* the input shape region for picking */ - cairo_region_t *input_region; + MtkRegion *input_region; /* _NET_WM_WINDOW_OPACITY rescaled to 0xFF */ guint8 opacity; diff --git a/src/core/window.c b/src/core/window.c index 7b27e30a5..008ea0d5a 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -313,17 +313,10 @@ meta_window_finalize (GObject *object) { MetaWindow *window = META_WINDOW (object); - if (window->frame_bounds) - cairo_region_destroy (window->frame_bounds); - - if (window->shape_region) - cairo_region_destroy (window->shape_region); - - if (window->opaque_region) - cairo_region_destroy (window->opaque_region); - - if (window->input_region) - cairo_region_destroy (window->input_region); + g_clear_pointer (&window->frame_bounds, mtk_region_unref); + g_clear_pointer (&window->shape_region, mtk_region_unref); + g_clear_pointer (&window->opaque_region, mtk_region_unref); + g_clear_pointer (&window->input_region, mtk_region_unref); if (window->transient_for) g_object_unref (window->transient_for); @@ -3945,10 +3938,7 @@ meta_window_move_resize_internal (MetaWindow *window, } if ((result & META_MOVE_RESIZE_RESULT_FRAME_SHAPE_CHANGED) && window->frame_bounds) - { - cairo_region_destroy (window->frame_bounds); - window->frame_bounds = NULL; - } + g_clear_pointer (&window->frame_bounds, mtk_region_unref); meta_window_foreach_transient (window, maybe_move_attached_window, NULL); @@ -7024,11 +7014,11 @@ meta_window_get_frame_type (MetaWindow *window) * * Gets a region representing the outer bounds of the window's frame. * - * Return value: (transfer none) (nullable): a #cairo_region_t + * Return value: (transfer none) (nullable): a #MtkRegion * holding the outer bounds of the window, or %NULL if the window * doesn't have a frame. */ -cairo_region_t * +MtkRegion * meta_window_get_frame_bounds (MetaWindow *window) { if (!window->frame_bounds) diff --git a/src/meta/meta-shadow-factory.h b/src/meta/meta-shadow-factory.h index 722b001ab..dabfe9fa4 100644 --- a/src/meta/meta-shadow-factory.h +++ b/src/meta/meta-shadow-factory.h @@ -22,8 +22,6 @@ #pragma once -#include - #include "clutter/clutter.h" #include "cogl/cogl.h" #include "meta/meta-window-shape.h" @@ -105,15 +103,15 @@ META_EXPORT void meta_shadow_unref (MetaShadow *shadow); META_EXPORT -void meta_shadow_paint (MetaShadow *shadow, - CoglFramebuffer *framebuffer, - int window_x, - int window_y, - int window_width, - int window_height, - guint8 opacity, - cairo_region_t *clip, - gboolean clip_strictly); +void meta_shadow_paint (MetaShadow *shadow, + CoglFramebuffer *framebuffer, + int window_x, + int window_y, + int window_width, + int window_height, + guint8 opacity, + MtkRegion *clip, + gboolean clip_strictly); META_EXPORT void meta_shadow_get_bounds (MetaShadow *shadow, diff --git a/src/meta/meta-window-shape.h b/src/meta/meta-window-shape.h index fd2dd5fad..2d70a341e 100644 --- a/src/meta/meta-window-shape.h +++ b/src/meta/meta-window-shape.h @@ -22,7 +22,6 @@ #pragma once -#include #include #include @@ -45,7 +44,7 @@ GType meta_window_shape_get_type (void) G_GNUC_CONST; typedef struct _MetaWindowShape MetaWindowShape; META_EXPORT -MetaWindowShape * meta_window_shape_new (cairo_region_t *region); +MetaWindowShape * meta_window_shape_new (MtkRegion *region); META_EXPORT MetaWindowShape * meta_window_shape_ref (MetaWindowShape *shape); @@ -68,6 +67,6 @@ void meta_window_shape_get_borders (MetaWindowShape *shape, int *border_left); META_EXPORT -cairo_region_t *meta_window_shape_to_region (MetaWindowShape *shape, - int center_width, - int center_height); +MtkRegion * meta_window_shape_to_region (MetaWindowShape *shape, + int center_width, + int center_height); diff --git a/src/meta/window.h b/src/meta/window.h index 127160e78..5ccd765aa 100644 --- a/src/meta/window.h +++ b/src/meta/window.h @@ -20,7 +20,6 @@ #pragma once #include -#include #include #include @@ -355,7 +354,7 @@ META_EXPORT MetaFrameType meta_window_get_frame_type (MetaWindow *window); META_EXPORT -cairo_region_t *meta_window_get_frame_bounds (MetaWindow *window); +MtkRegion *meta_window_get_frame_bounds (MetaWindow *window); META_EXPORT MetaWindow *meta_window_get_tile_match (MetaWindow *window); diff --git a/src/tests/clutter/conform/actor-shader-effect.c b/src/tests/clutter/conform/actor-shader-effect.c index 338add624..ebf28bbe6 100644 --- a/src/tests/clutter/conform/actor-shader-effect.c +++ b/src/tests/clutter/conform/actor-shader-effect.c @@ -233,7 +233,7 @@ get_pixel (CoglFramebuffer *fb, static void view_painted_cb (ClutterStage *stage, ClutterStageView *view, - cairo_region_t *redraw_clip, + MtkRegion *redraw_clip, ClutterFrame *frame, gpointer data) { diff --git a/src/tests/meta-ref-test.c b/src/tests/meta-ref-test.c index 9459b4612..67fee6675 100644 --- a/src/tests/meta-ref-test.c +++ b/src/tests/meta-ref-test.c @@ -270,11 +270,11 @@ typedef struct } CaptureViewData; static void -on_after_paint (MetaStage *stage, - ClutterStageView *view, - const cairo_region_t *redraw_clip, - ClutterFrame *frame, - gpointer user_data) +on_after_paint (MetaStage *stage, + ClutterStageView *view, + const MtkRegion *redraw_clip, + ClutterFrame *frame, + gpointer user_data) { CaptureViewData *data = user_data; MtkRectangle rect; diff --git a/src/tests/native-kms-render.c b/src/tests/native-kms-render.c index 90ea9b581..2948aa52f 100644 --- a/src/tests/native-kms-render.c +++ b/src/tests/native-kms-render.c @@ -148,7 +148,7 @@ on_scanout_before_paint (ClutterStage *stage, static void on_scanout_paint_view (ClutterStage *stage, ClutterStageView *stage_view, - cairo_region_t *region, + MtkRegion *region, ClutterFrame *frame, KmsRenderingTest *test) { @@ -389,7 +389,7 @@ on_scanout_fallback_before_paint (ClutterStage *stage, static void on_scanout_fallback_paint_view (ClutterStage *stage, ClutterStageView *stage_view, - cairo_region_t *region, + MtkRegion *region, ClutterFrame *frame, KmsRenderingTest *test) { diff --git a/src/wayland/meta-pointer-confinement-wayland.c b/src/wayland/meta-pointer-confinement-wayland.c index 1a4f0bb37..998cc6eb0 100644 --- a/src/wayland/meta-pointer-confinement-wayland.c +++ b/src/wayland/meta-pointer-confinement-wayland.c @@ -35,7 +35,6 @@ #include "wayland/meta-pointer-confinement-wayland.h" #include -#include #include "backends/meta-backend-private.h" #include "backends/meta-pointer-constraint.h" @@ -225,7 +224,7 @@ meta_pointer_confinement_wayland_create_constraint (MetaPointerConfinementWaylan MetaPointerConfinementWaylandPrivate *priv; MetaPointerConstraint *constraint; MetaWaylandSurface *surface; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; int geometry_scale; float dx, dy; double min_edge_distance; @@ -239,19 +238,19 @@ meta_pointer_confinement_wayland_create_constraint (MetaPointerConfinementWaylan geometry_scale = meta_wayland_surface_get_geometry_scale (surface); if (geometry_scale != 1) { - cairo_region_t *scaled_region; + g_autoptr (MtkRegion) scaled_region = NULL; scaled_region = meta_region_scale (region, geometry_scale); - cairo_region_destroy (region); - region = scaled_region; + g_clear_pointer (®ion, mtk_region_unref); + region = g_steal_pointer (&scaled_region); } meta_wayland_surface_get_absolute_coordinates (surface, 0, 0, &dx, &dy); - cairo_region_translate (region, dx, dy); + mtk_region_translate (region, dx, dy); min_edge_distance = wl_fixed_to_double (1) * geometry_scale; - constraint = meta_pointer_constraint_new (region, min_edge_distance); - cairo_region_destroy (region); + constraint = meta_pointer_constraint_new (g_steal_pointer (®ion), + min_edge_distance); return constraint; } diff --git a/src/wayland/meta-pointer-lock-wayland.c b/src/wayland/meta-pointer-lock-wayland.c index 549defbcb..5ac15a219 100644 --- a/src/wayland/meta-pointer-lock-wayland.c +++ b/src/wayland/meta-pointer-lock-wayland.c @@ -62,7 +62,7 @@ meta_pointer_lock_wayland_create_constraint (MetaPointerConfinementWayland *conf MetaPointerConstraint *constraint; graphene_point_t point; MtkRectangle rect; - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; float sx, sy, x, y; clutter_seat_query_state (seat, pointer, NULL, &point, NULL); @@ -75,10 +75,9 @@ meta_pointer_lock_wayland_create_constraint (MetaPointerConfinementWayland *conf meta_wayland_surface_get_absolute_coordinates (surface, sx, sy, &x, &y); rect = (MtkRectangle) { .x = x, .y = y, .width = 1, .height = 1 }; - region = cairo_region_create_rectangle (&rect); + region = mtk_region_create_rectangle (&rect); - constraint = meta_pointer_constraint_new (region, 0.0); - cairo_region_destroy (region); + constraint = meta_pointer_constraint_new (g_steal_pointer (®ion), 0.0); return constraint; } diff --git a/src/wayland/meta-wayland-actor-surface.c b/src/wayland/meta-wayland-actor-surface.c index df03748ea..6ea95d896 100644 --- a/src/wayland/meta-wayland-actor-surface.c +++ b/src/wayland/meta-wayland-actor-surface.c @@ -215,43 +215,40 @@ meta_wayland_actor_surface_real_sync_actor_state (MetaWaylandActorSurface *actor #ifdef HAVE_XWAYLAND if (!META_IS_XWAYLAND_SURFACE (surface_role)) #endif - { - if (surface->input_region) - { - cairo_region_t *input_region; + { + if (surface->input_region) + { + g_autoptr (MtkRegion) input_region = NULL; - input_region = cairo_region_copy (surface->input_region); - cairo_region_intersect_rectangle (input_region, &surface_rect); - meta_surface_actor_set_input_region (surface_actor, input_region); - cairo_region_destroy (input_region); - } - else - { - meta_surface_actor_set_input_region (surface_actor, NULL); - } + input_region = mtk_region_copy (surface->input_region); + mtk_region_intersect_rectangle (input_region, &surface_rect); + meta_surface_actor_set_input_region (surface_actor, input_region); + } + else + { + meta_surface_actor_set_input_region (surface_actor, NULL); + } - if (!meta_shaped_texture_has_alpha (stex)) - { - cairo_region_t *opaque_region; + if (!meta_shaped_texture_has_alpha (stex)) + { + g_autoptr (MtkRegion) opaque_region = NULL; - opaque_region = cairo_region_create_rectangle (&surface_rect); - meta_surface_actor_set_opaque_region (surface_actor, opaque_region); - cairo_region_destroy (opaque_region); - } - else if (surface->opaque_region) - { - cairo_region_t *opaque_region; + opaque_region = mtk_region_create_rectangle (&surface_rect); + meta_surface_actor_set_opaque_region (surface_actor, opaque_region); + } + else if (surface->opaque_region) + { + g_autoptr (MtkRegion) opaque_region = NULL; - opaque_region = cairo_region_copy (surface->opaque_region); - cairo_region_intersect_rectangle (opaque_region, &surface_rect); - meta_surface_actor_set_opaque_region (surface_actor, opaque_region); - cairo_region_destroy (opaque_region); - } - else - { - meta_surface_actor_set_opaque_region (surface_actor, NULL); - } - } + opaque_region = mtk_region_copy (surface->opaque_region); + mtk_region_intersect_rectangle (opaque_region, &surface_rect); + meta_surface_actor_set_opaque_region (surface_actor, opaque_region); + } + else + { + meta_surface_actor_set_opaque_region (surface_actor, NULL); + } + } meta_shaped_texture_set_transform (stex, surface->buffer_transform); diff --git a/src/wayland/meta-wayland-buffer.c b/src/wayland/meta-wayland-buffer.c index 465b4b67c..e30e35a67 100644 --- a/src/wayland/meta-wayland-buffer.c +++ b/src/wayland/meta-wayland-buffer.c @@ -675,7 +675,7 @@ meta_wayland_buffer_is_y_inverted (MetaWaylandBuffer *buffer) static gboolean process_shm_buffer_damage (MetaWaylandBuffer *buffer, MetaMultiTexture *texture, - cairo_region_t *region, + MtkRegion *region, GError **error) { struct wl_shm_buffer *shm_buffer; @@ -684,7 +684,7 @@ process_shm_buffer_damage (MetaWaylandBuffer *buffer, CoglPixelFormat format; CoglTexture *cogl_texture; - n_rectangles = cairo_region_num_rectangles (region); + n_rectangles = mtk_region_num_rectangles (region); shm_buffer = wl_shm_buffer_get (buffer->resource); @@ -702,7 +702,7 @@ process_shm_buffer_damage (MetaWaylandBuffer *buffer, int bpp; bpp = cogl_pixel_format_get_bytes_per_pixel (format, 0); - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); if (!_cogl_texture_set_region (cogl_texture, rect.width, rect.height, @@ -726,7 +726,7 @@ process_shm_buffer_damage (MetaWaylandBuffer *buffer, void meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer, MetaMultiTexture *texture, - cairo_region_t *region) + MtkRegion *region) { gboolean res = FALSE; GError *error = NULL; diff --git a/src/wayland/meta-wayland-buffer.h b/src/wayland/meta-wayland-buffer.h index 2b50c2539..70a58d622 100644 --- a/src/wayland/meta-wayland-buffer.h +++ b/src/wayland/meta-wayland-buffer.h @@ -22,7 +22,6 @@ #pragma once -#include #include #include "cogl/cogl.h" @@ -100,7 +99,7 @@ void meta_wayland_buffer_dec_use_count (MetaWaylandBuff gboolean meta_wayland_buffer_is_y_inverted (MetaWaylandBuffer *buffer); void meta_wayland_buffer_process_damage (MetaWaylandBuffer *buffer, MetaMultiTexture *texture, - cairo_region_t *region); + MtkRegion *region); CoglScanout * meta_wayland_buffer_try_acquire_scanout (MetaWaylandBuffer *buffer, CoglOnscreen *onscreen); diff --git a/src/wayland/meta-wayland-cursor-surface.c b/src/wayland/meta-wayland-cursor-surface.c index cd54de2bc..00db31eb4 100644 --- a/src/wayland/meta-wayland-cursor-surface.c +++ b/src/wayland/meta-wayland-cursor-surface.c @@ -176,8 +176,8 @@ meta_wayland_cursor_surface_apply_state (MetaWaylandSurfaceRole *surface_role, wl_list_init (&pending->frame_callback_list); if (pending->newly_attached && - ((!cairo_region_is_empty (pending->surface_damage) || - !cairo_region_is_empty (pending->buffer_damage)) || + ((!mtk_region_is_empty (pending->surface_damage) || + !mtk_region_is_empty (pending->buffer_damage)) || !priv->buffer)) update_cursor_sprite_texture (META_WAYLAND_CURSOR_SURFACE (surface_role)); } diff --git a/src/wayland/meta-wayland-pointer-constraints.c b/src/wayland/meta-wayland-pointer-constraints.c index a1a6441f1..41353c946 100644 --- a/src/wayland/meta-wayland-pointer-constraints.c +++ b/src/wayland/meta-wayland-pointer-constraints.c @@ -55,7 +55,7 @@ struct _MetaWaylandPointerConstraint MetaWaylandSurface *surface; gboolean is_enabled; - cairo_region_t *region; + MtkRegion *region; struct wl_resource *resource; MetaWaylandPointerGrab grab; MetaWaylandSeat *seat; @@ -85,7 +85,7 @@ typedef struct _MetaWaylandSurfacePointerConstraintsData typedef struct { MetaWaylandPointerConstraint *constraint; - cairo_region_t *region; + MtkRegion *region; gulong applied_handler_id; } MetaWaylandPendingConstraintState; @@ -322,7 +322,7 @@ meta_wayland_pointer_constraint_new (MetaWaylandSurface *su if (region) { constraint->region = - cairo_region_copy (meta_wayland_region_peek_cairo_region (region)); + mtk_region_copy (meta_wayland_region_peek_cairo_region (region)); } else { @@ -437,7 +437,7 @@ meta_wayland_pointer_constraint_destroy (MetaWaylandPointerConstraint *constrain meta_wayland_pointer_constraint_disable (constraint); wl_resource_set_user_data (constraint->resource, NULL); - g_clear_pointer (&constraint->region, cairo_region_destroy); + g_clear_pointer (&constraint->region, mtk_region_unref); g_object_unref (constraint); } @@ -446,14 +446,13 @@ is_within_constraint_region (MetaWaylandPointerConstraint *constraint, wl_fixed_t sx, wl_fixed_t sy) { - cairo_region_t *region; + g_autoptr (MtkRegion) region = NULL; gboolean is_within; region = meta_wayland_pointer_constraint_calculate_effective_region (constraint); - is_within = cairo_region_contains_point (region, - wl_fixed_to_int (sx), - wl_fixed_to_int (sy)); - cairo_region_destroy (region); + is_within = mtk_region_contains_point (region, + wl_fixed_to_int (sx), + wl_fixed_to_int (sy)); return is_within; } @@ -606,15 +605,15 @@ meta_wayland_pointer_constraint_maybe_enable_for_window (MetaWindow *window) } } -cairo_region_t * +MtkRegion * meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint) { - cairo_region_t *region; + MtkRegion *region; MetaWindow *window; region = meta_wayland_surface_calculate_input_region (constraint->surface); if (constraint->region) - cairo_region_intersect (region, constraint->region); + mtk_region_intersect (region, constraint->region); window = meta_wayland_surface_get_window (constraint->surface); if (window && window->frame) @@ -630,12 +629,10 @@ meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerCo frame->bottom_height); if (actual_width > 0 && actual_height > 0) { - cairo_region_intersect_rectangle (region, &(MtkRectangle) { - .x = frame->child_x, - .y = frame->child_y, - .width = actual_width, - .height = actual_height - }); + mtk_region_intersect_rectangle (region, &MTK_RECTANGLE_INIT (frame->child_x, + frame->child_y, + actual_width, + actual_height)); } } @@ -669,7 +666,7 @@ pointer_constraint_resource_destroyed (struct wl_resource *resource) static void pending_constraint_state_free (MetaWaylandPendingConstraintState *constraint_pending) { - g_clear_pointer (&constraint_pending->region, cairo_region_destroy); + g_clear_pointer (&constraint_pending->region, mtk_region_unref); if (constraint_pending->constraint) g_object_remove_weak_pointer (G_OBJECT (constraint_pending->constraint), (gpointer *) &constraint_pending->constraint); @@ -759,7 +756,7 @@ pending_constraint_state_applied (MetaWaylandSurfaceState *pending, if (!constraint) return; - g_clear_pointer (&constraint->region, cairo_region_destroy); + g_clear_pointer (&constraint->region, mtk_region_unref); if (constraint_pending->region) { constraint->region = constraint_pending->region; @@ -815,11 +812,11 @@ meta_wayland_pointer_constraint_set_pending_region (MetaWaylandPointerConstraint constraint_pending = ensure_pending_constraint_state (constraint); - g_clear_pointer (&constraint_pending->region, cairo_region_destroy); + g_clear_pointer (&constraint_pending->region, mtk_region_unref); if (region) { constraint_pending->region = - cairo_region_copy (meta_wayland_region_peek_cairo_region (region)); + mtk_region_copy (meta_wayland_region_peek_cairo_region (region)); } } diff --git a/src/wayland/meta-wayland-pointer-constraints.h b/src/wayland/meta-wayland-pointer-constraints.h index 9d148bdf2..d09fdabc1 100644 --- a/src/wayland/meta-wayland-pointer-constraints.h +++ b/src/wayland/meta-wayland-pointer-constraints.h @@ -35,7 +35,7 @@ G_DECLARE_FINAL_TYPE (MetaWaylandPointerConstraint, void meta_wayland_pointer_constraints_init (MetaWaylandCompositor *compositor); -cairo_region_t * meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint); +MtkRegion * meta_wayland_pointer_constraint_calculate_effective_region (MetaWaylandPointerConstraint *constraint); MetaWaylandSurface * meta_wayland_pointer_constraint_get_surface (MetaWaylandPointerConstraint *constraint); diff --git a/src/wayland/meta-wayland-region.c b/src/wayland/meta-wayland-region.c index 9dfb3b92b..1fcc47c5f 100644 --- a/src/wayland/meta-wayland-region.c +++ b/src/wayland/meta-wayland-region.c @@ -28,7 +28,7 @@ struct _MetaWaylandRegion { struct wl_resource *resource; - cairo_region_t *region; + MtkRegion *region; }; static void @@ -39,31 +39,31 @@ wl_region_destroy (struct wl_client *client, } static void -wl_region_add (struct wl_client *client, +wl_region_add (struct wl_client *client, struct wl_resource *resource, - gint32 x, - gint32 y, - gint32 width, - gint32 height) + gint32 x, + gint32 y, + gint32 width, + gint32 height) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); MtkRectangle rectangle = { x, y, width, height }; - cairo_region_union_rectangle (region->region, &rectangle); + mtk_region_union_rectangle (region->region, &rectangle); } static void -wl_region_subtract (struct wl_client *client, +wl_region_subtract (struct wl_client *client, struct wl_resource *resource, - gint32 x, - gint32 y, - gint32 width, - gint32 height) + gint32 x, + gint32 y, + gint32 width, + gint32 height) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); MtkRectangle rectangle = { x, y, width, height }; - cairo_region_subtract_rectangle (region->region, &rectangle); + mtk_region_subtract_rectangle (region->region, &rectangle); } static const struct wl_region_interface meta_wayland_wl_region_interface = { @@ -77,7 +77,7 @@ wl_region_destructor (struct wl_resource *resource) { MetaWaylandRegion *region = wl_resource_get_user_data (resource); - cairo_region_destroy (region->region); + g_clear_pointer (®ion->region, mtk_region_unref); g_free (region); } @@ -92,12 +92,12 @@ meta_wayland_region_create (MetaWaylandCompositor *compositor, region->resource = wl_resource_create (client, &wl_region_interface, wl_resource_get_version (compositor_resource), id); wl_resource_set_implementation (region->resource, &meta_wayland_wl_region_interface, region, wl_region_destructor); - region->region = cairo_region_create (); + region->region = mtk_region_create (); return region; } -cairo_region_t * +MtkRegion * meta_wayland_region_peek_cairo_region (MetaWaylandRegion *region) { return region->region; diff --git a/src/wayland/meta-wayland-region.h b/src/wayland/meta-wayland-region.h index 1b986bf38..5840fdf0d 100644 --- a/src/wayland/meta-wayland-region.h +++ b/src/wayland/meta-wayland-region.h @@ -22,7 +22,6 @@ #pragma once -#include #include #include @@ -33,4 +32,4 @@ MetaWaylandRegion * meta_wayland_region_create (MetaWaylandCompositor *composito struct wl_resource *compositor_resource, guint32 id); -cairo_region_t * meta_wayland_region_peek_cairo_region (MetaWaylandRegion *region); +MtkRegion * meta_wayland_region_peek_cairo_region (MetaWaylandRegion *region); diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index d42f31828..5e632c1a9 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -263,8 +263,8 @@ meta_wayland_surface_assign_role (MetaWaylandSurface *surface, static void surface_process_damage (MetaWaylandSurface *surface, - cairo_region_t *surface_region, - cairo_region_t *buffer_region) + MtkRegion *surface_region, + MtkRegion *buffer_region) { MetaWaylandBuffer *buffer = meta_wayland_surface_get_buffer (surface); MtkRectangle buffer_rect; @@ -282,12 +282,12 @@ surface_process_damage (MetaWaylandSurface *surface, .height = meta_wayland_surface_get_buffer_height (surface), }; - if (!cairo_region_is_empty (surface_region)) + if (!mtk_region_is_empty (surface_region)) { MtkRectangle surface_rect; - cairo_region_t *scaled_region; - cairo_region_t *transformed_region; - cairo_region_t *viewport_region; + g_autoptr (MtkRegion) scaled_region = NULL; + g_autoptr (MtkRegion) transformed_region = NULL; + g_autoptr (MtkRegion) viewport_region = NULL; graphene_rect_t src_rect; /* Intersect the damage region with the surface region before scaling in @@ -297,7 +297,7 @@ surface_process_damage (MetaWaylandSurface *surface, .width = meta_wayland_surface_get_width (surface), .height = meta_wayland_surface_get_height (surface), }; - cairo_region_intersect_rectangle (surface_region, &surface_rect); + mtk_region_intersect_rectangle (surface_region, &surface_rect); /* The damage region must be in the same coordinate space as the buffer, * i.e. scaled with surface->scale. */ @@ -343,14 +343,10 @@ surface_process_damage (MetaWaylandSurface *surface, /* Now add the scaled, cropped and transformed damage region to the * buffer damage. Buffer damage is already in the correct coordinate * space. */ - cairo_region_union (buffer_region, transformed_region); - - cairo_region_destroy (viewport_region); - cairo_region_destroy (scaled_region); - cairo_region_destroy (transformed_region); + mtk_region_union (buffer_region, transformed_region); } - cairo_region_intersect_rectangle (buffer_region, &buffer_rect); + mtk_region_intersect_rectangle (buffer_region, &buffer_rect); meta_wayland_buffer_process_damage (buffer, surface->output_state.texture, buffer_region); @@ -360,11 +356,11 @@ surface_process_damage (MetaWaylandSurface *surface, { int i, n_rectangles; - n_rectangles = cairo_region_num_rectangles (buffer_region); + n_rectangles = mtk_region_num_rectangles (buffer_region); for (i = 0; i < n_rectangles; i++) { MtkRectangle rect; - cairo_region_get_rectangle (buffer_region, i, &rect); + rect = mtk_region_get_rectangle (buffer_region, i); meta_surface_actor_process_damage (actor, rect.x, rect.y, @@ -403,8 +399,8 @@ meta_wayland_surface_state_set_default (MetaWaylandSurfaceState *state) state->opaque_region = NULL; state->opaque_region_set = FALSE; - state->surface_damage = cairo_region_create (); - state->buffer_damage = cairo_region_create (); + state->surface_damage = mtk_region_create (); + state->buffer_damage = mtk_region_create (); wl_list_init (&state->frame_callback_list); state->has_new_geometry = FALSE; @@ -442,10 +438,10 @@ meta_wayland_surface_state_clear (MetaWaylandSurfaceState *state) g_clear_object (&state->texture); - g_clear_pointer (&state->surface_damage, cairo_region_destroy); - g_clear_pointer (&state->buffer_damage, cairo_region_destroy); - g_clear_pointer (&state->input_region, cairo_region_destroy); - g_clear_pointer (&state->opaque_region, cairo_region_destroy); + g_clear_pointer (&state->surface_damage, mtk_region_unref); + g_clear_pointer (&state->buffer_damage, mtk_region_unref); + g_clear_pointer (&state->input_region, mtk_region_unref); + g_clear_pointer (&state->opaque_region, mtk_region_unref); g_clear_pointer (&state->xdg_positioner, g_free); if (state->buffer_destroy_handler_id) @@ -500,15 +496,15 @@ meta_wayland_surface_state_merge_into (MetaWaylandSurfaceState *from, wl_list_insert_list (&to->frame_callback_list, &from->frame_callback_list); wl_list_init (&from->frame_callback_list); - cairo_region_union (to->surface_damage, from->surface_damage); - cairo_region_union (to->buffer_damage, from->buffer_damage); + mtk_region_union (to->surface_damage, from->surface_damage); + mtk_region_union (to->buffer_damage, from->buffer_damage); if (from->input_region_set) { if (to->input_region) - cairo_region_union (to->input_region, from->input_region); + mtk_region_union (to->input_region, from->input_region); else - to->input_region = cairo_region_reference (from->input_region); + to->input_region = mtk_region_ref (from->input_region); to->input_region_set = TRUE; } @@ -516,9 +512,9 @@ meta_wayland_surface_state_merge_into (MetaWaylandSurfaceState *from, if (from->opaque_region_set) { if (to->opaque_region) - cairo_region_union (to->opaque_region, from->opaque_region); + mtk_region_union (to->opaque_region, from->opaque_region); else - to->opaque_region = cairo_region_reference (from->opaque_region); + to->opaque_region = mtk_region_ref (from->opaque_region); to->opaque_region_set = TRUE; } @@ -800,8 +796,8 @@ meta_wayland_surface_apply_state (MetaWaylandSurface *surface, meta_wayland_surface_get_width (surface) != old_width || meta_wayland_surface_get_height (surface) != old_height; - if (!cairo_region_is_empty (state->surface_damage) || - !cairo_region_is_empty (state->buffer_damage)) + if (!mtk_region_is_empty (state->surface_damage) || + !mtk_region_is_empty (state->buffer_damage)) { surface_process_damage (surface, state->surface_damage, @@ -814,22 +810,16 @@ meta_wayland_surface_apply_state (MetaWaylandSurface *surface, if (state->opaque_region_set) { - if (surface->opaque_region) - cairo_region_destroy (surface->opaque_region); + g_clear_pointer (&surface->opaque_region, mtk_region_unref); if (state->opaque_region) - surface->opaque_region = cairo_region_reference (state->opaque_region); - else - surface->opaque_region = NULL; + surface->opaque_region = mtk_region_ref (state->opaque_region); } if (state->input_region_set) { - if (surface->input_region) - cairo_region_destroy (surface->input_region); + g_clear_pointer (&surface->input_region, mtk_region_unref); if (state->input_region) - surface->input_region = cairo_region_reference (state->input_region); - else - surface->input_region = NULL; + surface->input_region = mtk_region_ref (state->input_region); } /* @@ -1072,7 +1062,7 @@ wl_surface_damage (struct wl_client *client, .width = width, .height = height }; - cairo_region_union_rectangle (pending->surface_damage, &rectangle); + mtk_region_union_rectangle (pending->surface_damage, &rectangle); } static void @@ -1114,12 +1104,12 @@ wl_surface_set_opaque_region (struct wl_client *client, MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource); MetaWaylandSurfaceState *pending = surface->pending_state; - g_clear_pointer (&pending->opaque_region, cairo_region_destroy); + g_clear_pointer (&pending->opaque_region, mtk_region_unref); if (region_resource) { MetaWaylandRegion *region = wl_resource_get_user_data (region_resource); - cairo_region_t *cr_region = meta_wayland_region_peek_cairo_region (region); - pending->opaque_region = cairo_region_copy (cr_region); + MtkRegion *cr_region = meta_wayland_region_peek_cairo_region (region); + pending->opaque_region = mtk_region_copy (cr_region); } pending->opaque_region_set = TRUE; } @@ -1132,12 +1122,12 @@ wl_surface_set_input_region (struct wl_client *client, MetaWaylandSurface *surface = wl_resource_get_user_data (surface_resource); MetaWaylandSurfaceState *pending = surface->pending_state; - g_clear_pointer (&pending->input_region, cairo_region_destroy); + g_clear_pointer (&pending->input_region, mtk_region_unref); if (region_resource) { MetaWaylandRegion *region = wl_resource_get_user_data (region_resource); - cairo_region_t *cr_region = meta_wayland_region_peek_cairo_region (region); - pending->input_region = cairo_region_copy (cr_region); + MtkRegion *cr_region = meta_wayland_region_peek_cairo_region (region); + pending->input_region = mtk_region_copy (cr_region); } pending->input_region_set = TRUE; } @@ -1241,7 +1231,7 @@ wl_surface_damage_buffer (struct wl_client *client, .width = width, .height = height }; - cairo_region_union_rectangle (pending->buffer_damage, &rectangle); + mtk_region_union_rectangle (pending->buffer_damage, &rectangle); } static void @@ -1469,10 +1459,8 @@ meta_wayland_surface_finalize (GObject *object) g_clear_object (&surface->output_state.texture); g_clear_object (&surface->buffer); - if (surface->opaque_region) - cairo_region_destroy (surface->opaque_region); - if (surface->input_region) - cairo_region_destroy (surface->input_region); + g_clear_pointer (&surface->opaque_region, mtk_region_unref); + g_clear_pointer (&surface->input_region, mtk_region_unref); meta_wayland_compositor_remove_frame_callback_surface (compositor, surface); meta_wayland_compositor_remove_presentation_feedback_surface (compositor, @@ -2076,10 +2064,10 @@ meta_wayland_surface_role_get_surface (MetaWaylandSurfaceRole *role) return priv->surface; } -cairo_region_t * +MtkRegion * meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface) { - cairo_region_t *region; + MtkRegion *region; MtkRectangle buffer_rect; if (!surface->buffer) @@ -2089,10 +2077,10 @@ meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface) .width = meta_wayland_surface_get_width (surface), .height = meta_wayland_surface_get_height (surface), }; - region = cairo_region_create_rectangle (&buffer_rect); + region = mtk_region_create_rectangle (&buffer_rect); if (surface->input_region) - cairo_region_intersect (region, surface->input_region); + mtk_region_intersect (region, surface->input_region); return region; } diff --git a/src/wayland/meta-wayland-surface.h b/src/wayland/meta-wayland-surface.h index 3e8db5a87..03e1f67bb 100644 --- a/src/wayland/meta-wayland-surface.h +++ b/src/wayland/meta-wayland-surface.h @@ -17,7 +17,6 @@ #pragma once -#include #include #include #include @@ -88,13 +87,13 @@ struct _MetaWaylandSurfaceState int scale; /* wl_surface.damage */ - cairo_region_t *surface_damage; + MtkRegion *surface_damage; /* wl_surface.damage_buffer */ - cairo_region_t *buffer_damage; + MtkRegion *buffer_damage; - cairo_region_t *input_region; + MtkRegion *input_region; gboolean input_region_set; - cairo_region_t *opaque_region; + MtkRegion *opaque_region; gboolean opaque_region_set; /* wl_surface.frame */ @@ -162,8 +161,8 @@ struct _MetaWaylandSurface struct wl_resource *resource; MetaWaylandCompositor *compositor; MetaWaylandSurfaceRole *role; - cairo_region_t *input_region; - cairo_region_t *opaque_region; + MtkRegion *input_region; + MtkRegion *opaque_region; int scale; int32_t offset_x, offset_y; GHashTable *outputs; @@ -346,7 +345,7 @@ void meta_wayland_surface_get_absolute_coordinates (MetaWaylandSu MetaWaylandSurface * meta_wayland_surface_role_get_surface (MetaWaylandSurfaceRole *role); -cairo_region_t * meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface); +MtkRegion * meta_wayland_surface_calculate_input_region (MetaWaylandSurface *surface); gboolean meta_wayland_surface_begin_grab_op (MetaWaylandSurface *surface, diff --git a/src/x11/window-props.c b/src/x11/window-props.c index 6fbcf1ae6..d183c7eb3 100644 --- a/src/x11/window-props.c +++ b/src/x11/window-props.c @@ -646,16 +646,16 @@ reload_wm_name (MetaWindow *window, } static void -meta_window_set_opaque_region (MetaWindow *window, - cairo_region_t *region) +meta_window_set_opaque_region (MetaWindow *window, + MtkRegion *region) { - if (cairo_region_equal (window->opaque_region, region)) + if (mtk_region_equal (window->opaque_region, region)) return; - g_clear_pointer (&window->opaque_region, cairo_region_destroy); + g_clear_pointer (&window->opaque_region, mtk_region_unref); if (region != NULL) - window->opaque_region = cairo_region_reference (region); + window->opaque_region = mtk_region_ref (region); meta_compositor_window_shape_changed (window->display->compositor, window); } @@ -665,7 +665,7 @@ reload_opaque_region (MetaWindow *window, MetaPropValue *value, gboolean initial) { - cairo_region_t *opaque_region = NULL; + MtkRegion *opaque_region = NULL; if (value->type != META_PROP_VALUE_INVALID) { @@ -703,7 +703,7 @@ reload_opaque_region (MetaWindow *window, rect_index++; } - opaque_region = cairo_region_create_rectangles (rects, nrects); + opaque_region = mtk_region_create_rectangles (rects, nrects); g_free (rects); } @@ -714,7 +714,7 @@ reload_opaque_region (MetaWindow *window, else if (window->frame && value->source_xwindow == window->frame->xwindow) meta_frame_set_opaque_region (window->frame, opaque_region); - g_clear_pointer (&opaque_region, cairo_region_destroy); + g_clear_pointer (&opaque_region, mtk_region_unref); } static void diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c index 5243655ab..30fea41fd 100644 --- a/src/x11/window-x11.c +++ b/src/x11/window-x11.c @@ -2365,14 +2365,14 @@ meta_window_x11_set_net_wm_state (MetaWindow *window) update_gtk_edge_constraints (window); } -static cairo_region_t * +static MtkRegion * region_create_from_x_rectangles (const XRectangle *rects, - int n_rects) + int n_rects) { int i; MtkRectangle *cairo_rects = g_newa (MtkRectangle, n_rects); - for (i = 0; i < n_rects; i ++) + for (i = 0; i < n_rects; i++) { cairo_rects[i].x = rects[i].x; cairo_rects[i].y = rects[i].y; @@ -2380,20 +2380,20 @@ region_create_from_x_rectangles (const XRectangle *rects, cairo_rects[i].height = rects[i].height; } - return cairo_region_create_rectangles (cairo_rects, n_rects); + return mtk_region_create_rectangles (cairo_rects, n_rects); } static void -meta_window_set_input_region (MetaWindow *window, - cairo_region_t *region) +meta_window_set_input_region (MetaWindow *window, + MtkRegion *region) { - if (cairo_region_equal (window->input_region, region)) + if (mtk_region_equal (window->input_region, region)) return; - g_clear_pointer (&window->input_region, cairo_region_destroy); + g_clear_pointer (&window->input_region, mtk_region_unref); if (region != NULL) - window->input_region = cairo_region_reference (region); + window->input_region = mtk_region_ref (region); meta_compositor_window_shape_changed (window->display->compositor, window); } @@ -2401,17 +2401,17 @@ meta_window_set_input_region (MetaWindow *window, #if 0 /* Print out a region; useful for debugging */ static void -print_region (cairo_region_t *region) +print_region (MtkRegion *region) { int n_rects; int i; - n_rects = cairo_region_num_rectangles (region); + n_rects = mtk_region_num_rectangles (region); g_print ("["); for (i = 0; i < n_rects; i++) { MtkRectangle rect; - cairo_region_get_rectangle (region, i, &rect); + rect = mtk_region_get_rectangle (region, i); g_print ("+%d+%dx%dx%d ", rect.x, rect.y, rect.width, rect.height); } @@ -2423,7 +2423,7 @@ void meta_window_x11_update_input_region (MetaWindow *window) { MetaX11Display *x11_display = window->display->x11_display; - cairo_region_t *region = NULL; + g_autoptr (MtkRegion) region = NULL; MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); Window xwindow; @@ -2446,7 +2446,7 @@ meta_window_x11_update_input_region (MetaWindow *window) if (META_X11_DISPLAY_HAS_SHAPE (x11_display)) { /* Translate the set of XShape rectangles that we - * get from the X server to a cairo_region. */ + * get from the X server to a MtkRegion. */ XRectangle *rects = NULL; int n_rects = -1, ordering; @@ -2479,7 +2479,7 @@ meta_window_x11_update_input_region (MetaWindow *window) else if (n_rects == 0) { /* Client set an empty region. */ - region = cairo_region_create (); + region = mtk_region_create (); } else if (n_rects == 1 && (rects[0].x == 0 && @@ -2516,24 +2516,23 @@ meta_window_x11_update_input_region (MetaWindow *window) * window would have gotten if it was unshaped. In our case, * this is simply the client area. */ - cairo_region_intersect_rectangle (region, &client_area); + mtk_region_intersect_rectangle (region, &client_area); } meta_window_set_input_region (window, region); - cairo_region_destroy (region); } static void -meta_window_set_shape_region (MetaWindow *window, - cairo_region_t *region) +meta_window_set_shape_region (MetaWindow *window, + MtkRegion *region) { - if (cairo_region_equal (window->shape_region, region)) + if (mtk_region_equal (window->shape_region, region)) return; - g_clear_pointer (&window->shape_region, cairo_region_destroy); + g_clear_pointer (&window->shape_region, mtk_region_unref); if (region != NULL) - window->shape_region = cairo_region_reference (region); + window->shape_region = mtk_region_ref (region); meta_compositor_window_shape_changed (window->display->compositor, window); } @@ -2544,12 +2543,12 @@ meta_window_x11_update_shape_region (MetaWindow *window) MetaX11Display *x11_display = window->display->x11_display; MetaWindowX11 *window_x11 = META_WINDOW_X11 (window); MetaWindowX11Private *priv = meta_window_x11_get_instance_private (window_x11); - cairo_region_t *region = NULL; + g_autoptr (MtkRegion) region = NULL; if (META_X11_DISPLAY_HAS_SHAPE (x11_display)) { /* Translate the set of XShape rectangles that we - * get from the X server to a cairo_region. */ + * get from the X server to a MtkRegion. */ XRectangle *rects = NULL; int n_rects, ordering; @@ -2597,17 +2596,16 @@ meta_window_x11_update_shape_region (MetaWindow *window) * window would have gotten if it was unshaped. In our case, * this is simply the client area. */ - cairo_region_intersect_rectangle (region, &client_area); + mtk_region_intersect_rectangle (region, &client_area); /* Some applications might explicitly set their bounding region * to the client area. Detect these cases, and throw out the * bounding region in this case for decorated windows. */ if (window->decorated && - cairo_region_contains_rectangle (region, &client_area) == CAIRO_REGION_OVERLAP_IN) - g_clear_pointer (®ion, cairo_region_destroy); + mtk_region_contains_rectangle (region, &client_area) == MTK_REGION_OVERLAP_IN) + g_clear_pointer (®ion, mtk_region_unref); } meta_window_set_shape_region (window, region); - cairo_region_destroy (region); } /* Generally meta_window_same_application() is a better idea