summaryrefslogtreecommitdiff
path: root/src/desktop
diff options
context:
space:
mode:
authorMaximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com>2025-01-07 17:55:14 +0000
committerGitHub <noreply@github.com>2025-01-07 17:55:14 +0000
commit5642ed331df56375c55cd8d56a14054af8bdf8f2 (patch)
tree74a85b022b3319cdfad01343358eaf09a94841d1 /src/desktop
parentc7086f936a06abebcc863c35f634760ca1ee90c0 (diff)
core: move parts of the animation system to hyprutils (#8868)
* core: change animation manager to use Hyprutils::Animation * config: move animation config to hyprutils animation tree * use g_pAnimationManager->createAnimation and the new PHLANIMVAR template * core: use CGenericAnimatedVariabled::{enabled,setConfig,getStyle} and adapt callbacks * core: adapt animated variable usage (dereference the shared pointer) * misc: bump CMakeLists to hyprutils 0.3.3
Diffstat (limited to 'src/desktop')
-rw-r--r--src/desktop/LayerSurface.cpp88
-rw-r--r--src/desktop/LayerSurface.hpp18
-rw-r--r--src/desktop/Popup.cpp4
-rw-r--r--src/desktop/Subsurface.cpp2
-rw-r--r--src/desktop/WLSurface.cpp2
-rw-r--r--src/desktop/Window.cpp202
-rw-r--r--src/desktop/Window.hpp42
-rw-r--r--src/desktop/Workspace.cpp99
-rw-r--r--src/desktop/Workspace.hpp6
9 files changed, 217 insertions, 246 deletions
diff --git a/src/desktop/LayerSurface.cpp b/src/desktop/LayerSurface.cpp
index 05ea4473..fe11f3f3 100644
--- a/src/desktop/LayerSurface.cpp
+++ b/src/desktop/LayerSurface.cpp
@@ -4,6 +4,7 @@
#include "../protocols/LayerShell.hpp"
#include "../protocols/core/Compositor.hpp"
#include "../managers/SeatManager.hpp"
+#include "../managers/AnimationManager.hpp"
PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
PHLLS pLS = SP<CLayerSurface>(new CLayerSurface(resource));
@@ -31,16 +32,13 @@ PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
pLS->forceBlur = g_pConfigManager->shouldBlurLS(pLS->szNamespace);
- pLS->alpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"), pLS, AVARDAMAGE_ENTIRE);
- pLS->realPosition.create(g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE);
- pLS->realSize.create(g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE);
- pLS->alpha.registerVar();
- pLS->realPosition.registerVar();
- pLS->realSize.registerVar();
+ g_pAnimationManager->createAnimation(0.f, pLS->alpha, g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"), pLS, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->realPosition, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pLS->realSize, g_pConfigManager->getAnimationPropertyConfig("layersIn"), pLS, AVARDAMAGE_ENTIRE);
pLS->registerCallbacks();
- pLS->alpha.setValueAndWarp(0.f);
+ pLS->alpha->setValueAndWarp(0.f);
Debug::log(LOG, "LayerSurface {:x} (namespace {} layer {}) created on monitor {}", (uintptr_t)resource.get(), resource->layerNamespace, (int)pLS->layer, pMonitor->szName);
@@ -48,7 +46,7 @@ PHLLS CLayerSurface::create(SP<CLayerShellResource> resource) {
}
void CLayerSurface::registerCallbacks() {
- alpha.setUpdateCallback([this](void*) {
+ alpha->setUpdateCallback([this](auto) {
if (dimAround)
g_pHyprRenderer->damageMonitor(monitor.lock());
});
@@ -93,7 +91,7 @@ void CLayerSurface::onDestroy() {
onUnmap();
} else {
Debug::log(LOG, "Removing LayerSurface that wasn't mapped.");
- alpha.setValueAndWarp(0.f);
+ alpha->setValueAndWarp(0.f);
fadingOut = true;
g_pCompositor->addToFadingOutSafe(self.lock());
}
@@ -307,17 +305,17 @@ void CLayerSurface::onCommit() {
}
}
- if (realPosition.goal() != geometry.pos()) {
- if (realPosition.isBeingAnimated())
- realPosition = geometry.pos();
+ if (realPosition->goal() != geometry.pos()) {
+ if (realPosition->isBeingAnimated())
+ *realPosition = geometry.pos();
else
- realPosition.setValueAndWarp(geometry.pos());
+ realPosition->setValueAndWarp(geometry.pos());
}
- if (realSize.goal() != geometry.size()) {
- if (realSize.isBeingAnimated())
- realSize = geometry.size();
+ if (realSize->goal() != geometry.size()) {
+ if (realSize->isBeingAnimated())
+ *realSize = geometry.size();
else
- realSize.setValueAndWarp(geometry.size());
+ realSize->setValueAndWarp(geometry.size());
}
if (mapped && (layerSurface->current.committed & CLayerShellResource::eCommittedState::STATE_INTERACTIVITY)) {
@@ -434,17 +432,17 @@ void CLayerSurface::applyRules() {
}
void CLayerSurface::startAnimation(bool in, bool instant) {
- const auto ANIMSTYLE = animationStyle.value_or(realPosition.m_pConfig->pValues->internalStyle);
if (in) {
- realPosition.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("layersIn");
- realSize.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("layersIn");
- alpha.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn");
+ realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn"));
+ realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersIn"));
+ alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersIn"));
} else {
- realPosition.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("layersOut");
- realSize.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("layersOut");
- alpha.m_pConfig = g_pConfigManager->getAnimationPropertyConfig("fadeLayersOut");
+ realPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut"));
+ realSize->setConfig(g_pConfigManager->getAnimationPropertyConfig("layersOut"));
+ alpha->setConfig(g_pConfigManager->getAnimationPropertyConfig("fadeLayersOut"));
}
+ const auto ANIMSTYLE = animationStyle.value_or(realPosition->getStyle());
if (ANIMSTYLE.starts_with("slide")) {
// get closest edge
const auto MIDDLE = geometry.middle();
@@ -485,9 +483,9 @@ void CLayerSurface::startAnimation(bool in, bool instant) {
}
}
- realSize.setValueAndWarp(geometry.size());
- alpha.setValueAndWarp(in ? 0.f : 1.f);
- alpha = in ? 1.f : 0.f;
+ realSize->setValueAndWarp(geometry.size());
+ alpha->setValueAndWarp(in ? 0.f : 1.f);
+ *alpha = in ? 1.f : 0.f;
Vector2D prePos;
@@ -512,11 +510,11 @@ void CLayerSurface::startAnimation(bool in, bool instant) {
}
if (in) {
- realPosition.setValueAndWarp(prePos);
- realPosition = geometry.pos();
+ realPosition->setValueAndWarp(prePos);
+ *realPosition = geometry.pos();
} else {
- realPosition.setValueAndWarp(geometry.pos());
- realPosition = prePos;
+ realPosition->setValueAndWarp(geometry.pos());
+ *realPosition = prePos;
}
} else if (ANIMSTYLE.starts_with("popin")) {
@@ -535,25 +533,25 @@ void CLayerSurface::startAnimation(bool in, bool instant) {
const auto GOALSIZE = (geometry.size() * minPerc).clamp({5, 5});
const auto GOALPOS = geometry.pos() + (geometry.size() - GOALSIZE) / 2.f;
- alpha.setValueAndWarp(in ? 0.f : 1.f);
- alpha = in ? 1.f : 0.f;
+ alpha->setValueAndWarp(in ? 0.f : 1.f);
+ *alpha = in ? 1.f : 0.f;
if (in) {
- realSize.setValueAndWarp(GOALSIZE);
- realPosition.setValueAndWarp(GOALPOS);
- realSize = geometry.size();
- realPosition = geometry.pos();
+ realSize->setValueAndWarp(GOALSIZE);
+ realPosition->setValueAndWarp(GOALPOS);
+ *realSize = geometry.size();
+ *realPosition = geometry.pos();
} else {
- realSize.setValueAndWarp(geometry.size());
- realPosition.setValueAndWarp(geometry.pos());
- realSize = GOALSIZE;
- realPosition = GOALPOS;
+ realSize->setValueAndWarp(geometry.size());
+ realPosition->setValueAndWarp(geometry.pos());
+ *realSize = GOALSIZE;
+ *realPosition = GOALPOS;
}
} else {
// fade
- realPosition.setValueAndWarp(geometry.pos());
- realSize.setValueAndWarp(geometry.size());
- alpha = in ? 1.f : 0.f;
+ realPosition->setValueAndWarp(geometry.pos());
+ realSize->setValueAndWarp(geometry.size());
+ *alpha = in ? 1.f : 0.f;
}
if (!in)
@@ -564,7 +562,7 @@ bool CLayerSurface::isFadedOut() {
if (!fadingOut)
return false;
- return !realPosition.isBeingAnimated() && !realSize.isBeingAnimated() && !alpha.isBeingAnimated();
+ return !realPosition->isBeingAnimated() && !realSize->isBeingAnimated() && !alpha->isBeingAnimated();
}
int CLayerSurface::popupsCount() {
diff --git a/src/desktop/LayerSurface.hpp b/src/desktop/LayerSurface.hpp
index e906fc6f..3a03e57e 100644
--- a/src/desktop/LayerSurface.hpp
+++ b/src/desktop/LayerSurface.hpp
@@ -18,17 +18,17 @@ class CLayerSurface {
public:
~CLayerSurface();
- void applyRules();
- void startAnimation(bool in, bool instant = false);
- bool isFadedOut();
- int popupsCount();
+ void applyRules();
+ void startAnimation(bool in, bool instant = false);
+ bool isFadedOut();
+ int popupsCount();
- CAnimatedVariable<Vector2D> realPosition;
- CAnimatedVariable<Vector2D> realSize;
- CAnimatedVariable<float> alpha;
+ PHLANIMVAR<Vector2D> realPosition;
+ PHLANIMVAR<Vector2D> realSize;
+ PHLANIMVAR<float> alpha;
- WP<CLayerShellResource> layerSurface;
- wl_list link;
+ WP<CLayerShellResource> layerSurface;
+ wl_list link;
// the header providing the enum type cannot be imported here
int interactivity = 0;
diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp
index 692a75e3..ce286b28 100644
--- a/src/desktop/Popup.cpp
+++ b/src/desktop/Popup.cpp
@@ -243,9 +243,9 @@ Vector2D CPopup::localToGlobal(const Vector2D& rel) {
Vector2D CPopup::t1ParentCoords() {
if (!m_pWindowOwner.expired())
- return m_pWindowOwner->m_vRealPosition.value();
+ return m_pWindowOwner->m_vRealPosition->value();
if (!m_pLayerOwner.expired())
- return m_pLayerOwner->realPosition.value();
+ return m_pLayerOwner->realPosition->value();
ASSERT(false);
return {};
diff --git a/src/desktop/Subsurface.cpp b/src/desktop/Subsurface.cpp
index 893411bd..62854f80 100644
--- a/src/desktop/Subsurface.cpp
+++ b/src/desktop/Subsurface.cpp
@@ -169,7 +169,7 @@ Vector2D CSubsurface::coordsGlobal() {
Vector2D coords = coordsRelativeToParent();
if (!m_pWindowParent.expired())
- coords += m_pWindowParent->m_vRealPosition.value();
+ coords += m_pWindowParent->m_vRealPosition->value();
else if (m_pPopupParent)
coords += m_pPopupParent->coordsGlobal();
diff --git a/src/desktop/WLSurface.cpp b/src/desktop/WLSurface.cpp
index 5e88f507..9ed8ec49 100644
--- a/src/desktop/WLSurface.cpp
+++ b/src/desktop/WLSurface.cpp
@@ -72,7 +72,7 @@ Vector2D CWLSurface::correctSmallVec() const {
const auto SIZE = getViewporterCorrectedSize();
const auto O = m_pWindowOwner.lock();
- return Vector2D{(O->m_vReportedSize.x - SIZE.x) / 2, (O->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) * (O->m_vRealSize.value() / O->m_vReportedSize);
+ return Vector2D{(O->m_vReportedSize.x - SIZE.x) / 2, (O->m_vReportedSize.y - SIZE.y) / 2}.clamp({}, {INFINITY, INFINITY}) * (O->m_vRealSize->value() / O->m_vReportedSize);
}
Vector2D CWLSurface::correctSmallVecBuf() const {
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp
index 60914198..8175fc57 100644
--- a/src/desktop/Window.cpp
+++ b/src/desktop/Window.cpp
@@ -1,3 +1,4 @@
+#include <hyprutils/animation/AnimatedVariable.hpp>
#include <re2/re2.h>
#include <any>
@@ -11,12 +12,16 @@
#include "../render/decorations/CHyprBorderDecoration.hpp"
#include "../config/ConfigValue.hpp"
#include "../managers/TokenManager.hpp"
+#include "../managers/AnimationManager.hpp"
#include "../protocols/XDGShell.hpp"
#include "../protocols/core/Compositor.hpp"
#include "../xwayland/XWayland.hpp"
+#include "../helpers/Color.hpp"
#include <hyprutils/string/String.hpp>
+
using namespace Hyprutils::String;
+using namespace Hyprutils::Animation;
PHLWINDOW CWindow::create(SP<CXWaylandSurface> surface) {
PHLWINDOW pWindow = SP<CWindow>(new CWindow(surface));
@@ -24,16 +29,16 @@ PHLWINDOW CWindow::create(SP<CXWaylandSurface> surface) {
pWindow->m_pSelf = pWindow;
pWindow->m_bIsX11 = true;
- pWindow->m_vRealPosition.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_vRealSize.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fBorderFadeAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER);
- pWindow->m_fBorderAngleAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER);
- pWindow->m_fAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fActiveInactiveAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_cRealShadowColor.create(g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW);
- pWindow->m_fDimPercent.create(g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fMovingToWorkspaceAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fMovingFromWorkspaceAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER);
+ g_pAnimationManager->createAnimation(1.f, pWindow->m_fAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(1.f, pWindow->m_fActiveInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_cRealShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fDimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
pWindow->addWindowDeco(std::make_unique<CHyprDropShadowDecoration>(pWindow));
pWindow->addWindowDeco(std::make_unique<CHyprBorderDecoration>(pWindow));
@@ -47,16 +52,16 @@ PHLWINDOW CWindow::create(SP<CXDGSurfaceResource> resource) {
pWindow->m_pSelf = pWindow;
resource->toplevel->window = pWindow;
- pWindow->m_vRealPosition.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_vRealSize.create(g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fBorderFadeAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER);
- pWindow->m_fBorderAngleAnimationProgress.create(g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER);
- pWindow->m_fAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fActiveInactiveAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_cRealShadowColor.create(g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW);
- pWindow->m_fDimPercent.create(g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fMovingToWorkspaceAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE);
- pWindow->m_fMovingFromWorkspaceAlpha.create(g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealPosition, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), pWindow->m_vRealSize, g_pConfigManager->getAnimationPropertyConfig("windowsIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderFadeAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("border"), pWindow, AVARDAMAGE_BORDER);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fBorderAngleAnimationProgress, g_pConfigManager->getAnimationPropertyConfig("borderangle"), pWindow, AVARDAMAGE_BORDER);
+ g_pAnimationManager->createAnimation(1.f, pWindow->m_fAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(1.f, pWindow->m_fActiveInactiveAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeSwitch"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(CHyprColor(), pWindow->m_cRealShadowColor, g_pConfigManager->getAnimationPropertyConfig("fadeShadow"), pWindow, AVARDAMAGE_SHADOW);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fDimPercent, g_pConfigManager->getAnimationPropertyConfig("fadeDim"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingToWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeOut"), pWindow, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(0.f, pWindow->m_fMovingFromWorkspaceAlpha, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), pWindow, AVARDAMAGE_ENTIRE);
pWindow->addWindowDeco(std::make_unique<CHyprDropShadowDecoration>(pWindow));
pWindow->addWindowDeco(std::make_unique<CHyprBorderDecoration>(pWindow));
@@ -118,8 +123,8 @@ SBoxExtents CWindow::getFullWindowExtents() {
if (m_sWindowData.dimAround.valueOrDefault()) {
if (const auto PMONITOR = m_pMonitor.lock(); PMONITOR)
- return {{m_vRealPosition.value().x - PMONITOR->vecPosition.x, m_vRealPosition.value().y - PMONITOR->vecPosition.y},
- {PMONITOR->vecSize.x - (m_vRealPosition.value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_vRealPosition.value().y - PMONITOR->vecPosition.y)}};
+ return {{m_vRealPosition->value().x - PMONITOR->vecPosition.x, m_vRealPosition->value().y - PMONITOR->vecPosition.y},
+ {PMONITOR->vecSize.x - (m_vRealPosition->value().x - PMONITOR->vecPosition.x), PMONITOR->vecSize.y - (m_vRealPosition->value().y - PMONITOR->vecPosition.y)}};
}
SBoxExtents maxExtents = {{BORDERSIZE + 2, BORDERSIZE + 2}, {BORDERSIZE + 2, BORDERSIZE + 2}};
@@ -183,8 +188,8 @@ CBox CWindow::getFullWindowBoundingBox() {
auto maxExtents = getFullWindowExtents();
- CBox finalBox = {m_vRealPosition.value().x - maxExtents.topLeft.x, m_vRealPosition.value().y - maxExtents.topLeft.y,
- m_vRealSize.value().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_vRealSize.value().y + maxExtents.topLeft.y + maxExtents.bottomRight.y};
+ CBox finalBox = {m_vRealPosition->value().x - maxExtents.topLeft.x, m_vRealPosition->value().y - maxExtents.topLeft.y,
+ m_vRealSize->value().x + maxExtents.topLeft.x + maxExtents.bottomRight.x, m_vRealSize->value().y + maxExtents.topLeft.y + maxExtents.bottomRight.y};
return finalBox;
}
@@ -238,7 +243,7 @@ CBox CWindow::getWindowBoxUnified(uint64_t properties) {
if (properties & FULL_EXTENTS)
EXTENTS.addExtents(g_pDecorationPositioner->getWindowDecorationExtents(m_pSelf.lock(), false));
- CBox box = {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
+ CBox box = {m_vRealPosition->value().x, m_vRealPosition->value().y, m_vRealSize->value().x, m_vRealSize->value().y};
box.addExtents(EXTENTS);
return box;
@@ -409,9 +414,9 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
const auto OLDWORKSPACE = m_pWorkspace;
m_iMonitorMovedFrom = OLDWORKSPACE ? OLDWORKSPACE->monitorID() : -1;
- m_fMovingToWorkspaceAlpha.setValueAndWarp(1.F);
- m_fMovingToWorkspaceAlpha = 0.F;
- m_fMovingToWorkspaceAlpha.setCallbackOnEnd([this](void* thisptr) { m_iMonitorMovedFrom = -1; });
+ m_fMovingToWorkspaceAlpha->setCallbackOnEnd([this](auto) { m_iMonitorMovedFrom = -1; });
+ m_fMovingToWorkspaceAlpha->setValueAndWarp(1.F);
+ *m_fMovingToWorkspaceAlpha = 0.F;
m_pWorkspace = pWorkspace;
@@ -439,7 +444,7 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) {
}
// update xwayland coords
- g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize.value());
+ g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize->value());
if (OLDWORKSPACE && g_pCompositor->isWorkspaceSpecial(OLDWORKSPACE->m_iID) && OLDWORKSPACE->getWindows() == 0 && *PCLOSEONLASTSPECIAL) {
if (const auto PMONITOR = OLDWORKSPACE->m_pMonitor.lock(); PMONITOR)
@@ -475,10 +480,6 @@ PHLWINDOW CWindow::x11TransientFor() {
return nullptr;
}
-static void unregisterVar(void* ptr) {
- ((CBaseAnimatedVariable*)ptr)->unregister();
-}
-
void CWindow::onUnmap() {
static auto PCLOSEONLASTSPECIAL = CConfigValue<Hyprlang::INT>("misc:close_special_on_empty");
static auto PINITIALWSTRACKING = CConfigValue<Hyprlang::INT>("misc:initial_workspace_tracking");
@@ -497,19 +498,6 @@ void CWindow::onUnmap() {
m_iLastWorkspace = m_pWorkspace->m_iID;
- m_vRealPosition.setCallbackOnEnd(unregisterVar);
- m_vRealSize.setCallbackOnEnd(unregisterVar);
- m_fBorderFadeAnimationProgress.setCallbackOnEnd(unregisterVar);
- m_fBorderAngleAnimationProgress.setCallbackOnEnd(unregisterVar);
- m_fActiveInactiveAlpha.setCallbackOnEnd(unregisterVar);
- m_fAlpha.setCallbackOnEnd(unregisterVar);
- m_cRealShadowColor.setCallbackOnEnd(unregisterVar);
- m_fDimPercent.setCallbackOnEnd(unregisterVar);
- m_fMovingToWorkspaceAlpha.setCallbackOnEnd(unregisterVar);
- m_fMovingFromWorkspaceAlpha.setCallbackOnEnd(unregisterVar);
-
- m_vRealSize.setCallbackOnBegin(nullptr);
-
std::erase_if(g_pCompositor->m_vWindowFocusHistory, [&](const auto& other) { return other.expired() || other.lock().get() == this; });
if (*PCLOSEONLASTSPECIAL && m_pWorkspace && m_pWorkspace->getWindows() == 0 && onSpecialWorkspace()) {
@@ -541,34 +529,24 @@ void CWindow::onUnmap() {
void CWindow::onMap() {
// JIC, reset the callbacks. If any are set, we'll make sure they are cleared so we don't accidentally unset them. (In case a window got remapped)
- m_vRealPosition.resetAllCallbacks();
- m_vRealSize.resetAllCallbacks();
- m_fBorderFadeAnimationProgress.resetAllCallbacks();
- m_fBorderAngleAnimationProgress.resetAllCallbacks();
- m_fActiveInactiveAlpha.resetAllCallbacks();
- m_fAlpha.resetAllCallbacks();
- m_cRealShadowColor.resetAllCallbacks();
- m_fDimPercent.resetAllCallbacks();
- m_fMovingToWorkspaceAlpha.resetAllCallbacks();
- m_fMovingFromWorkspaceAlpha.resetAllCallbacks();
-
- m_vRealPosition.registerVar();
- m_vRealSize.registerVar();
- m_fBorderFadeAnimationProgress.registerVar();
- m_fBorderAngleAnimationProgress.registerVar();
- m_fActiveInactiveAlpha.registerVar();
- m_fAlpha.registerVar();
- m_cRealShadowColor.registerVar();
- m_fDimPercent.registerVar();
- m_fMovingToWorkspaceAlpha.registerVar();
- m_fMovingFromWorkspaceAlpha.registerVar();
-
- m_fBorderAngleAnimationProgress.setCallbackOnEnd([&](void* ptr) { onBorderAngleAnimEnd(ptr); }, false);
-
- m_fBorderAngleAnimationProgress.setValueAndWarp(0.f);
- m_fBorderAngleAnimationProgress = 1.f;
-
- m_fMovingFromWorkspaceAlpha.setValueAndWarp(1.F);
+ m_vRealPosition->resetAllCallbacks();
+ m_vRealSize->resetAllCallbacks();
+ m_fBorderFadeAnimationProgress->resetAllCallbacks();
+ m_fBorderAngleAnimationProgress->resetAllCallbacks();
+ m_fActiveInactiveAlpha->resetAllCallbacks();
+ m_fAlpha->resetAllCallbacks();
+ m_cRealShadowColor->resetAllCallbacks();
+ m_fDimPercent->resetAllCallbacks();
+ m_fMovingToWorkspaceAlpha->resetAllCallbacks();
+ m_fMovingFromWorkspaceAlpha->resetAllCallbacks();
+
+ m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F);
+ m_fBorderAngleAnimationProgress->setCallbackOnEnd([&](WP<CBaseAnimatedVariable> p) { onBorderAngleAnimEnd(p); }, false);
+
+ m_fBorderAngleAnimationProgress->setValueAndWarp(0.f);
+ *m_fBorderAngleAnimationProgress = 1.f;
+
+ m_fMovingFromWorkspaceAlpha->setValueAndWarp(1.F);
g_pCompositor->m_vWindowFocusHistory.push_back(m_pSelf);
@@ -584,20 +562,22 @@ void CWindow::onMap() {
m_pPopupHead = std::make_unique<CPopup>(m_pSelf.lock());
}
-void CWindow::onBorderAngleAnimEnd(void* ptr) {
- const auto PANIMVAR = (CAnimatedVariable<float>*)ptr;
-
- const std::string STYLE = PANIMVAR->getConfig()->pValues->internalStyle;
+void CWindow::onBorderAngleAnimEnd(WP<CBaseAnimatedVariable> pav) {
+ const auto PAV = pav.lock();
+ if (!PAV)
+ return;
- if (STYLE != "loop" || !PANIMVAR->getConfig()->pValues->internalEnabled)
+ if (PAV->getStyle() != "loop" || !PAV->enabled())
return;
+ const auto PANIMVAR = dynamic_cast<CAnimatedVariable<float>*>(PAV.get());
+
PANIMVAR->setCallbackOnEnd(nullptr); // we remove the callback here because otherwise setvalueandwarp will recurse this
PANIMVAR->setValueAndWarp(0);
*PANIMVAR = 1.f;
- PANIMVAR->setCallbackOnEnd([&](void* ptr) { onBorderAngleAnimEnd(ptr); }, false);
+ PANIMVAR->setCallbackOnEnd([&](WP<CBaseAnimatedVariable> pav) { onBorderAngleAnimEnd(pav); }, false);
}
void CWindow::setHidden(bool hidden) {
@@ -830,10 +810,10 @@ bool CWindow::isInCurvedCorner(double x, double y) {
return false;
// (x0, y0), (x0, y1), ... are the center point of rounding at each corner
- double x0 = m_vRealPosition.value().x + ROUNDING;
- double y0 = m_vRealPosition.value().y + ROUNDING;
- double x1 = m_vRealPosition.value().x + m_vRealSize.value().x - ROUNDING;
- double y1 = m_vRealPosition.value().y + m_vRealSize.value().y - ROUNDING;
+ double x0 = m_vRealPosition->value().x + ROUNDING;
+ double y0 = m_vRealPosition->value().y + ROUNDING;
+ double x1 = m_vRealPosition->value().x + m_vRealSize->value().x - ROUNDING;
+ double y1 = m_vRealPosition->value().y + m_vRealSize->value().y - ROUNDING;
if (x < x0 && y < y0) {
return std::pow(x0 - x, ROUNDINGPOWER) + std::pow(y0 - y, ROUNDINGPOWER) > std::pow((double)ROUNDING, ROUNDINGPOWER);
@@ -1032,8 +1012,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) {
if (FULLSCREEN)
g_pCompositor->setWindowFullscreenInternal(PCURRENT, FSMODE_NONE);
- const auto PWINDOWSIZE = PCURRENT->m_vRealSize.goal();
- const auto PWINDOWPOS = PCURRENT->m_vRealPosition.goal();
+ const auto PWINDOWSIZE = PCURRENT->m_vRealSize->goal();
+ const auto PWINDOWPOS = PCURRENT->m_vRealPosition->goal();
PCURRENT->setHidden(true);
pWindow->setHidden(false); // can remove m_pLastWindow
@@ -1041,8 +1021,8 @@ void CWindow::setGroupCurrent(PHLWINDOW pWindow) {
g_pLayoutManager->getCurrentLayout()->replaceWindowDataWith(PCURRENT, pWindow);
if (PCURRENT->m_bIsFloating) {
- pWindow->m_vRealPosition.setValueAndWarp(PWINDOWPOS);
- pWindow->m_vRealSize.setValueAndWarp(PWINDOWSIZE);
+ pWindow->m_vRealPosition->setValueAndWarp(PWINDOWPOS);
+ pWindow->m_vRealSize->setValueAndWarp(PWINDOWSIZE);
}
g_pCompositor->updateAllWindowsAnimatedDecorationValues();
@@ -1124,22 +1104,22 @@ void CWindow::updateGroupOutputs() {
curr->m_pMonitor = m_pMonitor;
curr->moveToWorkspace(WS);
- curr->m_vRealPosition = m_vRealPosition.goal();
- curr->m_vRealSize = m_vRealSize.goal();
+ *curr->m_vRealPosition = m_vRealPosition->goal();
+ *curr->m_vRealSize = m_vRealSize->goal();
curr = curr->m_sGroupData.pNextWindow.lock();
}
}
Vector2D CWindow::middle() {
- return m_vRealPosition.goal() + m_vRealSize.goal() / 2.f;
+ return m_vRealPosition->goal() + m_vRealSize->goal() / 2.f;
}
bool CWindow::opaque() {
- if (m_fAlpha.value() != 1.f || m_fActiveInactiveAlpha.value() != 1.f)
+ if (m_fAlpha->value() != 1.f || m_fActiveInactiveAlpha->value() != 1.f)
return false;
- if (m_vRealSize.goal().floor() != m_vReportedSize)
+ if (m_vRealSize->goal().floor() != m_vReportedSize)
return false;
const auto PWORKSPACE = m_pWorkspace;
@@ -1147,7 +1127,7 @@ bool CWindow::opaque() {
if (m_pWLSurface->small() && !m_pWLSurface->m_bFillIgnoreSmall)
return false;
- if (PWORKSPACE->m_fAlpha.value() != 1.f)
+ if (PWORKSPACE->m_fAlpha->value() != 1.f)
return false;
if (m_bIsX11 && m_pXWaylandSurface && m_pXWaylandSurface->surface && m_pXWaylandSurface->surface->current.texture)
@@ -1237,15 +1217,13 @@ void CWindow::setSuspended(bool suspend) {
}
bool CWindow::visibleOnMonitor(PHLMONITOR pMonitor) {
- CBox wbox = {m_vRealPosition.value(), m_vRealSize.value()};
+ CBox wbox = {m_vRealPosition->value(), m_vRealSize->value()};
return !wbox.intersection({pMonitor->vecPosition, pMonitor->vecSize}).empty();
}
void CWindow::setAnimationsToMove() {
- auto* const PANIMCFG = g_pConfigManager->getAnimationPropertyConfig("windowsMove");
- m_vRealPosition.setConfig(PANIMCFG);
- m_vRealSize.setConfig(PANIMCFG);
+ m_vRealPosition->setConfig(g_pConfigManager->getAnimationPropertyConfig("windowsMove"));
m_bAnimatingIn = false;
}
@@ -1266,16 +1244,16 @@ void CWindow::onWorkspaceAnimUpdate() {
return;
const auto WINBB = getFullWindowBoundingBox();
- if (PWORKSPACE->m_vRenderOffset.value().x != 0) {
- const auto PROGRESS = PWORKSPACE->m_vRenderOffset.value().x / PWSMON->vecSize.x;
+ 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;
+ } 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;
@@ -1306,12 +1284,12 @@ int CWindow::surfacesCount() {
}
void CWindow::clampWindowSize(const std::optional<Vector2D> minSize, const std::optional<Vector2D> maxSize) {
- const Vector2D REALSIZE = m_vRealSize.goal();
+ const Vector2D REALSIZE = m_vRealSize->goal();
const Vector2D NEWSIZE = REALSIZE.clamp(minSize.value_or(Vector2D{MIN_WINDOW_SIZE, MIN_WINDOW_SIZE}), maxSize.value_or(Vector2D{INFINITY, INFINITY}));
const Vector2D DELTA = REALSIZE - NEWSIZE;
- m_vRealPosition = m_vRealPosition.goal() + DELTA / 2.0;
- m_vRealSize = NEWSIZE;
+ *m_vRealPosition = m_vRealPosition->goal() + DELTA / 2.0;
+ *m_vRealSize = NEWSIZE;
g_pXWaylandManager->setWindowSize(m_pSelf.lock(), NEWSIZE);
}
@@ -1525,7 +1503,7 @@ void CWindow::onX11Configure(CBox box) {
g_pHyprRenderer->damageWindow(m_pSelf.lock());
if (!m_bIsFloating || isFullscreen() || g_pInputManager->currentlyDraggedWindow == m_pSelf) {
- g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize.goal(), true);
+ g_pXWaylandManager->setWindowSize(m_pSelf.lock(), m_vRealSize->goal(), true);
g_pInputManager->refocus();
g_pHyprRenderer->damageWindow(m_pSelf.lock());
return;
@@ -1538,19 +1516,19 @@ void CWindow::onX11Configure(CBox box) {
const auto LOGICALPOS = g_pXWaylandManager->xwaylandToWaylandCoords(box.pos());
- m_vRealPosition.setValueAndWarp(LOGICALPOS);
- m_vRealSize.setValueAndWarp(box.size());
+ m_vRealPosition->setValueAndWarp(LOGICALPOS);
+ m_vRealSize->setValueAndWarp(box.size());
static auto PXWLFORCESCALEZERO = CConfigValue<Hyprlang::INT>("xwayland:force_zero_scaling");
if (*PXWLFORCESCALEZERO) {
if (const auto PMONITOR = m_pMonitor.lock(); PMONITOR) {
- m_vRealSize.setValueAndWarp(m_vRealSize.goal() / PMONITOR->scale);
+ m_vRealSize->setValueAndWarp(m_vRealSize->goal() / PMONITOR->scale);
m_fX11SurfaceScaledBy = PMONITOR->scale;
}
}
- m_vPosition = m_vRealPosition.value();
- m_vSize = m_vRealSize.value();
+ m_vPosition = m_vRealPosition->value();
+ m_vSize = m_vRealSize->value();
m_pXWaylandSurface->configure(box);
@@ -1562,7 +1540,7 @@ void CWindow::onX11Configure(CBox box) {
if (!m_pWorkspace || !m_pWorkspace->isVisible())
return; // further things are only for visible windows
- m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition.value() + m_vRealSize.value() / 2.f)->activeWorkspace;
+ m_pWorkspace = g_pCompositor->getMonitorFromVector(m_vRealPosition->value() + m_vRealSize->value() / 2.f)->activeWorkspace;
g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true);
diff --git a/src/desktop/Window.hpp b/src/desktop/Window.hpp
index 3ceaf594..37189a00 100644
--- a/src/desktop/Window.hpp
+++ b/src/desktop/Window.hpp
@@ -233,8 +233,8 @@ class CWindow {
Vector2D m_vSize = Vector2D(0, 0);
// this is the real position and size used to draw the thing
- CAnimatedVariable<Vector2D> m_vRealPosition;
- CAnimatedVariable<Vector2D> m_vRealSize;
+ PHLANIMVAR<Vector2D> m_vRealPosition;
+ PHLANIMVAR<Vector2D> m_vRealSize;
// for not spamming the protocols
Vector2D m_vReportedPosition;
@@ -298,19 +298,19 @@ class CWindow {
std::unique_ptr<CPopup> m_pPopupHead;
// Animated border
- CGradientValueData m_cRealBorderColor = {0};
- CGradientValueData m_cRealBorderColorPrevious = {0};
- CAnimatedVariable<float> m_fBorderFadeAnimationProgress;
- CAnimatedVariable<float> m_fBorderAngleAnimationProgress;
+ CGradientValueData m_cRealBorderColor = {0};
+ CGradientValueData m_cRealBorderColorPrevious = {0};
+ PHLANIMVAR<float> m_fBorderFadeAnimationProgress;
+ PHLANIMVAR<float> m_fBorderAngleAnimationProgress;
// Fade in-out
- CAnimatedVariable<float> m_fAlpha;
- bool m_bFadingOut = false;
- bool m_bReadyToDelete = false;
- Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
- Vector2D m_vOriginalClosedSize; // drawing the closing animations
- SBoxExtents m_eOriginalClosedExtents;
- bool m_bAnimatingIn = false;
+ PHLANIMVAR<float> m_fAlpha;
+ bool m_bFadingOut = false;
+ bool m_bReadyToDelete = false;
+ Vector2D m_vOriginalClosedPos; // these will be used for calculations later on in
+ Vector2D m_vOriginalClosedSize; // drawing the closing animations
+ SBoxExtents m_eOriginalClosedExtents;
+ bool m_bAnimatingIn = false;
// For pinned (sticky) windows
bool m_bPinned = false;
@@ -336,18 +336,18 @@ class CWindow {
std::vector<std::unique_ptr<IWindowTransformer>> m_vTransformers;
// for alpha
- CAnimatedVariable<float> m_fActiveInactiveAlpha;
- CAnimatedVariable<float> m_fMovingFromWorkspaceAlpha;
+ PHLANIMVAR<float> m_fActiveInactiveAlpha;
+ PHLANIMVAR<float> m_fMovingFromWorkspaceAlpha;
// animated shadow color
- CAnimatedVariable<CHyprColor> m_cRealShadowColor;
+ PHLANIMVAR<CHyprColor> m_cRealShadowColor;
// animated tint
- CAnimatedVariable<float> m_fDimPercent;
+ PHLANIMVAR<float> m_fDimPercent;
// animate moving to an invisible workspace
- int m_iMonitorMovedFrom = -1; // -1 means not moving
- CAnimatedVariable<float> m_fMovingToWorkspaceAlpha;
+ int m_iMonitorMovedFrom = -1; // -1 means not moving
+ PHLANIMVAR<float> m_fMovingToWorkspaceAlpha;
// swallowing
PHLWINDOWREF m_pSwallowed;
@@ -432,7 +432,7 @@ class CWindow {
float getScrollTouchpad();
void updateWindowData();
void updateWindowData(const struct SWorkspaceRule&);
- void onBorderAngleAnimEnd(void* ptr);
+ void onBorderAngleAnimEnd(WP<Hyprutils::Animation::CBaseAnimatedVariable> pav);
bool isInCurvedCorner(double x, double y);
bool hasPopupAt(const Vector2D& pos);
int popupsCount();
@@ -467,7 +467,7 @@ class CWindow {
Vector2D requestedMaxSize();
CBox getWindowMainSurfaceBox() const {
- return {m_vRealPosition.value().x, m_vRealPosition.value().y, m_vRealSize.value().x, m_vRealSize.value().y};
+ return {m_vRealPosition->value().x, m_vRealPosition->value().y, m_vRealSize->value().x, m_vRealSize->value().y};
}
// listeners
diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp
index 0930ef00..cab19254 100644
--- a/src/desktop/Workspace.cpp
+++ b/src/desktop/Workspace.cpp
@@ -1,7 +1,10 @@
#include "Workspace.hpp"
#include "../Compositor.hpp"
#include "../config/ConfigValue.hpp"
+#include "config/ConfigManager.hpp"
+#include "managers/AnimationManager.hpp"
+#include <hyprutils/animation/AnimatedVariable.hpp>
#include <hyprutils/string/String.hpp>
using namespace Hyprutils::String;
@@ -19,16 +22,10 @@ CWorkspace::CWorkspace(WORKSPACEID id, PHLMONITOR monitor, std::string name, boo
void CWorkspace::init(PHLWORKSPACE self) {
m_pSelf = self;
- m_vRenderOffset.create(m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspaceIn") :
- g_pConfigManager->getAnimationPropertyConfig("workspacesIn"),
- self, AVARDAMAGE_ENTIRE);
- m_fAlpha.create(AVARTYPE_FLOAT,
- m_bIsSpecialWorkspace ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspaceIn") : g_pConfigManager->getAnimationPropertyConfig("workspacesIn"), self,
- AVARDAMAGE_ENTIRE);
- m_fAlpha.setValueAndWarp(1.f);
-
- m_vRenderOffset.registerVar();
- m_fAlpha.registerVar();
+ g_pAnimationManager->createAnimation(Vector2D(0, 0), m_vRenderOffset,
+ g_pConfigManager->getAnimationPropertyConfig(m_bIsSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), self, AVARDAMAGE_ENTIRE);
+ g_pAnimationManager->createAnimation(1.f, m_fAlpha, g_pConfigManager->getAnimationPropertyConfig(m_bIsSpecialWorkspace ? "specialWorkspaceIn" : "workspacesIn"), self,
+ AVARDAMAGE_ENTIRE);
const auto RULEFORTHIS = g_pConfigManager->getWorkspaceRuleFor(self);
if (RULEFORTHIS.defaultName.has_value())
@@ -63,8 +60,6 @@ SWorkspaceIDName CWorkspace::getPrevWorkspaceIDName(bool perMonitor) const {
}
CWorkspace::~CWorkspace() {
- m_vRenderOffset.unregister();
-
Debug::log(LOG, "Destroying workspace ID {}", m_iID);
// check if g_pHookSystem and g_pEventManager exist, they might be destroyed as in when the compositor is closing.
@@ -82,15 +77,15 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) {
if (!instant) {
const std::string ANIMNAME = std::format("{}{}", m_bIsSpecialWorkspace ? "specialWorkspace" : "workspaces", in ? "In" : "Out");
- m_fAlpha.m_pConfig = g_pConfigManager->getAnimationPropertyConfig(ANIMNAME);
- m_vRenderOffset.m_pConfig = g_pConfigManager->getAnimationPropertyConfig(ANIMNAME);
+ m_fAlpha->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME));
+ m_vRenderOffset->setConfig(g_pConfigManager->getAnimationPropertyConfig(ANIMNAME));
}
- const auto ANIMSTYLE = m_fAlpha.m_pConfig->pValues->internalStyle;
+ const auto ANIMSTYLE = m_fAlpha->getStyle();
static auto PWORKSPACEGAP = CConfigValue<Hyprlang::INT>("general:gaps_workspaces");
// set floating windows offset callbacks
- m_vRenderOffset.setUpdateCallback([&](void*) {
+ m_vRenderOffset->setUpdateCallback([&](auto) {
for (auto const& w : g_pCompositor->m_vWindows) {
if (!validMapped(w) || w->workspaceID() != m_iID)
continue;
@@ -110,84 +105,84 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) {
} catch (std::exception& e) { Debug::log(ERR, "Error in startAnim: invalid percentage"); }
}
- m_fAlpha.setValueAndWarp(1.f);
- m_vRenderOffset.setValueAndWarp(Vector2D(0, 0));
+ m_fAlpha->setValueAndWarp(1.f);
+ m_vRenderOffset->setValueAndWarp(Vector2D(0, 0));
if (ANIMSTYLE.starts_with("slidefadevert")) {
if (in) {
- m_fAlpha.setValueAndWarp(0.f);
- m_vRenderOffset.setValueAndWarp(Vector2D(0.0, (left ? PMONITOR->vecSize.y : -PMONITOR->vecSize.y) * (movePerc / 100.f)));
- m_fAlpha = 1.f;
- m_vRenderOffset = Vector2D(0, 0);
+ m_fAlpha->setValueAndWarp(0.f);
+ m_vRenderOffset->setValueAndWarp(Vector2D(0.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.0, (left ? -PMONITOR->vecSize.y : PMONITOR->vecSize.y) * (movePerc / 100.f));
+ m_fAlpha->setValueAndWarp(1.f);
+ *m_fAlpha = 0.f;
+ *m_vRenderOffset = Vector2D(0.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.0));
- m_fAlpha = 1.f;
- m_vRenderOffset = Vector2D(0, 0);
+ m_fAlpha->setValueAndWarp(0.f);
+ m_vRenderOffset->setValueAndWarp(Vector2D((left ? PMONITOR->vecSize.x : -PMONITOR->vecSize.x) * (movePerc / 100.f), 0.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.0);
+ m_fAlpha->setValueAndWarp(1.f);
+ *m_fAlpha = 0.f;
+ *m_vRenderOffset = Vector2D((left ? -PMONITOR->vecSize.x : PMONITOR->vecSize.x) * (movePerc / 100.f), 0.0);
}
}
} else if (ANIMSTYLE == "fade") {
- m_vRenderOffset.setValueAndWarp(Vector2D(0, 0)); // fix a bug, if switching from slide -> fade.
+ m_vRenderOffset->setValueAndWarp(Vector2D(0, 0)); // fix a bug, if switching from slide -> fade.
if (in) {
- m_fAlpha.setValueAndWarp(0.f);
- m_fAlpha = 1.f;
+ m_fAlpha->setValueAndWarp(0.f);
+ *m_fAlpha = 1.f;
} else {
- m_fAlpha.setValueAndWarp(1.f);
- m_fAlpha = 0.f;
+ m_fAlpha->setValueAndWarp(1.f);
+ *m_fAlpha = 0.f;
}
} else if (ANIMSTYLE == "slidevert") {
// fallback is slide
const auto PMONITOR = m_pMonitor.lock();
const auto YDISTANCE = PMONITOR->vecSize.y + *PWORKSPACEGAP;
- m_fAlpha.setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide.
+ m_fAlpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide.
if (in) {
- m_vRenderOffset.setValueAndWarp(Vector2D(0.0, left ? YDISTANCE : -YDISTANCE));
- m_vRenderOffset = Vector2D(0, 0);
+ m_vRenderOffset->setValueAndWarp(Vector2D(0.0, left ? YDISTANCE : -YDISTANCE));
+ *m_vRenderOffset = Vector2D(0, 0);
} else {
- m_vRenderOffset = Vector2D(0.0, left ? -YDISTANCE : YDISTANCE);
+ *m_vRenderOffset = Vector2D(0.0, left ? -YDISTANCE : YDISTANCE);
}
} else {
// fallback is slide
const auto PMONITOR = m_pMonitor.lock();
const auto XDISTANCE = PMONITOR->vecSize.x + *PWORKSPACEGAP;
- m_fAlpha.setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide.
+ m_fAlpha->setValueAndWarp(1.f); // fix a bug, if switching from fade -> slide.
if (in) {
- m_vRenderOffset.setValueAndWarp(Vector2D(left ? XDISTANCE : -XDISTANCE, 0.0));
- m_vRenderOffset = Vector2D(0, 0);
+ m_vRenderOffset->setValueAndWarp(Vector2D(left ? XDISTANCE : -XDISTANCE, 0.0));
+ *m_vRenderOffset = Vector2D(0, 0);
} else {
- m_vRenderOffset = Vector2D(left ? -XDISTANCE : XDISTANCE, 0.0);
+ *m_vRenderOffset = Vector2D(left ? -XDISTANCE : XDISTANCE, 0.0);
}
}
if (m_bIsSpecialWorkspace) {
// required for open/close animations
if (in) {
- m_fAlpha.setValueAndWarp(0.f);
- m_fAlpha = 1.f;
+ m_fAlpha->setValueAndWarp(0.f);
+ *m_fAlpha = 1.f;
} else {
- m_fAlpha.setValueAndWarp(1.f);
- m_fAlpha = 0.f;
+ m_fAlpha->setValueAndWarp(1.f);
+ *m_fAlpha = 0.f;
}
}
if (instant) {
- m_vRenderOffset.warp();
- m_fAlpha.warp();
+ m_vRenderOffset->warp();
+ m_fAlpha->warp();
}
}
@@ -633,7 +628,7 @@ void CWorkspace::forceReportSizesToWindows() {
if (w->m_pWorkspace != m_pSelf || !w->m_bIsMapped || w->isHidden())
continue;
- g_pXWaylandManager->setWindowSize(w, w->m_vRealSize.value(), true);
+ g_pXWaylandManager->setWindowSize(w, w->m_vRealSize->value(), true);
}
}
diff --git a/src/desktop/Workspace.hpp b/src/desktop/Workspace.hpp
index 606485a2..f86dd656 100644
--- a/src/desktop/Workspace.hpp
+++ b/src/desktop/Workspace.hpp
@@ -37,9 +37,9 @@ class CWorkspace {
wl_array m_wlrCoordinateArr;
// for animations
- CAnimatedVariable<Vector2D> m_vRenderOffset;
- CAnimatedVariable<float> m_fAlpha;
- bool m_bForceRendering = false;
+ PHLANIMVAR<Vector2D> m_vRenderOffset;
+ PHLANIMVAR<float> m_fAlpha;
+ bool m_bForceRendering = false;
// allows damage to propagate.
bool m_bVisible = false;