aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorKirill Primak <vyivel@posteo.net>2021-08-23 23:32:43 +0300
committerSimon Ser <contact@emersion.fr>2021-08-24 10:36:06 +0200
commit664307f9682eaac573b22a2282a6d089e1abd489 (patch)
tree7381bd88510340d3ad5c6ef0bc3cad19869bcc1c /util
parentf2f3df9fb1ecc6d5d4fbda26ba5d57a8c04a3b62 (diff)
util/box: introduce wlr_fbox_transform()
A floating-point version of wlr_box_transform().
Diffstat (limited to 'util')
-rw-r--r--util/box.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/util/box.c b/util/box.c
index b382716b..93b54e31 100644
--- a/util/box.c
+++ b/util/box.c
@@ -119,3 +119,51 @@ void wlr_box_transform(struct wlr_box *dest, const struct wlr_box *box,
break;
}
}
+
+void wlr_fbox_transform(struct wlr_fbox *dest, const struct wlr_fbox *box,
+ enum wl_output_transform transform, double width, double height) {
+ struct wlr_fbox src = *box;
+
+ if (transform % 2 == 0) {
+ dest->width = src.width;
+ dest->height = src.height;
+ } else {
+ dest->width = src.height;
+ dest->height = src.width;
+ }
+
+ switch (transform) {
+ case WL_OUTPUT_TRANSFORM_NORMAL:
+ dest->x = src.x;
+ dest->y = src.y;
+ break;
+ case WL_OUTPUT_TRANSFORM_90:
+ dest->x = height - src.y - src.height;
+ dest->y = src.x;
+ break;
+ case WL_OUTPUT_TRANSFORM_180:
+ dest->x = width - src.x - src.width;
+ dest->y = height - src.y - src.height;
+ break;
+ case WL_OUTPUT_TRANSFORM_270:
+ dest->x = src.y;
+ dest->y = width - src.x - src.width;
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED:
+ dest->x = width - src.x - src.width;
+ dest->y = src.y;
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_90:
+ dest->x = src.y;
+ dest->y = src.x;
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_180:
+ dest->x = src.x;
+ dest->y = height - src.y - src.height;
+ break;
+ case WL_OUTPUT_TRANSFORM_FLIPPED_270:
+ dest->x = height - src.y - src.height;
+ dest->y = width - src.x - src.width;
+ break;
+ }
+}