summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Window.cpp8
-rw-r--r--src/helpers/AnimatedVariable.cpp7
-rw-r--r--src/helpers/AnimatedVariable.hpp13
-rw-r--r--src/managers/AnimationManager.cpp35
-rw-r--r--src/render/Renderer.cpp5
-rw-r--r--src/render/Renderer.hpp1
6 files changed, 56 insertions, 13 deletions
diff --git a/src/Window.cpp b/src/Window.cpp
index 334ca86f..5bb1738e 100644
--- a/src/Window.cpp
+++ b/src/Window.cpp
@@ -2,10 +2,10 @@
#include "Compositor.hpp"
CWindow::CWindow() {
- m_vRealPosition.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*) this);
- m_vRealSize.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*)this);
- m_cRealBorderColor.create(AVARTYPE_COLOR, &g_pConfigManager->getConfigValuePtr("animations:borders_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:borders")->intValue, &g_pConfigManager->getConfigValuePtr("animations:borders_curve")->strValue, (void*)this);
- m_fAlpha.create(AVARTYPE_FLOAT, &g_pConfigManager->getConfigValuePtr("animations:fadein_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:fadein")->intValue, &g_pConfigManager->getConfigValuePtr("animations:fadein_curve")->strValue, (void*)this);
+ m_vRealPosition.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*) this, AVARDAMAGE_ENTIRE);
+ m_vRealSize.create(AVARTYPE_VECTOR, &g_pConfigManager->getConfigValuePtr("animations:windows_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:windows")->intValue, &g_pConfigManager->getConfigValuePtr("animations:windows_curve")->strValue, (void*)this, AVARDAMAGE_ENTIRE);
+ m_cRealBorderColor.create(AVARTYPE_COLOR, &g_pConfigManager->getConfigValuePtr("animations:borders_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:borders")->intValue, &g_pConfigManager->getConfigValuePtr("animations:borders_curve")->strValue, (void*)this, AVARDAMAGE_BORDER);
+ m_fAlpha.create(AVARTYPE_FLOAT, &g_pConfigManager->getConfigValuePtr("animations:fadein_speed")->floatValue, &g_pConfigManager->getConfigValuePtr("animations:fadein")->intValue, &g_pConfigManager->getConfigValuePtr("animations:fadein_curve")->strValue, (void*)this, AVARDAMAGE_ENTIRE);
}
CWindow::~CWindow() {
diff --git a/src/helpers/AnimatedVariable.cpp b/src/helpers/AnimatedVariable.cpp
index 798e96e5..9e93ba3c 100644
--- a/src/helpers/AnimatedVariable.cpp
+++ b/src/helpers/AnimatedVariable.cpp
@@ -5,8 +5,9 @@ CAnimatedVariable::CAnimatedVariable() {
; // dummy var
}
-void CAnimatedVariable::create(ANIMATEDVARTYPE type, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow) {
+void CAnimatedVariable::create(ANIMATEDVARTYPE type, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow, AVARDAMAGEPOLICY policy) {
m_eVarType = type;
+ m_eDamagePolicy = policy;
m_pSpeed = speed;
m_pEnabled = enabled;
m_pWindow = pWindow;
@@ -17,8 +18,8 @@ void CAnimatedVariable::create(ANIMATEDVARTYPE type, float* speed, int64_t* enab
m_bDummy = false;
}
-void CAnimatedVariable::create(ANIMATEDVARTYPE type, std::any val, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow) {
- create(type, speed, enabled, pBezier, pWindow);
+void CAnimatedVariable::create(ANIMATEDVARTYPE type, std::any val, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow, AVARDAMAGEPOLICY policy) {
+ create(type, speed, enabled, pBezier, pWindow, policy);
try {
switch (type) {
diff --git a/src/helpers/AnimatedVariable.hpp b/src/helpers/AnimatedVariable.hpp
index 6fb62654..008d0b84 100644
--- a/src/helpers/AnimatedVariable.hpp
+++ b/src/helpers/AnimatedVariable.hpp
@@ -10,14 +10,20 @@ enum ANIMATEDVARTYPE {
AVARTYPE_COLOR
};
+enum AVARDAMAGEPOLICY {
+ AVARDAMAGE_INVALID = -1,
+ AVARDAMAGE_ENTIRE = 0,
+ AVARDAMAGE_BORDER
+};
+
class CAnimationManager;
class CAnimatedVariable {
public:
CAnimatedVariable(); // dummy var
- void create(ANIMATEDVARTYPE, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow);
- void create(ANIMATEDVARTYPE, std::any val, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow);
+ void create(ANIMATEDVARTYPE, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow, AVARDAMAGEPOLICY);
+ void create(ANIMATEDVARTYPE, std::any val, float* speed, int64_t* enabled, std::string* pBezier, void* pWindow, AVARDAMAGEPOLICY);
~CAnimatedVariable();
@@ -165,7 +171,8 @@ private:
std::chrono::system_clock::time_point animationBegin;
- ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID;
+ ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID;
+ AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_INVALID;
friend class CAnimationManager;
}; \ No newline at end of file
diff --git a/src/managers/AnimationManager.cpp b/src/managers/AnimationManager.cpp
index 82e481e8..975b1105 100644
--- a/src/managers/AnimationManager.cpp
+++ b/src/managers/AnimationManager.cpp
@@ -121,9 +121,38 @@ void CAnimationManager::tick() {
}
}
- // damage the window
- g_pHyprRenderer->damageBox(&WLRBOXPREV);
- g_pHyprRenderer->damageWindow(PWINDOW);
+ // damage the window with the damage policy
+ switch (av->m_eDamagePolicy) {
+ case AVARDAMAGE_ENTIRE: {
+ g_pHyprRenderer->damageBox(&WLRBOXPREV);
+ g_pHyprRenderer->damageWindow(PWINDOW);
+ break;
+ }
+ case AVARDAMAGE_BORDER: {
+ // damage only the border.
+ const auto BORDERSIZE = g_pConfigManager->getInt("general:border_size") + 1; // +1 for padding and shit
+
+ // damage for old box
+ g_pHyprRenderer->damageBox(WLRBOXPREV.x - BORDERSIZE, WLRBOXPREV.y - BORDERSIZE, WLRBOXPREV.width, BORDERSIZE); // top
+ g_pHyprRenderer->damageBox(WLRBOXPREV.x - BORDERSIZE, WLRBOXPREV.y - BORDERSIZE, BORDERSIZE, WLRBOXPREV.height); // left
+ g_pHyprRenderer->damageBox(WLRBOXPREV.x + WLRBOXPREV.width, WLRBOXPREV.y - BORDERSIZE, BORDERSIZE, WLRBOXPREV.height); // right
+ g_pHyprRenderer->damageBox(WLRBOXPREV.x, WLRBOXPREV.y + WLRBOXPREV.height, WLRBOXPREV.width, BORDERSIZE); // bottom
+
+ // damage for new box
+ const wlr_box WLRBOXNEW = {PWINDOW->m_vRealPosition.vec().x, PWINDOW->m_vRealPosition.vec().y, PWINDOW->m_vRealSize.vec().x, PWINDOW->m_vRealSize.vec().y};
+ g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, WLRBOXNEW.width, BORDERSIZE); // top
+ g_pHyprRenderer->damageBox(WLRBOXNEW.x - BORDERSIZE, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE, WLRBOXNEW.height); // left
+ g_pHyprRenderer->damageBox(WLRBOXNEW.x + WLRBOXNEW.width, WLRBOXNEW.y - BORDERSIZE, BORDERSIZE, WLRBOXNEW.height); // right
+ g_pHyprRenderer->damageBox(WLRBOXNEW.x, WLRBOXNEW.y + WLRBOXNEW.height, WLRBOXNEW.width, BORDERSIZE); // bottom
+
+ break;
+ }
+ default: {
+ Debug::log(ERR, "av has damage policy INVALID???");
+ break;
+ }
+ }
+
// set size and pos if valid
if (g_pCompositor->windowValidMapped(PWINDOW))
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 71ff5f87..2909ce55 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -495,6 +495,11 @@ void CHyprRenderer::damageBox(wlr_box* pBox) {
}
}
+void CHyprRenderer::damageBox(const int& x, const int& y, const int& w, const int& h) {
+ wlr_box box = {x, y, w, h};
+ damageBox(&box);
+}
+
void CHyprRenderer::renderDragIcon(SMonitor* pMonitor, timespec* time) {
if (!(g_pInputManager->m_sDrag.dragIcon && g_pInputManager->m_sDrag.iconMapped && g_pInputManager->m_sDrag.dragIcon->surface))
return;
diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp
index ee95e121..70bdd4ea 100644
--- a/src/render/Renderer.hpp
+++ b/src/render/Renderer.hpp
@@ -26,6 +26,7 @@ public:
void damageSurface(wlr_surface*, double, double);
void damageWindow(CWindow*);
void damageBox(wlr_box*);
+ void damageBox(const int& x, const int& y, const int& w, const int& h);
void damageMonitor(SMonitor*);
void applyMonitorRule(SMonitor*, SMonitorRule*, bool force = false);