mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-10 13:00:29 +03:00
3271c115e2
Previously we'd blit every pixel in every window that intersected any dirty rect to the back buffer. With this patch, we limit ourselves to blitting the pixels inside the actual dirty rects. There's still a lot of optimizations to make in this code.
36 lines
829 B
C++
36 lines
829 B
C++
#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;
|
|
}
|