/* Class Ball, BallWidget * * Online rendered balls with caching + animation widget * * Supported static effects * - ball color * - ripple texture * * Supported animation sequences for now: * - Color Blending * - Texture rotate * * April 1999, Josef Weidendorfer */ #ifndef _BALL_H_ #define _BALL_H_ #include #include #include #include #include /* textures for balls */ #define TEX_FLAT 0 #define TEX_RIPPLE 1 class Ball { public: Ball(const TQColor& c, double a = 0.0, int t=TEX_RIPPLE ); ~Ball(); TQPixmap* pixmap(); double angle() { return an; } TQColor ballColor() { return bColor; } void setSpecials(double z, double f, double l) { zoom = z, flip=f, limit=l; } static int w() { return sizeX; } static int h() { return sizeY; } static void setSize(int x,int y); static void setLight(int x=5, int y=3, int z=10, const TQColor& c = TQColor(200,230,255) ); static void setTexture(double c=13., double d=.2); private: void render(); static void invalidate(); //static TQImage back; static int sizeX, sizeY; static double lightX, lightY, lightZ; static TQColor lightColor; static double rippleCount, rippleDepth; TQPixmap pm; TQColor bColor; double an, sina, cosa; double zoom, flip, limit; int tex; Ball *next; static Ball* first; }; class BallAnimation { public: BallAnimation(int s, Ball*, Ball*); int steps; TQPtrList balls; }; #define ANIMATION_STOPPED 0 #define ANIMATION_FORWARD 1 #define ANIMATION_BACK 2 #define ANIMATION_LOOP 3 #define ANIMATION_CYCLE 4 class BallPosition { public: BallPosition(int xp,int yp, Ball* d); int x, y, actStep, actDir, actType; Ball* def; BallAnimation* actAnimation; }; #define MAX_POSITION 130 #define MAX_ANIMATION 20 class BallWidget : public TQWidget { TQ_OBJECT public: BallWidget(int _freq, int bFr, TQWidget *parent = 0, const char *name = 0); ~BallWidget(); void createBlending(int, int, Ball* , Ball* ); void createBallPosition(int, int x, int y, Ball*); void startAnimation(int pos, int anim, int type=ANIMATION_FORWARD); void stopAnimation(int pos); void paint(TQPaintDevice *); virtual void resizeEvent(TQResizeEvent *); virtual void paintEvent(TQPaintEvent *); signals: void animationFinished(int); void animationsFinished(void); protected: void drawBackground(); private slots: void animate(); protected: TQMemArray positions; TQMemArray animations; private: int freq; int xStart, yStart, realSize, ballFraction; bool isRunning; TQTimer *timer; }; /* Ball Test */ class BallTest: public BallWidget { TQ_OBJECT public: BallTest(TQWidget *parent=0, const char *name=0 ); protected: void mousePressEvent( TQMouseEvent * ); void mouseReleaseEvent( TQMouseEvent * ); }; #endif // _BALL_H_