mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 05:25:58 +01:00
animationmgr: allow empty avars
This commit is contained in:
parent
621eac32d3
commit
5b84b0fb44
2 changed files with 18 additions and 5 deletions
|
@ -3,14 +3,16 @@
|
||||||
#include "../defines.hpp"
|
#include "../defines.hpp"
|
||||||
#include <any>
|
#include <any>
|
||||||
|
|
||||||
enum ANIMATEDVARTYPE {
|
enum ANIMATEDVARTYPE
|
||||||
|
{
|
||||||
AVARTYPE_INVALID = -1,
|
AVARTYPE_INVALID = -1,
|
||||||
AVARTYPE_FLOAT,
|
AVARTYPE_FLOAT,
|
||||||
AVARTYPE_VECTOR,
|
AVARTYPE_VECTOR,
|
||||||
AVARTYPE_COLOR
|
AVARTYPE_COLOR
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AVARDAMAGEPOLICY {
|
enum AVARDAMAGEPOLICY
|
||||||
|
{
|
||||||
AVARDAMAGE_NONE = -1,
|
AVARDAMAGE_NONE = -1,
|
||||||
AVARDAMAGE_ENTIRE = 0,
|
AVARDAMAGE_ENTIRE = 0,
|
||||||
AVARDAMAGE_BORDER,
|
AVARDAMAGE_BORDER,
|
||||||
|
@ -209,10 +211,17 @@ class CAnimatedVariable {
|
||||||
m_bRemoveBeginAfterRan = remove;
|
m_bRemoveBeginAfterRan = remove;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sets the update callback, called every time the value is animated and a step is done
|
||||||
|
Warning: calling unregisterVar/registerVar in this handler will cause UB */
|
||||||
|
void setUpdateCallback(std::function<void(void* thisptr)> func) {
|
||||||
|
m_fUpdateCallback = func;
|
||||||
|
}
|
||||||
|
|
||||||
/* resets all callbacks. Does not call any. */
|
/* resets all callbacks. Does not call any. */
|
||||||
void resetAllCallbacks() {
|
void resetAllCallbacks() {
|
||||||
m_fBeginCallback = nullptr;
|
m_fBeginCallback = nullptr;
|
||||||
m_fEndCallback = nullptr;
|
m_fEndCallback = nullptr;
|
||||||
|
m_fUpdateCallback = nullptr;
|
||||||
m_bRemoveBeginAfterRan = false;
|
m_bRemoveBeginAfterRan = false;
|
||||||
m_bRemoveEndAfterRan = false;
|
m_bRemoveEndAfterRan = false;
|
||||||
}
|
}
|
||||||
|
@ -249,6 +258,7 @@ class CAnimatedVariable {
|
||||||
bool m_bRemoveBeginAfterRan = true;
|
bool m_bRemoveBeginAfterRan = true;
|
||||||
std::function<void(void* thisptr)> m_fEndCallback;
|
std::function<void(void* thisptr)> m_fEndCallback;
|
||||||
std::function<void(void* thisptr)> m_fBeginCallback;
|
std::function<void(void* thisptr)> m_fBeginCallback;
|
||||||
|
std::function<void(void* thisptr)> m_fUpdateCallback;
|
||||||
|
|
||||||
// methods
|
// methods
|
||||||
void onAnimationEnd() {
|
void onAnimationEnd() {
|
||||||
|
|
|
@ -80,13 +80,13 @@ void CAnimationManager::tick() {
|
||||||
|
|
||||||
wlr_box WLRBOXPREV = {0, 0, 0, 0};
|
wlr_box WLRBOXPREV = {0, 0, 0, 0};
|
||||||
if (PWINDOW) {
|
if (PWINDOW) {
|
||||||
WLRBOXPREV = PWINDOW->getFullWindowBoundingBox();
|
WLRBOXPREV = PWINDOW->getFullWindowBoundingBox();
|
||||||
PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
PMONITOR = g_pCompositor->getMonitorFromID(PWINDOW->m_iMonitorID);
|
||||||
if (!PMONITOR)
|
if (!PMONITOR)
|
||||||
continue;
|
continue;
|
||||||
animationsDisabled = animationsDisabled || PWINDOW->m_sAdditionalConfigData.forceNoAnims;
|
animationsDisabled = animationsDisabled || PWINDOW->m_sAdditionalConfigData.forceNoAnims;
|
||||||
} else if (PWORKSPACE) {
|
} else if (PWORKSPACE) {
|
||||||
PMONITOR = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
PMONITOR = g_pCompositor->getMonitorFromID(PWORKSPACE->m_iMonitorID);
|
||||||
if (!PMONITOR)
|
if (!PMONITOR)
|
||||||
continue;
|
continue;
|
||||||
WLRBOXPREV = {(int)PMONITOR->vecPosition.x, (int)PMONITOR->vecPosition.y, (int)PMONITOR->vecSize.x, (int)PMONITOR->vecSize.y};
|
WLRBOXPREV = {(int)PMONITOR->vecPosition.x, (int)PMONITOR->vecPosition.y, (int)PMONITOR->vecSize.x, (int)PMONITOR->vecSize.y};
|
||||||
|
@ -184,6 +184,9 @@ void CAnimationManager::tick() {
|
||||||
if (!VISIBLE)
|
if (!VISIBLE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (av->m_fUpdateCallback)
|
||||||
|
av->m_fUpdateCallback(av);
|
||||||
|
|
||||||
switch (av->m_eDamagePolicy) {
|
switch (av->m_eDamagePolicy) {
|
||||||
case AVARDAMAGE_ENTIRE: {
|
case AVARDAMAGE_ENTIRE: {
|
||||||
g_pHyprRenderer->damageBox(&WLRBOXPREV);
|
g_pHyprRenderer->damageBox(&WLRBOXPREV);
|
||||||
|
|
Loading…
Reference in a new issue