summaryrefslogtreecommitdiff
path: root/src/managers/AnimationManager.cpp
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-03-23 15:14:50 -0700
committerGitHub <noreply@github.com>2024-03-23 22:14:50 +0000
commitc7fbea3368452c34c47a4a634e642de6cd4090cb (patch)
tree7062602a26df7d2fe53ceecaa517f0a304aa194b /src/managers/AnimationManager.cpp
parent295128ab2a3c4ad1715bb7cd926880316f00e667 (diff)
animations: Fix animation issue in focusworkspaceoncurrentmonitor (#5202)
* dont render when workspace offset * add guard * can remove useless code now if workspace offset is not taken into account * clang-format * when special workspace is moved, set anim to move * add offset back * make it a configurable option because some folks apparently can't align their monitors correctly and may not want this feature😔 * remove config option
Diffstat (limited to 'src/managers/AnimationManager.cpp')
-rw-r--r--src/managers/AnimationManager.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp
index 7d2a86e7..a14bc195 100644
--- a/src/managers/AnimationManager.cpp
+++ b/src/managers/AnimationManager.cpp
@@ -109,14 +109,13 @@ void CAnimationManager::tick() {
g_pHyprRenderer->damageWindow(w.get());
}
- // if a workspace window is on any monitor, damage it
+ // if a special workspace window is on any monitor, damage it
for (auto& w : g_pCompositor->m_vWindows) {
for (auto& m : g_pCompositor->m_vMonitors) {
- if (w->m_iWorkspaceID == PWORKSPACE->m_iID && g_pCompositor->windowValidMapped(w.get()) && g_pHyprRenderer->shouldRenderWindow(w.get(), m.get(), PWORKSPACE)) {
+ if (w->m_iWorkspaceID == PWORKSPACE->m_iID && PWORKSPACE->m_bIsSpecialWorkspace && g_pCompositor->windowValidMapped(w.get()) &&
+ g_pHyprRenderer->shouldRenderWindow(w.get(), m.get(), PWORKSPACE)) {
CBox bb = w->getFullWindowBoundingBox();
bb.translate(PWORKSPACE->m_vRenderOffset.value());
- if (PWORKSPACE->m_bIsSpecialWorkspace)
- bb.scaleFromCenter(1.1); // for some reason special ws windows getting border artifacts if you close it too quickly...
bb.intersection({m->vecPosition, m->vecSize});
g_pHyprRenderer->damageBox(&bb);
}
@@ -197,7 +196,8 @@ void CAnimationManager::tick() {
PWINDOW->updateWindowDecos();
auto bb = PWINDOW->getFullWindowBoundingBox();
const auto PWINDOWWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
- bb.translate(PWINDOWWORKSPACE->m_vRenderOffset.value());
+ if (PWINDOWWORKSPACE)
+ bb.translate(PWINDOWWORKSPACE->m_vRenderOffset.value());
g_pHyprRenderer->damageBox(&bb);
} else if (PWORKSPACE) {
for (auto& w : g_pCompositor->m_vWindows) {
@@ -245,7 +245,7 @@ void CAnimationManager::tick() {
BORDERSIZE + ROUNDINGSIZE); // bottom
// damage for new box
- CBox WLRBOXNEW = {PWINDOW->m_vRealPosition.value(), PWINDOW->m_vRealSize.value()};
+ CBox WLRBOXNEW = PWINDOW->getFullWindowBoundingBox();
const auto PWINDOWWORKSPACE = g_pCompositor->getWorkspaceByID(PWINDOW->m_iWorkspaceID);
if (PWINDOWWORKSPACE)
WLRBOXNEW.translate(PWINDOWWORKSPACE->m_vRenderOffset.value());