[mutter] boxes: Add function to create a rectangle from floating clutter rect
- From: Marco Trevisan <marcotrevi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] boxes: Add function to create a rectangle from floating clutter rect
- Date: Fri, 1 Mar 2019 18:52:14 +0000 (UTC)
commit a8c972cd6ba669147c01ccae57866e08b85957ba
Author: Marco Trevisan (TreviƱo) <mail 3v1n0 net>
Date: Fri Mar 1 14:23:05 2019 +0100
boxes: Add function to create a rectangle from floating clutter rect
Meta rectangles are integer based while clutter works in floating coordinates,
so when converting to integers we need a strategy.
Implement the shrink strategy by ceiling the coordinates and flooring the width,
and the grow strategy reusing clutter facility for this.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/3
src/core/boxes-private.h | 4 ++++
src/core/boxes.c | 33 +++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+)
---
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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]