diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-05 14:02:30 +0200 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-05-05 14:02:30 +0200 |
| commit | 77d37cd72ab87f67dd47930c61fa0ad8792f26c2 (patch) | |
| tree | d0792b879bd01ec228cf9e08addfcaf7a9439900 /src/managers/AnimationManager.cpp | |
| parent | 8369f2980aa0c98f087aaf2133c94af8027f14fb (diff) | |
optimization: dont damage entire window on border anim
Diffstat (limited to 'src/managers/AnimationManager.cpp')
| -rw-r--r-- | src/managers/AnimationManager.cpp | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp index 82e481e8..975b1105 100644 --- a/src/managers/AnimationManager.cpp +++ b/src/managers/AnimationManager.cpp @@ -121,9 +121,38 @@ void CAnimationManager::tick() { } } - // damage the window - g_pHyprRenderer->damageBox(&WLRBOXPREV); - g_pHyprRenderer->damageWindow(PWINDOW); + // damage the window with the damage policy + switch (av->m_eDamagePolicy) { + case AVARDAMAGE_ENTIRE: { + g_pHyprRenderer->damageBox(&WLRBOXPREV); + g_pHyprRenderer->damageWindow(PWINDOW); + break; + } + case AVARDAMAGE_BORDER: { + // damage only the border. + const auto BORDERSIZE = g_pConfigManager->getInt("general:border_size") + 1; // +1 for padding and shit + + // damage for old box + g_pHyprRenderer->damageBox(WLRBOXPREV.x - BORDERSIZE, WLRBOXPREV.y - BORDERSIZE, WLRBOXPREV.width, BORDERSIZE); // top + g_pHyprRenderer->damageBox(WLRBOXPREV.x - BORDERSIZE, WLRBOXPREV.y - BORDERSIZE, BORDERSIZE, WLRBOXPREV.height); // left + g_pHyprRenderer->damageBox(WLRBOXPREV.x + WLRBOXPREV.width, WLRBOXPREV.y - BORDERSIZE, BORDERSIZE, WLRBOXPREV.height); // right + g_pHyprRenderer->damageBox(WLRBOXPREV.x, WLRBOXPREV.y + WLRBOXPREV.height, WLRBOXPREV.width, BORDERSIZE); // bottom + + // damage for new box + const wlr_box WLRBOXNEW = {PWINDOW->m_vRealPosition.vec().x, PWINDOW->m_vRealPosition.vec().y, PWINDOW->m_vRealSize.vec().x, PWINDOW->m_vRealSize.vec().y}; + g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, WLRBOXNEW.width, BORDERSIZE); // top + g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE, WLRBOXNEW.height); // left + g_pHyprRenderer->damageBox(WLRBOXNEW.x + WLRBOXNEW.width, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE, WLRBOXNEW.height); // right + g_pHyprRenderer->damageBox(WLRBOXNEW.x, WLRBOXNEW.y + WLRBOXNEW.height, WLRBOXNEW.width, BORDERSIZE); // bottom + + break; + } + default: { + Debug::log(ERR, "av has damage policy INVALID???"); + break; + } + } + // set size and pos if valid if (g_pCompositor->windowValidMapped(PWINDOW)) |
