| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- // ================================================================================
- // == This file is a part of Turbo Badger. (C) 2011-2014, Emil Segerås ==
- // == See tb_core.h for more information. ==
- // ================================================================================
- #ifndef TB_WIDGET_ANIMATION_H
- #define TB_WIDGET_ANIMATION_H
- #include "../tb_widgets_listener.h"
- #include "../animation/tb_animation.h"
- namespace tb {
- /** Don't use 0.0 for opacity animations since that may break focus code.
- At the moment a window should appear and start fading in from opacity 0,
- it would also attempt setting the focus to it, but if opacity is 0 it will
- think focus should not be set in that window and fail. */
- #define TB_ALMOST_ZERO_OPACITY 0.001f
- /** Base class for widget animations. This animation object will
- be deleted automatically if the widget is deleted. */
- class TBWidgetAnimationObject : public TBAnimationObject, public TBLinkOf<TBWidgetAnimationObject>
- {
- public:
- // For safe typecasting
- TBOBJECT_SUBCLASS(TBWidgetAnimationObject, TBAnimationObject);
- TBWidgetAnimationObject(TBWidget *widget);
- virtual ~TBWidgetAnimationObject();
- public:
- TBWidget *m_widget;
- };
- /** Animate the opacity of the target widget. */
- class TBWidgetAnimationOpacity : public TBWidgetAnimationObject
- {
- public:
- // For safe typecasting
- TBOBJECT_SUBCLASS(TBWidgetAnimationOpacity, TBWidgetAnimationObject);
- TBWidgetAnimationOpacity(TBWidget *widget, float src_opacity, float dst_opacity, bool die);
- virtual void OnAnimationStart();
- virtual void OnAnimationUpdate(float progress);
- virtual void OnAnimationStop(bool aborted);
- private:
- float m_src_opacity;
- float m_dst_opacity;
- bool m_die;
- };
- /** Animate the rectangle of the target widget. */
- class TBWidgetAnimationRect : public TBWidgetAnimationObject
- {
- public:
- // For safe typecasting
- TBOBJECT_SUBCLASS(TBWidgetAnimationRect, TBWidgetAnimationObject);
- enum MODE {
- /** Animate from source to dest. */
- MODE_SRC_TO_DST,
- /** Animate from current + delta to current. */
- MODE_DELTA_IN,
- /** Animate from current to current + delta. */
- MODE_DELTA_OUT
- };
- /** Animate the widget between the given source and dest rectangle. */
- TBWidgetAnimationRect(TBWidget *widget, const TBRect &src_rect, const TBRect &dst_rect);
- /** Animate the widget between rectangles based on the current widget
- rectangle and a delta. The reference rectangle will be taken from
- the target widget on the first OnAnimationUpdate. */
- TBWidgetAnimationRect(TBWidget *widget, const TBRect &delta_rect, MODE mode);
- virtual void OnAnimationStart();
- virtual void OnAnimationUpdate(float progress);
- virtual void OnAnimationStop(bool aborted);
- private:
- TBRect m_src_rect;
- TBRect m_dst_rect;
- TBRect m_delta_rect;
- MODE m_mode;
- };
- class TBWidgetsAnimationManager : public TBWidgetListener
- {
- public:
- /** Init the widgets animation manager. */
- static void Init();
- /** Shutdown the widgets animation manager. */
- static void Shutdown();
- /** Abort all animations that are running for the given widget. */
- static void AbortAnimations(TBWidget *widget);
- /** Abort all animations matching the given type that are running for the given widget.
- This example will abort all opacity animations:
- AbortAnimations(widget, TBTypedObject::GetTypeId<TBWidgetAnimationOpacity>()) */
- static void AbortAnimations(TBWidget *widget, TB_TYPE_ID type_id);
- private:
- // == TBWidgetListener ==================
- virtual void OnWidgetDelete(TBWidget *widget);
- virtual bool OnWidgetDying(TBWidget *widget);
- virtual void OnWidgetAdded(TBWidget *parent, TBWidget *child);
- virtual void OnWidgetRemove(TBWidget *parent, TBWidget *child);
- };
- }; // namespace tb
- #endif // TB_WIDGET_ANIMATION_H
|