ladybird/Widgets/Rect.cpp
Andreas Kling e4cb9b2985 Have WindowManager::invalidate() unite dirty rects that intersect each other.
This is kinda primitive but it avoids double-draw when slowly dragging stuff.
2019-01-13 00:04:23 +01:00

32 lines
759 B
C++

#include "Rect.h"
#include <AK/StdLibExtras.h>
#include "kstdio.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.setX(l);
m_location.setY(t);
m_size.setWidth((r - l) + 1);
m_size.setHeight((b - t) + 1);
}
Rect Rect::united(const Rect& other) const
{
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;
}