Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

BAnimation.h

Go to the documentation of this file.
00001 // BAnimation.h (this is -*- C++ -*-)
00002 // 
00003 // \author: Bjoern Giesler <bjoern@giesler.de>
00004 // 
00005 // 
00006 // 
00007 // $Author: giesler $
00008 // $Locker$
00009 // $Revision$
00010 // $Date: 2002-08-19 10:41:28 +0200 (Mon, 19 Aug 2002) $
00011 
00012 #ifndef BANIMATION_H
00013 #define BANIMATION_H
00014 
00015 /* system includes */
00016 /* (none) */
00017 
00018 /* my includes */
00019 #include "BRunLoop.h"
00020 
00021 class BAnimation: public BRunLoop::VBlankReceiver {
00022 public:
00023   
00028   typedef s32 FIXED;
00029   static u8 FIX_SHIFT;
00030   static FIXED FIX_SCALE;
00031   static float FIX_SCALEF; 
00032   static float FIX_SCALEF_; 
00033   static inline FIXED INT2FIX(int _i) { return ((_i)<<FIX_SHIFT); }
00034   static inline int FIX2INT(FIXED _n) { return ((_n)>>FIX_SHIFT); }
00035   static inline FIXED FIX_FRAC(FIXED _n) { return ((_n)&(FIX_SCALE-1)); }
00036 
00037   static inline FIXED FLOAT2FIX(float _f) { return (FIXED((_f)*FIX_SCALEF)); }
00038   static inline float FIX2FLOAT(FIXED _n) { return ((_n)*FIX_SCALEF_); }
00039 
00040   static inline FIXED FIX_ADD(FIXED a, FIXED b) { return a+b; }
00041   static inline FIXED FIX_SUB(FIXED a, FIXED b) { return a-b; }
00042   static inline FIXED FIX_MUL(FIXED a, FIXED b) { return (a*b)>>FIX_SHIFT; }
00043   static inline FIXED FIX_DIV(FIXED a, FIXED b) { return (a<<FIX_SHIFT)/b; }
00048 class Delegate {
00049   public:
00050     virtual ~Delegate() {}
00051     virtual void animationDidStart(BAnimation* animation) {}
00052     virtual void animationDidChangeValue(BAnimation* animation, FIXED value) {}
00053     virtual void animationDidFinish(BAnimation* animation) {}
00054   };
00055   
00056   BAnimation();
00057   ~BAnimation();
00058 
00059   typedef FIXED (* FixedModifier)(FIXED);
00060 
00061   void addTarget(volatile uint32* target, FixedModifier modifier = NULL);
00062   void addTarget(volatile uint16* target, FixedModifier modifier = NULL);
00063   void clearTargets();
00064                  
00065   static FIXED pageflipModifierYDY(FIXED value);
00066   static FIXED pageflipModifierCY(FIXED value);
00067 
00068   void setStartValue(int value);
00069   void setStartValue(float value);
00070   FIXED startValue() { return _start; }
00071 
00072   void setStepValue(int value);
00073   void setStepValue(float value);
00074   FIXED stepValue() { return _step; }
00075 
00076   void setEndValue(int value);
00077   void setEndValue(float value);
00078   FIXED endValue() { return _end; }
00079 
00080   FIXED value() { return _value; }
00081 
00083   void schedule(bool global = false);
00085   void unschedule();
00086 
00088   void run();
00089 
00090   void runloopReachedVBlank(BRunLoop* loop);
00091 
00092   void setDelegate(Delegate* deleg);
00093   Delegate* delegate() { return _deleg; }
00094 
00095 private:
00096   void setTarget(FIXED value);
00097 
00098   typedef struct {
00099     volatile void* target;
00100     bool targetIs16Bit;
00101     FixedModifier modifier;
00102   } AnimTarget;
00103 
00104   std::vector<AnimTarget> _targets;
00105   FIXED _start, _end, _step, _value;
00106   bool _running, _global;
00107   Delegate* _deleg;
00108   BRunLoop* _loop;
00109 };
00110 
00111 #endif /* BANIMATION_H */

Generated on Sat Dec 29 09:59:23 2007 for DSGUI by doxygen1.3-rc3