Multiple animation optimization and xwayland wine fixes

This commit is contained in:
vaxerski 2022-11-04 15:56:31 +00:00
parent 34ad837fd9
commit 206360177f
10 changed files with 96 additions and 15 deletions

View file

@ -12,8 +12,6 @@ void CAnimatedVariable::create(ANIMATEDVARTYPE type, SAnimationPropertyConfig* p
m_pConfig = pAnimConfig;
m_pWindow = pWindow;
g_pAnimationManager->m_lAnimatedVariables.push_back(this);
m_bDummy = false;
}
@ -58,6 +56,10 @@ void CAnimatedVariable::unregister() {
g_pAnimationManager->m_lAnimatedVariables.remove(this);
}
void CAnimatedVariable::registerVar() {
g_pAnimationManager->m_lAnimatedVariables.push_back(this);
}
int CAnimatedVariable::getDurationLeftMs() {
return std::max((int)(m_pConfig->pValues->internalSpeed * 100) - (int)std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - animationBegin).count(), 0);
}

View file

@ -32,6 +32,7 @@ public:
~CAnimatedVariable();
void unregister();
void registerVar();
// gets the current vector value (real time)
const Vector2D& vec() const {
@ -167,6 +168,16 @@ public:
int getDurationLeftMs();
/* sets a function to be ran when the animation finishes.
if an animation is not running, runs instantly.
will remove the callback when ran. */
void setCallbackOnEnd(std::function<void(void* thisptr)> func) {
m_fEndCallback = func;
if (!isBeingAnimated())
onAnimationEnd();
}
private:
Vector2D m_vValue = Vector2D(0,0);
@ -195,6 +206,16 @@ private:
ANIMATEDVARTYPE m_eVarType = AVARTYPE_INVALID;
AVARDAMAGEPOLICY m_eDamagePolicy = AVARDAMAGE_INVALID;
std::function<void(void* thisptr)> m_fEndCallback;
// methods
void onAnimationEnd() {
if (m_fEndCallback) {
m_fEndCallback(this);
m_fEndCallback = nullptr; // reset
}
}
friend class CAnimationManager;
friend class CWorkspace;
friend struct SLayerSurface;

View file

@ -4,4 +4,5 @@
SLayerSurface::SLayerSurface() {
alpha.create(AVARTYPE_FLOAT, g_pConfigManager->getAnimationPropertyConfig("fadeIn"), nullptr, AVARDAMAGE_ENTIRE);
alpha.m_pLayer = this;
alpha.registerVar();
}

View file

@ -31,6 +31,9 @@ CWorkspace::CWorkspace(int monitorID, std::string name, bool special) {
m_fAlpha.create(AVARTYPE_FLOAT, special ? g_pConfigManager->getAnimationPropertyConfig("specialWorkspace") : g_pConfigManager->getAnimationPropertyConfig("workspaces"), nullptr, AVARDAMAGE_ENTIRE);
m_fAlpha.setValueAndWarp(255.f);
m_vRenderOffset.registerVar();
m_fAlpha.registerVar();
g_pEventManager->postEvent({"createworkspace", m_szName}, true);
}