From e041b2a3ea3835a6b3a59dfbd1f24a86fd104396 Mon Sep 17 00:00:00 2001 From: rtk0c Date: Sat, 17 May 2025 18:03:44 -0700 Subject: Dirty rect & UI features - dirty rectangle (and the math library thereof) - drawing it - no more std::vector in Sandbox - single step - cycle counter display --- src/common.hpp | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'src/common.hpp') diff --git a/src/common.hpp b/src/common.hpp index 1c64c34..e745ece 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -7,5 +7,42 @@ // clang-format on struct Pt { - int x, y; + int x{}, y{}; + + Pt operator+(Pt o) const { return { x + o.x, y + o.y }; } + Pt operator-(Pt o) const { return { x - o.x, y - o.y }; } + Pt operator*(int k) const { return { x * k, y * k }; } + Pt operator/(int k) const { return { x / k, y / k }; } + bool operator==(const Pt&) const = default; }; + +// avoid including +#define MMIN(x, y) ((x) < (y) ? (x) : (y)) +#define MMAX(x, y) ((x) > (y) ? (x) : (y)) +inline Pt pt_min(Pt a, Pt b) { + return Pt{ MMIN(a.x, b.x), MMIN(a.y, b.y) }; +} +inline Pt pt_max(Pt a, Pt b) { + return Pt{ MMAX(a.x, b.x), MMAX(a.y, b.y) }; +} +#undef MMIN +#undef MMAX + +struct Rect { + Pt bl, tr; + + Rect() {} + Rect(Pt tl, Pt br) + : bl(tl), tr(br) {} + Rect(int x0, int y0, int x1, int y1) + : bl(x0, y0), tr(x1, y1) {} + + bool operator==(const Rect&) const = default; +}; + +inline Rect rect_union(Rect a, Rect b) { + return Rect(pt_min(a.bl, b.bl), pt_max(a.tr, b.tr)); +} +inline Rect rect_union(Rect a, Pt b) { + return Rect(pt_min(a.bl, b), pt_max(a.tr, b)); +} -- cgit v1.2.3-70-g09d2