summaryrefslogtreecommitdiff
path: root/SharedGraphics/Rect.cpp
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-01-19 23:22:46 +0100
committerAndreas Kling <awesomekling@gmail.com>2019-01-19 23:22:46 +0100
commit7e5b81fe4807f89868af61ab27b53f003d607167 (patch)
tree219fa209115c2708d56be06205aff43b01279cf3 /SharedGraphics/Rect.cpp
parentb75ee4aacbf41539d73f494da5aba468310b71b9 (diff)
downloadserenity-7e5b81fe4807f89868af61ab27b53f003d607167.zip
Make a SharedGraphics directory for classes shared between Kernel and LibGUI.
Diffstat (limited to 'SharedGraphics/Rect.cpp')
-rw-r--r--SharedGraphics/Rect.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/SharedGraphics/Rect.cpp b/SharedGraphics/Rect.cpp
new file mode 100644
index 0000000000..5b01bf2e1e
--- /dev/null
+++ b/SharedGraphics/Rect.cpp
@@ -0,0 +1,35 @@
+#include "Rect.h"
+#include <AK/StdLibExtras.h>
+
+void Rect::intersect(const Rect& other)
+{
+ int l = max(left(), other.left());
+ int r = min(right(), other.right());
+ int t = max(top(), other.top());
+ int b = min(bottom(), other.bottom());
+
+ if (l >= r || t >= b) {
+ m_location = { };
+ m_size = { };
+ return;
+ }
+
+ m_location.set_x(l);
+ m_location.set_y(t);
+ m_size.set_width((r - l) + 1);
+ m_size.set_height((b - t) + 1);
+}
+
+Rect Rect::united(const Rect& other) const
+{
+ if (is_null())
+ return other;
+ if (other.is_null())
+ return *this;
+ Rect rect;
+ rect.set_left(min(left(), other.left()));
+ rect.set_top(min(top(), other.top()));
+ rect.set_right(max(right(), other.right()));
+ rect.set_bottom(max(bottom(), other.bottom()));
+ return rect;
+}