1
0
forked from extern/nix-config

hyprland: Add slidefade animation patch

This works however I prefer the current non-fading animations for now.
This commit is contained in:
Donovan Glover 2023-08-31 13:06:02 -04:00
parent 460b60bb9f
commit 374a7cbe19
No known key found for this signature in database
GPG Key ID: EA7408A77AE1BE65
2 changed files with 132 additions and 1 deletions

View File

@ -2,7 +2,10 @@
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: prev: { (final: prev: {
hyprland = prev.hyprland.overrideAttrs (old: { hyprland = prev.hyprland.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ../patches/hyprland-window-sizes.patch ]; patches = (old.patches or [ ]) ++ [
../patches/hyprland-window-sizes.patch
../patches/hyprland-slidefade-animation.patch
];
}); });
}) })
]; ];

View File

@ -0,0 +1,128 @@
From 37a211a2ae94abad0f606433a58603e70261d0bb Mon Sep 17 00:00:00 2001
From: end-4 <97237370+end-4@users.noreply.github.com>
Date: Fri, 18 Aug 2023 03:30:20 +0700
Subject: [PATCH] animations: add slidefade and slidefadevert styles for
workspaces (#3008)
* add slidefade and slidefadevert animations
* fix swiping for slidefadevert
* rename minPerc to movePerc for slidefade anim styles
* change default slidefade percentage to 100%
* remove useless comments
* findlastof + 1
* debug logging for slidefade/slidefadevert percentage
---
src/helpers/Workspace.cpp | 41 ++++++++++++++++++++++++++++++-
src/managers/AnimationManager.cpp | 16 ++++++++++++
src/managers/input/Swipe.cpp | 6 +++--
3 files changed, 60 insertions(+), 3 deletions(-)
diff --git a/src/helpers/Workspace.cpp b/src/helpers/Workspace.cpp
index a71dd55dea..eddd214328 100644
--- a/src/helpers/Workspace.cpp
+++ b/src/helpers/Workspace.cpp
@@ -58,7 +58,46 @@ CWorkspace::~CWorkspace() {
void CWorkspace::startAnim(bool in, bool left, bool instant) {
const auto ANIMSTYLE = m_fAlpha.m_pConfig->pValues->internalStyle;
- if (ANIMSTYLE == "fade") {
+ if (ANIMSTYLE.find("slidefade") == 0) {
+ const auto PMONITOR = g_pCompositor->getMonitorFromID(m_iMonitorID);
+ float movePerc = 100.f;
+
+ if (ANIMSTYLE.find("%") != std::string::npos) {
+ try {
+ auto percstr = ANIMSTYLE.substr(ANIMSTYLE.find_last_of(' ') + 1);
+ movePerc = std::stoi(percstr.substr(0, percstr.length() - 1));
+ } catch (std::exception& e) {
+ Debug::log(ERR, "Error in startAnim: invalid percentage");
+ }
+ }
+
+ m_fAlpha.setValueAndWarp(1.f);
+ m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
+
+ if (ANIMSTYLE.find("slidefadevert") == 0) {
+ if (in) {
+ m_fAlpha.setValueAndWarp(0.f);
+ m_vRenderOffset.setValueAndWarp(Vector2D(0, (left ? PMONITOR->vecSize.y : -PMONITOR->vecSize.y) * (movePerc / 100.f)));
+ m_fAlpha = 1.f;
+ m_vRenderOffset = Vector2D(0, 0);
+ } else {
+ m_fAlpha.setValueAndWarp(1.f);
+ m_fAlpha = 0.f;
+ m_vRenderOffset = Vector2D(0, (left ? -PMONITOR->vecSize.y : PMONITOR->vecSize.y) * (movePerc / 100.f));
+ }
+ } else {
+ if (in) {
+ m_fAlpha.setValueAndWarp(0.f);
+ m_vRenderOffset.setValueAndWarp(Vector2D((left ? PMONITOR->vecSize.x : -PMONITOR->vecSize.x) * (movePerc / 100.f), 0));
+ m_fAlpha = 1.f;
+ m_vRenderOffset = Vector2D(0, 0);
+ } else {
+ m_fAlpha.setValueAndWarp(1.f);
+ m_fAlpha = 0.f;
+ m_vRenderOffset = Vector2D((left ? -PMONITOR->vecSize.x : PMONITOR->vecSize.x) * (movePerc / 100.f), 0);
+ }
+ }
+ } else if (ANIMSTYLE == "fade") {
m_vRenderOffset.setValueAndWarp(Vector2D(0, 0)); // fix a bug, if switching from slide -> fade.
if (in) {
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp
index 3cd0d06595..f4e845c330 100644
--- a/src/managers/AnimationManager.cpp
+++ b/src/managers/AnimationManager.cpp
@@ -485,6 +485,22 @@ std::string CAnimationManager::styleValidInConfigVar(const std::string& config,
} else if (config == "workspaces" || config == "specialWorkspace") {
if (style == "slide" || style == "slidevert" || style == "fade")
return "";
+ else if (style.find("slidefade") == 0) {
+ // try parsing
+ float movePerc = 0.f;
+ if (style.find("%") != std::string::npos) {
+ try {
+ auto percstr = style.substr(style.find_last_of(' ') + 1);
+ movePerc = std::stoi(percstr.substr(0, percstr.length() - 1));
+ } catch (std::exception& e) { return "invalid movePerc"; }
+
+ return "";
+ }
+
+ movePerc; // fix warning
+
+ return "";
+ }
return "unknown style";
} else if (config == "borderangle") {
diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp
index 906d5d9b30..5fe91b65ed 100644
--- a/src/managers/input/Swipe.cpp
+++ b/src/managers/input/Swipe.cpp
@@ -50,7 +50,8 @@ void CInputManager::onSwipeEnd(wlr_pointer_swipe_end_event* e) {
static auto* const PSWIPENEW = &g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_create_new")->intValue;
static auto* const PSWIPENUMBER = &g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_numbered")->intValue;
static auto* const PSWIPEUSER = &g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_use_r")->intValue;
- const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert";
+ const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert" ||
+ m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle.find("slidefadevert") == 0;
// commit
std::string wsname = "";
@@ -194,7 +195,8 @@ void CInputManager::onSwipeUpdate(wlr_pointer_swipe_update_event* e) {
static auto* const PSWIPENUMBER = &g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_numbered")->intValue;
static auto* const PSWIPEUSER = &g_pConfigManager->getConfigValuePtr("gestures:workspace_swipe_use_r")->intValue;
- const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert";
+ const bool VERTANIMS = m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle == "slidevert" ||
+ m_sActiveSwipe.pWorkspaceBegin->m_vRenderOffset.getConfig()->pValues->internalStyle.find("slidefadevert") == 0;
m_sActiveSwipe.delta += VERTANIMS ? (*PSWIPEINVR ? -e->dy : e->dy) : (*PSWIPEINVR ? -e->dx : e->dx);