animation: use CSignalT

This commit is contained in:
outfoxxed 2025-06-25 20:26:56 -07:00
parent a3a470a0cd
commit 75cc792628
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
2 changed files with 12 additions and 28 deletions

View file

@ -35,8 +35,8 @@ namespace Hyprutils {
const std::unordered_map<std::string, Memory::CSharedPointer<CBezierCurve>>& getAllBeziers();
struct SAnimationManagerSignals {
Signal::CSignal connect; // WP<CBaseAnimatedVariable>
Signal::CSignal disconnect; // WP<CBaseAnimatedVariable>
Signal::CSignalT<const Memory::CWeakPointer<CBaseAnimatedVariable>&> connect;
Signal::CSignalT<const Memory::CWeakPointer<CBaseAnimatedVariable>&> disconnect;
};
Memory::CWeakPointer<SAnimationManagerSignals> getSignals() const;
@ -48,9 +48,6 @@ namespace Hyprutils {
bool m_bTickScheduled = false;
void onConnect(std::any data);
void onDisconnect(std::any data);
struct SAnimVarListeners {
Signal::CHyprSignalListener connect;
Signal::CHyprSignalListener disconnect;

View file

@ -20,31 +20,18 @@ CAnimationManager::CAnimationManager() {
m_events = makeUnique<SAnimationManagerSignals>();
m_listeners = makeUnique<SAnimVarListeners>();
m_listeners->connect = m_events->connect.registerListener([this](std::any data) { onConnect(data); });
m_listeners->disconnect = m_events->disconnect.registerListener([this](std::any data) { onDisconnect(data); });
}
m_listeners->connect = m_events->connect.listen([this](const WP<CBaseAnimatedVariable>& animVar) {
if (!m_bTickScheduled)
scheduleTick();
void CAnimationManager::onConnect(std::any data) {
if (!m_bTickScheduled)
scheduleTick();
if (animVar)
m_vActiveAnimatedVariables.emplace_back(animVar);
});
try {
const auto PAV = std::any_cast<WP<CBaseAnimatedVariable>>(data);
if (!PAV)
return;
m_vActiveAnimatedVariables.emplace_back(PAV);
} catch (const std::bad_any_cast&) { return; }
}
void CAnimationManager::onDisconnect(std::any data) {
try {
const auto PAV = std::any_cast<WP<CBaseAnimatedVariable>>(data);
if (!PAV)
return;
std::erase_if(m_vActiveAnimatedVariables, [&](const auto& other) { return !other || other == PAV; });
} catch (const std::bad_any_cast&) { return; }
m_listeners->disconnect = m_events->disconnect.listen([this](const WP<CBaseAnimatedVariable>& animVar) {
if (animVar)
std::erase_if(m_vActiveAnimatedVariables, [&](const auto& other) { return !other || other == animVar; });
});
}
void CAnimationManager::removeAllBeziers() {