From 259237fae792e8f19d9b7920b2354f75bc1789e2 Mon Sep 17 00:00:00 2001 From: quou Date: Mon, 23 Sep 2024 21:11:29 +1000 Subject: initial commit, basic platform and rendering code. --- rect.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 rect.c (limited to 'rect.c') diff --git a/rect.c b/rect.c new file mode 100644 index 0000000..69758c1 --- /dev/null +++ b/rect.c @@ -0,0 +1,85 @@ +#include "rect.h" + +Rect* rect_clip(Rect* r, const Rect* c) { + int n; + if ((n = c->x - r->x) > 0) { + r->w -= n; + r->x += n; + } + if ((n = c->y - r->y) > 0) { + r->h -= n; + r->y += n; + } + if ((n = r->x + r->w - (c->x + c->w)) > 0) + r->w -= n; + if ((n = r->y + r->h - (c->y + c->h)) > 0) + r->h -= n; + return r; +} + +Rect* rect_clipr(Rect* r, const int* c) { + int n; + 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 = r->x + r->w - c[2]) > 0) + r->w -= n; + if ((n = r->y + r->h - c[3]) > 0) + r->h -= n; + return r; +} + +Rect* rect_clips(Rect* r, Rect* s, const Rect* c) { + int n; + if ((n = c->x - r->x) > 0) { + r->w -= n; + r->x += n; + s->w -= n; + s->x += n; + } + if ((n = c->y - r->y) > 0) { + r->h -= n; + r->y += n; + s->h -= n; + s->y += n; + } + if ((n = r->x + r->w - (c->x + c->w)) > 0) { + r->w -= n; + s->w -= n; + } + if ((n = r->y + r->h - (c->y + c->h)) > 0) { + r->h -= n; + s->h -= n; + } + return r; +} + +Rect* rect_clipsr(Rect* r, Rect* s, const int* c) { + int n; + 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 = r->x + r->w - c[2]) > 0) { + r->w -= n; + s->w -= n; + } + if ((n = r->y + r->h - c[3]) > 0) { + r->h -= n; + s->h -= n; + } + return r; +} -- cgit v1.2.3-54-g00ecf