summaryrefslogtreecommitdiff
path: root/rect.c
diff options
context:
space:
mode:
authorquou <quou@disroot.org>2024-07-27 11:15:21 +1000
committerquou <quou@disroot.org>2024-07-27 11:17:11 +1000
commit951f6115c16c3ab482c19705344295c90af1625b (patch)
treec7b140f8ba9db86955f2352d23fa9808138fad3e /rect.c
parentd2c76fd62fa735f3d4fc3ceb55a75d6f0b2dc758 (diff)
clipping and viewport improvements.
Diffstat (limited to 'rect.c')
-rw-r--r--rect.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/rect.c b/rect.c
index c72c66e..e3d3948 100644
--- a/rect.c
+++ b/rect.c
@@ -19,6 +19,24 @@ Rect* rect_clip(Rect* r, const Rect* c) {
return r;
}
+Rect* rect_clipr(Rect* r, const int* c) {
+ int n;
+ int x = r->x, y = r->y;
+ if ((n = c[0] - r->x) > 0) {
+ r->w -= n;
+ r->x += n;
+ }
+ if ((n = c[1] - r->y) > 0) {
+ r->h -= n;
+ r->y += n;
+ }
+ if ((n = x + r->w - c[2]) > 0)
+ r->w -= n;
+ if ((n = y + r->h - c[3]) > 0)
+ r->h -= n;
+ return r;
+}
+
Rect* rect_clips(Rect* r, Rect* s, const Rect* c) {
int n;
int x = r->x, y = r->y;
@@ -44,3 +62,29 @@ Rect* rect_clips(Rect* r, Rect* s, const Rect* c) {
}
return r;
}
+
+Rect* rect_clipsr(Rect* r, Rect* s, const int* c) {
+ int n;
+ int x = r->x, y = r->y;
+ if ((n = c[0] - r->x) > 0) {
+ r->w -= n;
+ r->x += n;
+ s->w -= n;
+ s->x += n;
+ }
+ if ((n = c[1] - r->y) > 0) {
+ r->h -= n;
+ r->y += n;
+ s->h -= n;
+ s->y += n;
+ }
+ if ((n = x + r->w - c[2]) > 0) {
+ r->w -= n;
+ s->w -= n;
+ }
+ if ((n = y + r->h - c[3]) > 0) {
+ r->h -= n;
+ s->h -= n;
+ }
+ return r;
+}