mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-28 03:29:49 +01:00
1ed1ce9506
moves std::shared_ptrs to a new implementation Advantages: - you can dereference a weak_ptr directly. This will obviously segfault on a nullptr deref if it's expired. - this is useful to avoid the .lock() hell where we are 100% sure the pointer _should_ be valid. (and if it isn't, it should throw.) - weak_ptrs are still valid while the SP is being destroyed. - reasoning: while an object (e.g. CWindow) is being destroyed, its `weak_ptr self` should be accessible (the sp is still alive, and so is CWindow), but it's not because by stl it's already expired (to prevent resurrection) - this impl solves it differently. w_p is expired, but can still be dereferenced and used. Creating `s_p`s is not possible anymore, though. - this is useful in destructors and callbacks.
57 lines
2.4 KiB
C++
57 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "../defines.hpp"
|
|
#include <list>
|
|
#include <unordered_map>
|
|
#include "../helpers/AnimatedVariable.hpp"
|
|
#include "../helpers/BezierCurve.hpp"
|
|
#include "../helpers/Timer.hpp"
|
|
#include "eventLoop/EventLoopTimer.hpp"
|
|
|
|
class CWindow;
|
|
|
|
class CAnimationManager {
|
|
public:
|
|
CAnimationManager();
|
|
|
|
void tick();
|
|
bool shouldTickForNext();
|
|
void onTicked();
|
|
void scheduleTick();
|
|
void addBezierWithName(std::string, const Vector2D&, const Vector2D&);
|
|
void removeAllBeziers();
|
|
|
|
void onWindowPostCreateClose(PHLWINDOW, bool close = false);
|
|
|
|
bool bezierExists(const std::string&);
|
|
CBezierCurve* getBezier(const std::string&);
|
|
|
|
std::string styleValidInConfigVar(const std::string&, const std::string&);
|
|
|
|
std::unordered_map<std::string, CBezierCurve> getAllBeziers();
|
|
|
|
std::vector<CBaseAnimatedVariable*> m_vAnimatedVariables;
|
|
std::vector<CBaseAnimatedVariable*> m_vActiveAnimatedVariables;
|
|
|
|
SP<CEventLoopTimer> m_pAnimationTimer;
|
|
|
|
float m_fLastTickTime; // in ms
|
|
|
|
private:
|
|
bool deltaSmallToFlip(const Vector2D& a, const Vector2D& b);
|
|
bool deltaSmallToFlip(const CColor& a, const CColor& b);
|
|
bool deltaSmallToFlip(const float& a, const float& b);
|
|
bool deltazero(const Vector2D& a, const Vector2D& b);
|
|
bool deltazero(const CColor& a, const CColor& b);
|
|
bool deltazero(const float& a, const float& b);
|
|
|
|
std::unordered_map<std::string, CBezierCurve> m_mBezierCurves;
|
|
|
|
bool m_bTickScheduled = false;
|
|
|
|
// Anim stuff
|
|
void animationPopin(PHLWINDOW, bool close = false, float minPerc = 0.f);
|
|
void animationSlide(PHLWINDOW, std::string force = "", bool close = false);
|
|
};
|
|
|
|
inline std::unique_ptr<CAnimationManager> g_pAnimationManager;
|