damageRing: move to hyprland impl
A small wlroots utility we were still using.
This commit is contained in:
parent
65f04f265c
commit
def5fcb212
6 changed files with 111 additions and 38 deletions
52
src/helpers/DamageRing.cpp
Normal file
52
src/helpers/DamageRing.cpp
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#include "DamageRing.hpp"
|
||||
|
||||
void CDamageRing::setSize(const Vector2D& size_) {
|
||||
if (size_ == size)
|
||||
return;
|
||||
|
||||
size = size_;
|
||||
|
||||
damageEntire();
|
||||
}
|
||||
|
||||
bool CDamageRing::damage(const CRegion& rg) {
|
||||
CRegion clipped = rg.copy().intersect(CBox{{}, size});
|
||||
if (clipped.empty())
|
||||
return false;
|
||||
|
||||
current.add(clipped);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CDamageRing::damageEntire() {
|
||||
damage(CBox{{}, size});
|
||||
}
|
||||
|
||||
void CDamageRing::rotate() {
|
||||
previousIdx = (previousIdx + DAMAGE_RING_PREVIOUS_LEN - 1) % DAMAGE_RING_PREVIOUS_LEN;
|
||||
|
||||
previous[previousIdx] = current;
|
||||
current.clear();
|
||||
}
|
||||
|
||||
CRegion CDamageRing::getBufferDamage(int age) {
|
||||
if (age <= 0 || age > DAMAGE_RING_PREVIOUS_LEN + 1)
|
||||
return CBox{{}, size};
|
||||
|
||||
CRegion damage = current;
|
||||
|
||||
for (int i = 0; i < age - 1; ++i) {
|
||||
int j = (previousIdx + i) % DAMAGE_RING_PREVIOUS_LEN;
|
||||
damage.add(previous.at(j));
|
||||
}
|
||||
|
||||
// don't return a ludicrous amount of rects
|
||||
if (damage.getRects().size() > 8)
|
||||
return damage.getExtents();
|
||||
|
||||
return damage;
|
||||
}
|
||||
|
||||
bool CDamageRing::hasChanged() {
|
||||
return !current.empty();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue