diff --git a/mtk/mtk/mtk-rectangle.c b/mtk/mtk/mtk-rectangle.c index 6e1324cca..25a88bb6f 100644 --- a/mtk/mtk/mtk-rectangle.c +++ b/mtk/mtk/mtk-rectangle.c @@ -23,7 +23,6 @@ #include "mtk/mtk-rectangle.h" - MtkRectangle * mtk_rectangle_copy (const MtkRectangle *rect) { @@ -445,3 +444,87 @@ mtk_rectangle_is_adjacent_to (const MtkRectangle *rect, else return FALSE; } + +/** + * mtk_rectangle_transform: + * @rect: the #MtkRectangle to be transformed + * @transform: the #MtkMonitorTransform + * @width: the width of the target space + * @height: the height of the target space + * @dest: the transformed #MtkRectangle + * + * This function transforms the values in @rect in order to compensate for + * @transform applied to a #MetaMonitor, making them match the viewport. Note + * that compensating implies that for a clockwise rotation of the #MetaMonitor + * an anti-clockwise rotation has to be applied to @rect. + */ +void +mtk_rectangle_transform (const MtkRectangle *rect, + MtkMonitorTransform transform, + int width, + int height, + MtkRectangle *dest) +{ + switch (transform) + { + case MTK_MONITOR_TRANSFORM_NORMAL: + *dest = *rect; + break; + case MTK_MONITOR_TRANSFORM_90: + *dest = (MtkRectangle) { + .x = rect->y, + .y = height - (rect->x + rect->width), + .width = rect->height, + .height = rect->width, + }; + break; + case MTK_MONITOR_TRANSFORM_180: + *dest = (MtkRectangle) { + .x = width - (rect->x + rect->width), + .y = height - (rect->y + rect->height), + .width = rect->width, + .height = rect->height, + }; + break; + case MTK_MONITOR_TRANSFORM_270: + *dest = (MtkRectangle) { + .x = width - (rect->y + rect->height), + .y = rect->x, + .width = rect->height, + .height = rect->width, + }; + break; + case MTK_MONITOR_TRANSFORM_FLIPPED: + *dest = (MtkRectangle) { + .x = width - (rect->x + rect->width), + .y = rect->y, + .width = rect->width, + .height = rect->height, + }; + break; + case MTK_MONITOR_TRANSFORM_FLIPPED_90: + *dest = (MtkRectangle) { + .x = rect->y, + .y = rect->x, + .width = rect->height, + .height = rect->width, + }; + break; + case MTK_MONITOR_TRANSFORM_FLIPPED_180: + *dest = (MtkRectangle) { + .x = rect->x, + .y = height - (rect->y + rect->height), + .width = rect->width, + .height = rect->height, + }; + break; + case MTK_MONITOR_TRANSFORM_FLIPPED_270: + *dest = (MtkRectangle) { + .x = width - (rect->y + rect->height), + .y = height - (rect->x + rect->width), + .width = rect->height, + .height = rect->width, + }; + break; + } +} diff --git a/mtk/mtk/mtk-rectangle.h b/mtk/mtk/mtk-rectangle.h index 57076eb92..a5b641bf8 100644 --- a/mtk/mtk/mtk-rectangle.h +++ b/mtk/mtk/mtk-rectangle.h @@ -25,6 +25,7 @@ #include #include "mtk/mtk-macros.h" +#include "mtk/mtk-monitor-transform.h" #define MTK_TYPE_RECTANGLE (mtk_rectangle_get_type ()) @@ -161,4 +162,13 @@ MTK_EXPORT gboolean mtk_rectangle_is_adjacent_to (const MtkRectangle *rect, const MtkRectangle *other); + + +MTK_EXPORT +void mtk_rectangle_transform (const MtkRectangle *rect, + MtkMonitorTransform transform, + int width, + int height, + MtkRectangle *dest); + G_DEFINE_AUTOPTR_CLEANUP_FUNC (MtkRectangle, mtk_rectangle_free) diff --git a/src/backends/meta-renderer-view.c b/src/backends/meta-renderer-view.c index d5100947a..4fe72e785 100644 --- a/src/backends/meta-renderer-view.c +++ b/src/backends/meta-renderer-view.c @@ -111,11 +111,11 @@ meta_renderer_view_transform_rect_to_onscreen (ClutterStageView *view, MetaRendererViewPrivate *priv = meta_renderer_view_get_instance_private (renderer_view); - meta_rectangle_transform (src_rect, - priv->transform, - dst_width, - dst_height, - dst_rect); + mtk_rectangle_transform (src_rect, + priv->transform, + dst_width, + dst_height, + dst_rect); } static void diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c index 33dd3d238..149c355ce 100644 --- a/src/compositor/meta-shaped-texture.c +++ b/src/compositor/meta-shaped-texture.c @@ -1252,11 +1252,11 @@ meta_shaped_texture_update_area (MetaShapedTexture *stex, scaled_and_transformed_height = stex->tex_height / stex->buffer_scale; } inverted_transform = mtk_monitor_transform_invert (stex->transform); - meta_rectangle_transform (clip, - inverted_transform, - scaled_and_transformed_width, - scaled_and_transformed_height, - clip); + mtk_rectangle_transform (clip, + inverted_transform, + scaled_and_transformed_width, + scaled_and_transformed_height, + clip); if (stex->has_viewport_src_rect || stex->has_viewport_dst_size) { diff --git a/src/core/boxes-private.h b/src/core/boxes-private.h index 16d7f302f..cca22eb14 100644 --- a/src/core/boxes-private.h +++ b/src/core/boxes-private.h @@ -237,10 +237,3 @@ META_EXPORT_TEST GList* meta_rectangle_find_nonintersected_monitor_edges ( const GList *monitor_rects, const GSList *all_struts); - -META_EXPORT_TEST -void meta_rectangle_transform (const MtkRectangle *rect, - MtkMonitorTransform transform, - int width, - int height, - MtkRectangle *dest); diff --git a/src/core/boxes.c b/src/core/boxes.c index d4af8d6de..48e81498c 100644 --- a/src/core/boxes.c +++ b/src/core/boxes.c @@ -1825,88 +1825,3 @@ meta_rectangle_find_nonintersected_monitor_edges ( return ret; } - -/** - * meta_rectangle_transform: - * @rect: the #MtkRectangle to be transformed - * @transform: the #MtkMonitorTransform - * @width: the width of the target space - * @height: the height of the target space - * @dest: the transformed #MtkRectangle - * - * This function transforms the values in @rect in order to compensate for - * @transform applied to a #MetaMonitor, making them match the viewport. Note - * that compensating implies that for a clockwise rotation of the #MetaMonitor - * an anti-clockwise rotation has to be applied to @rect. - */ -void -meta_rectangle_transform (const MtkRectangle *rect, - MtkMonitorTransform transform, - int width, - int height, - MtkRectangle *dest) -{ - switch (transform) - { - case MTK_MONITOR_TRANSFORM_NORMAL: - *dest = *rect; - break; - case MTK_MONITOR_TRANSFORM_90: - *dest = (MtkRectangle) { - .x = rect->y, - .y = height - (rect->x + rect->width), - .width = rect->height, - .height = rect->width, - }; - break; - case MTK_MONITOR_TRANSFORM_180: - *dest = (MtkRectangle) { - .x = width - (rect->x + rect->width), - .y = height - (rect->y + rect->height), - .width = rect->width, - .height = rect->height, - }; - break; - case MTK_MONITOR_TRANSFORM_270: - *dest = (MtkRectangle) { - .x = width - (rect->y + rect->height), - .y = rect->x, - .width = rect->height, - .height = rect->width, - }; - break; - case MTK_MONITOR_TRANSFORM_FLIPPED: - *dest = (MtkRectangle) { - .x = width - (rect->x + rect->width), - .y = rect->y, - .width = rect->width, - .height = rect->height, - }; - break; - case MTK_MONITOR_TRANSFORM_FLIPPED_90: - *dest = (MtkRectangle) { - .x = rect->y, - .y = rect->x, - .width = rect->height, - .height = rect->width, - }; - break; - case MTK_MONITOR_TRANSFORM_FLIPPED_180: - *dest = (MtkRectangle) { - .x = rect->x, - .y = height - (rect->y + rect->height), - .width = rect->width, - .height = rect->height, - }; - break; - case MTK_MONITOR_TRANSFORM_FLIPPED_270: - *dest = (MtkRectangle) { - .x = width - (rect->y + rect->height), - .y = height - (rect->x + rect->width), - .width = rect->height, - .height = rect->width, - }; - break; - } -} - diff --git a/src/wayland/meta-wayland-surface.c b/src/wayland/meta-wayland-surface.c index 5bb50465d..54c05115c 100644 --- a/src/wayland/meta-wayland-surface.c +++ b/src/wayland/meta-wayland-surface.c @@ -278,11 +278,11 @@ region_transform (const MtkRegion *region, { rects[i] = mtk_region_get_rectangle (region, i); - meta_rectangle_transform (&rects[i], - transform, - width, - height, - &rects[i]); + mtk_rectangle_transform (&rects[i], + transform, + width, + height, + &rects[i]); } transformed_region = mtk_region_create_rectangles (rects, n_rects); @@ -2364,11 +2364,11 @@ meta_wayland_surface_try_acquire_scanout (MetaWaylandSurface *surface, untransformed_view_height = view_rect.height; } - meta_rectangle_transform (&dst_rect, - view_transform, - untransformed_view_width, - untransformed_view_height, - &dst_rect); + mtk_rectangle_transform (&dst_rect, + view_transform, + untransformed_view_width, + untransformed_view_height, + &dst_rect); /* Use an implicit destination rect when possible */ if (surface->viewport.has_dst_size ||