mirror of
https://github.com/brl/mutter.git
synced 2025-03-25 12:43:52 +00:00
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:
parent
e1370ee209
commit
36b46af92f
@ -195,21 +195,8 @@ meta_region_scale_double (cairo_region_t *region,
|
|||||||
{
|
{
|
||||||
cairo_region_get_rectangle (region, i, &rects[i]);
|
cairo_region_get_rectangle (region, i, &rects[i]);
|
||||||
|
|
||||||
switch (rounding_strategy)
|
meta_rectangle_scale_double (&rects[i], scale, rounding_strategy,
|
||||||
{
|
&rects[i]);
|
||||||
case META_ROUNDING_STRATEGY_SHRINK:
|
|
||||||
rects[i].x = (int) ceil (rects[i].x * scale);
|
|
||||||
rects[i].y = (int) ceil (rects[i].y * scale);
|
|
||||||
rects[i].width = (int) floor (rects[i].width * scale);
|
|
||||||
rects[i].height = (int) floor (rects[i].height * scale);
|
|
||||||
break;
|
|
||||||
case META_ROUNDING_STRATEGY_GROW:
|
|
||||||
rects[i].x = (int) floor (rects[i].x * scale);
|
|
||||||
rects[i].y = (int) floor (rects[i].y * scale);
|
|
||||||
rects[i].width = (int) ceil (rects[i].width * scale);
|
|
||||||
rects[i].height = (int) ceil (rects[i].height * scale);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scaled_region = cairo_region_create_rectangles (rects, n_rects);
|
scaled_region = cairo_region_create_rectangles (rects, n_rects);
|
||||||
|
@ -26,12 +26,7 @@
|
|||||||
|
|
||||||
#include "backends/meta-backend-types.h"
|
#include "backends/meta-backend-types.h"
|
||||||
#include "clutter/clutter.h"
|
#include "clutter/clutter.h"
|
||||||
|
#include "core/boxes-private.h"
|
||||||
typedef enum _MetaRoundingStrategy
|
|
||||||
{
|
|
||||||
META_ROUNDING_STRATEGY_SHRINK,
|
|
||||||
META_ROUNDING_STRATEGY_GROW,
|
|
||||||
} MetaRoundingStrategy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MetaRegionIterator:
|
* MetaRegionIterator:
|
||||||
|
@ -39,6 +39,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)) *
|
||||||
@ -219,6 +225,11 @@ 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 (const MetaRectangle *rect,
|
||||||
|
double scale,
|
||||||
|
MetaRoundingStrategy rounding_strategy,
|
||||||
|
MetaRectangle *dest);
|
||||||
|
|
||||||
static inline ClutterRect
|
static inline ClutterRect
|
||||||
meta_rectangle_to_clutter_rect (MetaRectangle *rect)
|
meta_rectangle_to_clutter_rect (MetaRectangle *rect)
|
||||||
{
|
{
|
||||||
|
@ -2044,3 +2044,30 @@ meta_rectangle_is_adjecent_to (MetaRectangle *rect,
|
|||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
meta_rectangle_scale_double (const MetaRectangle *rect,
|
||||||
|
double scale,
|
||||||
|
MetaRoundingStrategy rounding_strategy,
|
||||||
|
MetaRectangle *dest)
|
||||||
|
{
|
||||||
|
switch (rounding_strategy)
|
||||||
|
{
|
||||||
|
case META_ROUNDING_STRATEGY_SHRINK:
|
||||||
|
*dest = (MetaRectangle) {
|
||||||
|
.x = (int) ceil (rect->x * scale),
|
||||||
|
.y = (int) ceil (rect->y * scale),
|
||||||
|
.width = (int) floor (rect->width * scale),
|
||||||
|
.height = (int) floor (rect->height * scale),
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
case META_ROUNDING_STRATEGY_GROW:
|
||||||
|
*dest = (MetaRectangle) {
|
||||||
|
.x = (int) floor (rect->x * scale),
|
||||||
|
.y = (int) floor (rect->y * scale),
|
||||||
|
.width = (int) ceil (rect->width * scale),
|
||||||
|
.height = (int) ceil (rect->height * scale),
|
||||||
|
};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user