16 #include "constexpertrig.h" 28 namespace ActionCurves {
29 static constexpr
float FrameRate = 30.f;
30 constexpr
float ac_sin(
int t) {
31 return cx_math::sin(cx_math::pi<float> * (
float)t / FrameRate);
34 constexpr
float ac_inv_sin(
int t) {
35 return 1.f - cx_math::sin(cx_math::pi<float> * (
float)t / FrameRate);
43 [[nodiscard]]
virtual size_t size()
const = 0;
45 virtual float operator[](
size_t idx)
const = 0;
50 static constexpr std::array<float, 30> data{
51 ac_sin(0), ac_sin(2), ac_sin(4), ac_sin(6),
52 ac_sin(8), ac_sin(10), ac_sin(12), ac_sin(14),
53 ac_sin(16), ac_sin(18), ac_sin(20), ac_sin(22),
54 ac_sin(24), ac_sin(26), ac_sin(28), 0.f,
55 0.f, 0.f, 0.f, 0.f, 0.f, 0.f,
56 0.f, 0.f, 0.f, 0.f, 0.f, 0.f,
63 [[nodiscard]]
size_t size()
const override {
67 float operator[](
size_t idx)
const override {
74 static constexpr std::array<float, 30> data{
75 ac_sin(0), ac_sin(6),ac_sin(12),ac_sin(18),
76 ac_sin(24), 0.f,0.f, 0.f,0.f, 0.f,
77 ac_sin(0), ac_sin(6),ac_sin(12),ac_sin(18),
78 ac_sin(24), 0.f,0.f, 0.f,0.f, 0.f,
79 0.f, 0.f,0.f, 0.f, 0.f, 0.f,
86 [[nodiscard]]
size_t size()
const override {
90 float operator[](
size_t idx)
const override {
97 static constexpr std::array<float, 30> data {
98 ac_inv_sin(0), ac_inv_sin(6),ac_inv_sin(12),ac_inv_sin(18),
99 ac_inv_sin(24), 1.f,1.f, 1.f,1.f, 1.f,
100 1.f,1.f, 1.f,1.f, 1.f, 1.f,
101 1.f,1.f, 1.f,1.f, 1.f, 1.f,
102 1.f,1.f, 1.f,1.f, 1.f, 1.f,
109 [[nodiscard]]
size_t size()
const override {
113 float operator[](
size_t idx)
const override {
119 template<
class Curve,
typename ... Args>
120 std::unique_ptr<Curve> curve(Args ... args) {
121 return std::make_unique<Curve>(args ... );
127 using AnimationList = std::vector<std::pair<std::shared_ptr<Animation>,
Position<int>>>;
128 std::map<std::shared_ptr<Window>,AnimationList> mAnimations;
137 void set(
const std::shared_ptr<Window> &window, std::shared_ptr<Animation> &animation,
138 const Position<int> &position);
140 void remove(
const std::shared_ptr<Window>& window, std::shared_ptr<Animation>& animation);
142 void animate(
const std::shared_ptr<Window>& window,
gm::Context &context, uint32_t frame);
144 explicit operator bool()
const noexcept {
145 return !mAnimations.empty();
148 [[nodiscard]]
bool areAnimationsForWindow(
const std::shared_ptr<Window>& window)
const noexcept {
149 return mAnimations.find(window) != mAnimations.end();
160 using Callback = std::function<void(gm::Context &context, const Position<int> &, uint32_t frame)>;
161 using Enable = std::function<void(AnimationEnable animationEnable)>;
163 std::unique_ptr<ActionCurves::ActionCurve> mActionCurve{};
166 Callback mAnimationCallback;
168 Enable mAnimationEnableStateCallback;
177 static void setAnimation(
const std::shared_ptr<Window> &window, std::shared_ptr<Animation> animation,
179 Animator::getAnimator().set(window, animation, position);
182 static void removeAnimation(
const std::shared_ptr<Window>& window, std::shared_ptr<Animation> animation) {
183 Animator::getAnimator().remove(window, animation);
186 void setActionCurve(std::unique_ptr<ActionCurves::ActionCurve> &&actionCurve) {
187 mActionCurve = std::move(actionCurve);
191 mAnimationEnableState = animationEnable;
192 if (mAnimationEnableStateCallback)
193 mAnimationEnableStateCallback(animationEnable);
198 template<
class W
idgetClass>
199 inline std::shared_ptr<WidgetClass> operator<<(std::shared_ptr<WidgetClass> widget, std::unique_ptr<rose::ActionCurves::ActionCurve>&& curve) {
200 static_assert(std::is_base_of_v<rose::Animation,WidgetClass>,
"WidgetClass must be derived from rose::Animation.");
201 widget->setActionCurve(std::move(curve));
205 template<
class W
idgetClass>
206 inline std::shared_ptr<WidgetClass> operator<<(std::shared_ptr<WidgetClass> widget,
rose::AnimationEnable animationEnable) {
207 static_assert(std::is_base_of_v<rose::Animation,WidgetClass>,
"WidgetClass must be derived from rose::Animation.");
208 widget->setAnimationEnable(animationEnable);
AnimationEnable
An enumeration to enable or disable animation.
Definition: Animation.h:24
Definition: Animation.h:95
Definition: Animation.h:157
Context
Definition: GraphicsModel.h:76
Definition: Animation.h:38
Abstraction of the graphics model.
Definition: Animation.h:48
Definition: Animation.h:125
ToDo: There is an issue that the initial scroll interaction is lost if the click/press lands on a Wid...
Definition: CelestialOverlay.cpp:13
Definition: Animation.h:72