2022-07-07 11:52:12 +02:00
|
|
|
#include "InputManager.hpp"
|
|
|
|
#include "../../Compositor.hpp"
|
|
|
|
|
|
|
|
void CInputManager::onSwipeBegin(wlr_pointer_swipe_begin_event* e) {
|
2024-02-18 16:00:34 +01:00
|
|
|
static auto* const PSWIPE = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe");
|
|
|
|
static auto* const PSWIPEFINGERS = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_fingers");
|
|
|
|
static auto* const PSWIPENEW = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_create_new");
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if (e->fingers != **PSWIPEFINGERS || **PSWIPE == 0 || g_pSessionLockManager->isSessionLocked())
|
2022-07-07 11:52:12 +02:00
|
|
|
return;
|
|
|
|
|
2022-07-25 15:42:27 +02:00
|
|
|
int onMonitor = 0;
|
|
|
|
for (auto& w : g_pCompositor->m_vWorkspaces) {
|
2022-11-27 23:42:22 +01:00
|
|
|
if (w->m_iMonitorID == g_pCompositor->m_pLastMonitor->ID && !g_pCompositor->isWorkspaceSpecial(w->m_iID)) {
|
2022-07-25 15:42:27 +02:00
|
|
|
onMonitor++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if (onMonitor < 2 && !**PSWIPENEW)
|
2022-07-25 15:42:27 +02:00
|
|
|
return; // disallow swiping when there's 1 workspace on a monitor
|
|
|
|
|
2022-11-03 14:34:06 +01:00
|
|
|
beginWorkspaceSwipe();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CInputManager::beginWorkspaceSwipe() {
|
2022-07-07 11:52:12 +02:00
|
|
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(g_pCompositor->m_pLastMonitor->activeWorkspace);
|
|
|
|
|
2023-09-06 21:45:37 +02:00
|
|
|
Debug::log(LOG, "Starting a swipe from {}", PWORKSPACE->m_szName);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin = PWORKSPACE;
|
2022-12-16 18:17:31 +01:00
|
|
|
m_sActiveSwipe.delta = 0;
|
|
|
|
m_sActiveSwipe.pMonitor = g_pCompositor->m_pLastMonitor;
|
|
|
|
m_sActiveSwipe.avgSpeed = 0;
|
|
|
|
m_sActiveSwipe.speedPoints = 0;
|
2022-09-19 11:23:13 +02:00
|
|
|
|
|
|
|
if (PWORKSPACE->m_bHasFullscreenWindow) {
|
2023-01-22 17:03:25 +01:00
|
|
|
for (auto& ls : g_pCompositor->m_pLastMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
2023-01-05 19:25:45 +01:00
|
|
|
ls->alpha = 1.f;
|
2022-09-19 11:23:13 +02:00
|
|
|
}
|
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void CInputManager::onSwipeEnd(wlr_pointer_swipe_end_event* e) {
|
2022-07-07 20:53:22 +02:00
|
|
|
if (!m_sActiveSwipe.pWorkspaceBegin)
|
|
|
|
return; // no valid swipe
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
static auto* const PSWIPEPERC = (Hyprlang::FLOAT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_cancel_ratio");
|
|
|
|
static auto* const PSWIPEDIST = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_distance");
|
|
|
|
static auto* const PSWIPEFORC = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_min_speed_to_force");
|
|
|
|
static auto* const PSWIPENEW = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_create_new");
|
|
|
|
static auto* const PSWIPENUMBER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_numbered");
|
|
|
|
static auto* const PSWIPEUSER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_use_r");
|
|
|
|
static auto* const PWORKSPACEGAP = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("general:gaps_workspaces");
|
2023-11-19 13:33:26 +01:00
|
|
|
const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert" ||
|
2023-10-15 20:07:23 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle.starts_with("slidefadevert");
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
// commit
|
2022-12-16 18:17:31 +01:00
|
|
|
std::string wsname = "";
|
2024-02-18 16:00:34 +01:00
|
|
|
auto workspaceIDLeft = getWorkspaceIDFromString(**PSWIPENUMBER ? "-1" : (**PSWIPEUSER ? "r-1" : "m-1"), wsname);
|
|
|
|
auto workspaceIDRight = getWorkspaceIDFromString(**PSWIPENUMBER ? "+1" : (**PSWIPEUSER ? "r+1" : "m+1"), wsname);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2023-04-07 13:18:53 +02:00
|
|
|
// If we've been swiping off the right end with PSWIPENEW enabled, there is
|
|
|
|
// no workspace there yet, and we need to choose an ID for a new one now.
|
|
|
|
// With multiple monitors, it might not be appropriate to choose one more
|
|
|
|
// than the ID of the workspace we're swiping from, because that ID might
|
|
|
|
// just be on another monitor. It's also not just the smallest unused ID,
|
|
|
|
// because that could be a gap in the existing workspace numbers, and it'd
|
|
|
|
// be counterintuitive to swipe rightwards onto a new workspace and end up
|
|
|
|
// left of where we started. Instead, it's one more than the greatest
|
|
|
|
// workspace ID that currently exists.
|
2024-02-18 16:00:34 +01:00
|
|
|
if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID && **PSWIPENEW) {
|
2023-04-07 13:18:53 +02:00
|
|
|
int maxWorkspace = 0;
|
|
|
|
for (const auto& ws : g_pCompositor->m_vWorkspaces) {
|
|
|
|
maxWorkspace = std::max(maxWorkspace, ws->m_iID);
|
|
|
|
}
|
|
|
|
workspaceIDRight = maxWorkspace + 1;
|
2022-10-20 15:54:32 +02:00
|
|
|
}
|
|
|
|
|
2023-12-06 23:54:56 +01:00
|
|
|
auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER
|
|
|
|
auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft); // not guaranteed if PSWIPENUMBER
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2023-12-06 23:54:56 +01:00
|
|
|
const auto RENDEROFFSETMIDDLE = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.vec();
|
2024-02-18 16:00:34 +01:00
|
|
|
const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + **PWORKSPACEGAP;
|
|
|
|
const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + **PWORKSPACEGAP;
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-09-19 11:23:13 +02:00
|
|
|
CWorkspace* pSwitchedTo = nullptr;
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if ((abs(m_sActiveSwipe.delta) < **PSWIPEDIST * **PSWIPEPERC && (**PSWIPEFORC == 0 || (**PSWIPEFORC != 0 && m_sActiveSwipe.avgSpeed < **PSWIPEFORC))) ||
|
2022-12-16 18:17:31 +01:00
|
|
|
abs(m_sActiveSwipe.delta) < 2) {
|
2022-07-07 11:52:12 +02:00
|
|
|
// revert
|
2022-07-25 14:06:49 +02:00
|
|
|
if (abs(m_sActiveSwipe.delta) < 2) {
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACEL)
|
|
|
|
PWORKSPACEL->m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
|
2022-10-20 15:54:32 +02:00
|
|
|
if (PWORKSPACER)
|
2022-12-16 18:17:31 +01:00
|
|
|
PWORKSPACER->m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
|
2022-07-07 11:52:12 +02:00
|
|
|
} else {
|
2022-07-25 14:06:49 +02:00
|
|
|
if (m_sActiveSwipe.delta < 0) {
|
|
|
|
// to left
|
2023-11-19 13:33:26 +01:00
|
|
|
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACEL) {
|
|
|
|
if (VERTANIMS)
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACEL->m_vRenderOffset = Vector2D{0, -YDISTANCE};
|
2022-12-25 16:42:11 +01:00
|
|
|
else
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACEL->m_vRenderOffset = Vector2D{-XDISTANCE, 0};
|
2022-12-25 16:42:11 +01:00
|
|
|
}
|
2022-10-20 15:54:32 +02:00
|
|
|
} else if (PWORKSPACER) {
|
2022-07-25 14:06:49 +02:00
|
|
|
// to right
|
2022-10-07 17:52:53 +02:00
|
|
|
if (VERTANIMS)
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACER->m_vRenderOffset = Vector2D{0, YDISTANCE};
|
2022-10-07 17:52:53 +02:00
|
|
|
else
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACER->m_vRenderOffset = Vector2D{XDISTANCE, 0};
|
2022-07-25 14:06:49 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D();
|
2022-07-07 11:52:12 +02:00
|
|
|
}
|
2022-09-19 11:23:13 +02:00
|
|
|
|
|
|
|
pSwitchedTo = m_sActiveSwipe.pWorkspaceBegin;
|
2022-07-07 11:52:12 +02:00
|
|
|
} else if (m_sActiveSwipe.delta < 0) {
|
|
|
|
// switch to left
|
2022-12-25 16:42:11 +01:00
|
|
|
const auto RENDEROFFSET = PWORKSPACEL ? PWORKSPACEL->m_vRenderOffset.vec() : Vector2D();
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACEL)
|
2023-04-14 16:03:53 +02:00
|
|
|
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDLeft);
|
2022-12-25 16:42:11 +01:00
|
|
|
else {
|
2023-04-14 16:03:53 +02:00
|
|
|
m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDLeft, m_sActiveSwipe.pMonitor->ID));
|
2022-12-25 16:42:11 +01:00
|
|
|
PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft);
|
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
PWORKSPACEL->m_vRenderOffset.setValue(RENDEROFFSET);
|
2023-01-05 19:25:45 +01:00
|
|
|
PWORKSPACEL->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-07-19 18:30:53 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValue(RENDEROFFSETMIDDLE);
|
2022-10-07 17:52:53 +02:00
|
|
|
if (VERTANIMS)
|
2023-11-19 13:33:26 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(0, YDISTANCE);
|
2022-10-07 17:52:53 +02:00
|
|
|
else
|
2023-11-19 13:33:26 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(XDISTANCE, 0);
|
2023-01-05 19:25:45 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-19 18:30:53 +02:00
|
|
|
|
2022-08-09 20:36:21 +02:00
|
|
|
g_pInputManager->unconstrainMouse();
|
2022-07-26 18:38:30 +02:00
|
|
|
|
2022-07-07 11:52:12 +02:00
|
|
|
Debug::log(LOG, "Ended swipe to the left");
|
2022-09-19 11:23:13 +02:00
|
|
|
|
|
|
|
pSwitchedTo = PWORKSPACEL;
|
2022-07-07 11:52:12 +02:00
|
|
|
} else {
|
|
|
|
// switch to right
|
2022-10-20 15:54:32 +02:00
|
|
|
const auto RENDEROFFSET = PWORKSPACER ? PWORKSPACER->m_vRenderOffset.vec() : Vector2D();
|
|
|
|
|
|
|
|
if (PWORKSPACER)
|
2023-04-14 16:03:53 +02:00
|
|
|
m_sActiveSwipe.pMonitor->changeWorkspace(workspaceIDRight);
|
2022-12-25 16:42:11 +01:00
|
|
|
else {
|
2023-04-14 16:03:53 +02:00
|
|
|
m_sActiveSwipe.pMonitor->changeWorkspace(g_pCompositor->createNewWorkspace(workspaceIDRight, m_sActiveSwipe.pMonitor->ID));
|
2022-12-25 16:42:11 +01:00
|
|
|
PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight);
|
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
PWORKSPACER->m_vRenderOffset.setValue(RENDEROFFSET);
|
2023-01-05 19:25:45 +01:00
|
|
|
PWORKSPACER->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-07-19 18:30:53 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValue(RENDEROFFSETMIDDLE);
|
2022-10-07 17:52:53 +02:00
|
|
|
if (VERTANIMS)
|
2023-11-19 13:33:26 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(0, -YDISTANCE);
|
2022-10-07 17:52:53 +02:00
|
|
|
else
|
2023-11-19 13:33:26 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset = Vector2D(-XDISTANCE, 0);
|
2023-01-05 19:25:45 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-19 18:30:53 +02:00
|
|
|
|
2022-08-09 20:36:21 +02:00
|
|
|
g_pInputManager->unconstrainMouse();
|
2022-07-26 18:38:30 +02:00
|
|
|
|
2022-07-07 11:52:12 +02:00
|
|
|
Debug::log(LOG, "Ended swipe to the right");
|
2022-09-19 11:23:13 +02:00
|
|
|
|
|
|
|
pSwitchedTo = PWORKSPACER;
|
2022-07-07 11:52:12 +02:00
|
|
|
}
|
2023-09-12 00:39:24 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->rememberPrevWorkspace(pSwitchedTo);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-08-16 16:34:36 +02:00
|
|
|
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor);
|
|
|
|
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACEL)
|
|
|
|
PWORKSPACEL->m_bForceRendering = false;
|
2022-10-20 15:54:32 +02:00
|
|
|
if (PWORKSPACER)
|
|
|
|
PWORKSPACER->m_bForceRendering = false;
|
2022-07-07 11:52:12 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_bForceRendering = false;
|
|
|
|
|
2023-08-23 22:40:19 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin = nullptr;
|
|
|
|
m_sActiveSwipe.initialDirection = 0;
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
g_pInputManager->refocus();
|
2022-09-19 11:23:13 +02:00
|
|
|
|
|
|
|
// apply alpha
|
2023-01-22 17:03:25 +01:00
|
|
|
for (auto& ls : g_pCompositor->m_pLastMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP]) {
|
2023-01-05 19:25:45 +01:00
|
|
|
ls->alpha = pSwitchedTo->m_bHasFullscreenWindow && pSwitchedTo->m_efFullscreenMode == FULLSCREEN_FULL ? 0.f : 1.f;
|
2022-09-19 11:23:13 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void CInputManager::onSwipeUpdate(wlr_pointer_swipe_update_event* e) {
|
|
|
|
if (!m_sActiveSwipe.pWorkspaceBegin)
|
|
|
|
return;
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
static auto* const PSWIPEDIST = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_distance");
|
|
|
|
static auto* const PSWIPEINVR = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_invert");
|
|
|
|
static auto* const PSWIPENEW = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_create_new");
|
|
|
|
static auto* const PSWIPEDIRLOCK = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_direction_lock");
|
|
|
|
static auto* const PSWIPEDIRLOCKTHRESHOLD = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_direction_lock_threshold");
|
|
|
|
static auto* const PSWIPEFOREVER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_forever");
|
|
|
|
static auto* const PSWIPENUMBER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_numbered");
|
|
|
|
static auto* const PSWIPEUSER = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_use_r");
|
|
|
|
static auto* const PWORKSPACEGAP = (Hyprlang::INT* const*)g_pConfigManager->getConfigValuePtr("general:gaps_workspaces");
|
|
|
|
|
|
|
|
const auto XDISTANCE = m_sActiveSwipe.pMonitor->vecSize.x + **PWORKSPACEGAP;
|
|
|
|
const auto YDISTANCE = m_sActiveSwipe.pMonitor->vecSize.y + **PWORKSPACEGAP;
|
2023-12-06 23:54:56 +01:00
|
|
|
const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert" ||
|
2023-10-15 20:07:23 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle.starts_with("slidefadevert");
|
2022-10-07 17:52:53 +02:00
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.delta += VERTANIMS ? (**PSWIPEINVR ? -e->dy : e->dy) : (**PSWIPEINVR ? -e->dx : e->dx);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
m_sActiveSwipe.avgSpeed = (m_sActiveSwipe.avgSpeed * m_sActiveSwipe.speedPoints + abs(e->dx)) / (m_sActiveSwipe.speedPoints + 1);
|
|
|
|
m_sActiveSwipe.speedPoints++;
|
|
|
|
|
2022-12-16 18:17:31 +01:00
|
|
|
std::string wsname = "";
|
2024-02-18 16:00:34 +01:00
|
|
|
auto workspaceIDLeft = getWorkspaceIDFromString(**PSWIPENUMBER ? "-1" : (**PSWIPEUSER ? "r-1" : "m-1"), wsname);
|
|
|
|
auto workspaceIDRight = getWorkspaceIDFromString(**PSWIPENUMBER ? "+1" : (**PSWIPEUSER ? "r+1" : "m+1"), wsname);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if ((workspaceIDLeft == WORKSPACE_INVALID || workspaceIDRight == WORKSPACE_INVALID || workspaceIDLeft == m_sActiveSwipe.pWorkspaceBegin->m_iID) && !**PSWIPENEW) {
|
2022-09-17 16:05:12 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin = nullptr; // invalidate the swipe
|
2022-07-07 11:52:12 +02:00
|
|
|
return;
|
2022-09-17 16:05:12 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-07-22 00:13:56 +02:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_bForceRendering = true;
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.delta = std::clamp(m_sActiveSwipe.delta, (double)-**PSWIPEDIST, (double)**PSWIPEDIST);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if ((m_sActiveSwipe.pWorkspaceBegin->m_iID == workspaceIDLeft && **PSWIPENEW && (m_sActiveSwipe.delta < 0)) ||
|
2022-12-16 18:17:31 +01:00
|
|
|
(m_sActiveSwipe.delta > 0 && g_pCompositor->getWindowsOnWorkspace(m_sActiveSwipe.pWorkspaceBegin->m_iID) == 0 &&
|
|
|
|
workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID) ||
|
2022-11-22 00:30:26 +01:00
|
|
|
(m_sActiveSwipe.delta < 0 && m_sActiveSwipe.pWorkspaceBegin->m_iID <= workspaceIDLeft)) {
|
|
|
|
|
2022-10-20 15:54:32 +02:00
|
|
|
m_sActiveSwipe.delta = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if (**PSWIPEDIRLOCK) {
|
2023-08-23 22:40:19 +02:00
|
|
|
if (m_sActiveSwipe.initialDirection != 0 && m_sActiveSwipe.initialDirection != (m_sActiveSwipe.delta < 0 ? -1 : 1))
|
|
|
|
m_sActiveSwipe.delta = 0;
|
2024-02-18 16:00:34 +01:00
|
|
|
else if (m_sActiveSwipe.initialDirection == 0 && abs(m_sActiveSwipe.delta) > **PSWIPEDIRLOCKTHRESHOLD)
|
2023-08-23 22:40:19 +02:00
|
|
|
m_sActiveSwipe.initialDirection = m_sActiveSwipe.delta < 0 ? -1 : 1;
|
|
|
|
}
|
|
|
|
|
2022-07-07 11:52:12 +02:00
|
|
|
if (m_sActiveSwipe.delta < 0) {
|
2022-12-25 16:42:11 +01:00
|
|
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDLeft);
|
|
|
|
|
|
|
|
if (workspaceIDLeft > m_sActiveSwipe.pWorkspaceBegin->m_iID || !PWORKSPACE) {
|
2024-02-18 16:00:34 +01:00
|
|
|
if (**PSWIPENEW || **PSWIPENUMBER) {
|
2022-12-25 16:42:11 +01:00
|
|
|
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor);
|
|
|
|
|
|
|
|
if (VERTANIMS)
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE));
|
2022-12-25 16:42:11 +01:00
|
|
|
else
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE, 0));
|
2022-12-25 16:42:11 +01:00
|
|
|
|
|
|
|
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
|
|
|
return;
|
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
m_sActiveSwipe.delta = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
PWORKSPACE->m_bForceRendering = true;
|
2023-01-05 19:25:45 +01:00
|
|
|
PWORKSPACE->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2024-01-11 19:22:40 +01:00
|
|
|
if (workspaceIDLeft != workspaceIDRight && workspaceIDRight != m_sActiveSwipe.pWorkspaceBegin->m_iID) {
|
2022-07-25 14:06:49 +02:00
|
|
|
const auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight);
|
2022-07-22 00:10:26 +02:00
|
|
|
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACER) {
|
|
|
|
PWORKSPACER->m_bForceRendering = false;
|
|
|
|
PWORKSPACER->m_fAlpha.setValueAndWarp(0.f);
|
|
|
|
}
|
2022-07-25 14:06:49 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-10-07 17:52:53 +02:00
|
|
|
if (VERTANIMS) {
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACE->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE - YDISTANCE));
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE));
|
2022-10-07 17:52:53 +02:00
|
|
|
} else {
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACE->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE - XDISTANCE, 0));
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE, 0));
|
2022-10-07 17:52:53 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
g_pCompositor->updateWorkspaceWindowDecos(workspaceIDLeft);
|
|
|
|
} else {
|
2022-12-25 16:42:11 +01:00
|
|
|
const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(workspaceIDRight);
|
|
|
|
|
|
|
|
if (workspaceIDRight < m_sActiveSwipe.pWorkspaceBegin->m_iID || !PWORKSPACE) {
|
2024-02-18 16:00:34 +01:00
|
|
|
if (**PSWIPENEW || **PSWIPENUMBER) {
|
2022-10-20 18:52:17 +02:00
|
|
|
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor);
|
|
|
|
|
2022-10-20 16:02:46 +02:00
|
|
|
if (VERTANIMS)
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE));
|
2022-10-20 16:02:46 +02:00
|
|
|
else
|
2024-02-18 16:00:34 +01:00
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE, 0));
|
2022-10-20 18:52:17 +02:00
|
|
|
|
|
|
|
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
2022-10-20 16:02:46 +02:00
|
|
|
return;
|
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
m_sActiveSwipe.delta = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
PWORKSPACE->m_bForceRendering = true;
|
2023-01-05 19:25:45 +01:00
|
|
|
PWORKSPACE->m_fAlpha.setValueAndWarp(1.f);
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2024-01-11 19:22:40 +01:00
|
|
|
if (workspaceIDLeft != workspaceIDRight && workspaceIDLeft != m_sActiveSwipe.pWorkspaceBegin->m_iID) {
|
2022-07-25 14:06:49 +02:00
|
|
|
const auto PWORKSPACEL = g_pCompositor->getWorkspaceByID(workspaceIDLeft);
|
2022-07-22 00:10:26 +02:00
|
|
|
|
2022-12-25 16:42:11 +01:00
|
|
|
if (PWORKSPACEL) {
|
|
|
|
PWORKSPACEL->m_bForceRendering = false;
|
|
|
|
PWORKSPACEL->m_fAlpha.setValueAndWarp(0.f);
|
|
|
|
}
|
2022-07-25 14:06:49 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
2022-10-07 17:52:53 +02:00
|
|
|
if (VERTANIMS) {
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACE->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE + YDISTANCE));
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(0, ((-m_sActiveSwipe.delta) / **PSWIPEDIST) * YDISTANCE));
|
2022-10-07 17:52:53 +02:00
|
|
|
} else {
|
2024-02-18 16:00:34 +01:00
|
|
|
PWORKSPACE->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE + XDISTANCE, 0));
|
|
|
|
m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.setValueAndWarp(Vector2D(((-m_sActiveSwipe.delta) / **PSWIPEDIST) * XDISTANCE, 0));
|
2022-10-07 17:52:53 +02:00
|
|
|
}
|
2022-07-07 11:52:12 +02:00
|
|
|
|
|
|
|
g_pCompositor->updateWorkspaceWindowDecos(workspaceIDRight);
|
|
|
|
}
|
|
|
|
|
|
|
|
g_pHyprRenderer->damageMonitor(m_sActiveSwipe.pMonitor);
|
|
|
|
|
|
|
|
g_pCompositor->updateWorkspaceWindowDecos(m_sActiveSwipe.pWorkspaceBegin->m_iID);
|
2022-11-03 14:34:06 +01:00
|
|
|
|
2024-02-18 16:00:34 +01:00
|
|
|
if (**PSWIPEFOREVER) {
|
|
|
|
if (abs(m_sActiveSwipe.delta) >= **PSWIPEDIST) {
|
2022-11-03 14:34:06 +01:00
|
|
|
onSwipeEnd(nullptr);
|
|
|
|
beginWorkspaceSwipe();
|
|
|
|
}
|
|
|
|
}
|
2023-04-07 13:18:53 +02:00
|
|
|
}
|