boxes: Add helper to scale rectangles by a double

And change the similar region scaling helper to use this one.

https://gitlab.gnome.org/GNOME/mutter/merge_requests/362
This commit is contained in:
Jonas Ådahl 2018-12-20 16:58:03 +01:00 committed by Ray Strode
parent 847d37b4f1
commit e8a3341700
2 changed files with 32 additions and 0 deletions

View File

@ -38,6 +38,12 @@ typedef enum
FIXED_DIRECTION_Y = 1 << 1, FIXED_DIRECTION_Y = 1 << 1,
} FixedDirections; } FixedDirections;
typedef enum _MetaRoundingStrategy
{
META_ROUNDING_STRATEGY_SHRINK,
META_ROUNDING_STRATEGY_GROW,
} MetaRoundingStrategy;
/* Output functions -- note that the output buffer had better be big enough: /* Output functions -- note that the output buffer had better be big enough:
* rect_to_string: RECT_LENGTH * rect_to_string: RECT_LENGTH
* region_to_string: (RECT_LENGTH+strlen(separator_string)) * * region_to_string: (RECT_LENGTH+strlen(separator_string)) *
@ -218,6 +224,10 @@ GList* meta_rectangle_find_nonintersected_monitor_edges (
gboolean meta_rectangle_is_adjecent_to (MetaRectangle *rect, gboolean meta_rectangle_is_adjecent_to (MetaRectangle *rect,
MetaRectangle *other); MetaRectangle *other);
void meta_rectangle_scale_double (MetaRectangle *rect,
double scale,
MetaRoundingStrategy rounding_strategy);
static inline ClutterRect static inline ClutterRect
meta_rectangle_to_clutter_rect (MetaRectangle *rect) meta_rectangle_to_clutter_rect (MetaRectangle *rect)
{ {

View File

@ -2036,3 +2036,25 @@ meta_rectangle_is_adjecent_to (MetaRectangle *rect,
else else
return FALSE; return FALSE;
} }
void
meta_rectangle_scale_double (MetaRectangle *rect,
double scale,
MetaRoundingStrategy rounding_strategy)
{
switch (rounding_strategy)
{
case META_ROUNDING_STRATEGY_SHRINK:
rect->x = (int) ceil (rect->x * scale);
rect->y = (int) ceil (rect->y * scale);
rect->width = (int) floor (rect->width * scale);
rect->height = (int) floor (rect->height * scale);
break;
case META_ROUNDING_STRATEGY_GROW:
rect->x = (int) floor (rect->x * scale);
rect->y = (int) floor (rect->y * scale);
rect->width = (int) ceil (rect->width * scale);
rect->height = (int) ceil (rect->height * scale);
break;
}
}