diff --git a/src/core/boxes-private.h b/src/core/boxes-private.h index d80cdacd3..24c596b5f 100644 --- a/src/core/boxes-private.h +++ b/src/core/boxes-private.h @@ -274,6 +274,10 @@ void meta_rectangle_transform (const MetaRectangle *rect, int height, MetaRectangle *dest); +void meta_rectangle_from_clutter_rect (ClutterRect *rect, + MetaRoundingStrategy rounding_strategy, + MetaRectangle *dest); + void meta_rectangle_crop_and_scale (const MetaRectangle *rect, ClutterRect *src_rect, int dst_width, diff --git a/src/core/boxes.c b/src/core/boxes.c index 938ec51e9..7b693e1b1 100644 --- a/src/core/boxes.c +++ b/src/core/boxes.c @@ -2151,6 +2151,39 @@ meta_rectangle_transform (const MetaRectangle *rect, } } +void +meta_rectangle_from_clutter_rect (ClutterRect *rect, + MetaRoundingStrategy rounding_strategy, + MetaRectangle *dest) +{ + switch (rounding_strategy) + { + case META_ROUNDING_STRATEGY_SHRINK: + { + *dest = (MetaRectangle) { + .x = ceilf (rect->origin.x), + .y = ceilf (rect->origin.y), + .width = floorf (rect->origin.x + rect->size.width) - dest->x, + .height = floorf (rect->origin.y + rect->size.height) - dest->x, + }; + } + break; + case META_ROUNDING_STRATEGY_GROW: + { + ClutterRect clamped = *rect; + clutter_rect_clamp_to_pixel (&clamped); + + *dest = (MetaRectangle) { + .x = clamped.origin.x, + .y = clamped.origin.y, + .width = clamped.size.width, + .height = clamped.size.height, + }; + } + break; + } +} + void meta_rectangle_crop_and_scale (const MetaRectangle *rect, ClutterRect *src_rect,