summaryrefslogtreecommitdiff
path: root/src/desktop/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop/Window.cpp')
-rw-r--r--src/desktop/Window.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 1336456a..891fd652 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1165,6 +1165,44 @@ void CWindow::setAnimationsToMove() {
m_bAnimatingIn = false;
}
+void CWindow::onWorkspaceAnimUpdate() {
+ // clip box for animated offsets
+ if (!m_bIsFloating || m_bPinned || m_bIsFullscreen) {
+ m_vFloatingOffset = Vector2D(0, 0);
+ return;
+ }
+
+ Vector2D offset;
+ const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID);
+ if (!PWORKSPACE)
+ return;
+
+ const auto PWSMON = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
+ if (!PWSMON)
+ return;
+
+ const auto WINBB = getFullWindowBoundingBox();
+ if (PWORKSPACE->m_vRenderOffset.value().x != 0) {
+ const auto PROGRESS = PWORKSPACE->m_vRenderOffset.value().x / PWSMON->vecSize.x;
+
+ if (WINBB.x < PWSMON->vecPosition.x)
+ offset.x += (PWSMON->vecPosition.x - WINBB.x) * PROGRESS;
+
+ if (WINBB.x + WINBB.width > PWSMON->vecPosition.x + PWSMON->vecSize.x)
+ offset.x += (WINBB.x + WINBB.width - PWSMON->vecPosition.x - PWSMON->vecSize.x) * PROGRESS;
+ } else if (PWORKSPACE->m_vRenderOffset.value().y != 0) {
+ const auto PROGRESS = PWORKSPACE->m_vRenderOffset.value().y / PWSMON->vecSize.y;
+
+ if (WINBB.y < PWSMON->vecPosition.y)
+ offset.y += (PWSMON->vecPosition.y - WINBB.y) * PROGRESS;
+
+ if (WINBB.y + WINBB.height > PWSMON->vecPosition.y + PWSMON->vecSize.y)
+ offset.y += (WINBB.y + WINBB.height - PWSMON->vecPosition.y - PWSMON->vecSize.y) * PROGRESS;
+ }
+
+ m_vFloatingOffset = offset;
+}
+
int CWindow::popupsCount() {
if (m_bIsX11)
return 1;