/********************************************************************** ** ** ** Definition of TTQCanvas classes ** ** Created : 991211 ** ** Copyright (C) 1999-2002 Trolltech AS. All rights reserved. ** ** This file is part of the canvas module of the Qt GUI Toolkit. ** ** This file may be distributed under the terms of the Q Public License ** as defined by Trolltech AS of Norway and appearing in the file ** LICENSE.TQPL included in the packaging of this file. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** Licensees holding valid Qt Enterprise Edition licenses may use this ** file in accordance with the Qt Commercial License Agreement provided ** with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ** information about Qt Commercial License Agreements. ** See http://www.trolltech.com/qpl/ for TQPL licensing information. ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef TQCANVAS_H #define TQCANVAS_H #ifndef QT_H #include "tqscrollview.h" #include "tqpixmap.h" #include "tqptrlist.h" #include "tqbrush.h" #include "tqpen.h" #include "tqvaluelist.h" #include "tqpointarray.h" #endif // QT_H #if !defined( QT_MODULE_CANVAS ) || defined( QT_LICENSE_PROFESSIONAL ) || defined( QT_INTERNAL_CANVAS ) #define TQM_EXPORT_CANVAS #define TQM_TEMPLATE_EXTERN_CANVAS #else #define TQM_EXPORT_CANVAS Q_EXPORT #define TQM_TEMPLATE_EXTERN_CANVAS Q_TEMPLATE_EXTERN #endif #ifndef QT_NO_CANVAS class TTQCanvasSprite; class TTQCanvasPolygonalItem; class TTQCanvasRectangle; class TTQCanvasPolygon; class TTQCanvasEllipse; class TTQCanvasText; class TTQCanvasLine; class TTQCanvasChunk; class TTQCanvas; class TTQCanvasItem; class TTQCanvasView; class TTQCanvasPixmap; class TQM_EXPORT_CANVAS TTQCanvasItemList : public TTQValueList { public: void sort(); void drawUnique( TTQPainter& painter ); }; class TTQCanvasItemExtra; class TQM_EXPORT_CANVAS TTQCanvasItem : public Qt { public: TTQCanvasItem(TTQCanvas* canvas); virtual ~TTQCanvasItem(); double x() const { return myx; } double y() const { return myy; } double z() const { return myz; } // (depth) virtual void moveBy(double dx, double dy); void move(double x, double y); void setX(double a) { move(a,y()); } void setY(double a) { move(x(),a); } void setZ(double a) { myz=a; changeChunks(); } bool animated() const; virtual void setAnimated(bool y); virtual void setVelocity( double vx, double vy); void setXVelocity( double vx ) { setVelocity(vx,yVelocity()); } void setYVelocity( double vy ) { setVelocity(xVelocity(),vy); } double xVelocity() const; double yVelocity() const; virtual void advance(int stage); virtual bool collidesWith( const TTQCanvasItem* ) const=0; TTQCanvasItemList collisions(bool exact /* NO DEFAULT */ ) const; virtual void setCanvas(TTQCanvas*); virtual void draw(TTQPainter&)=0; void show(); void hide(); virtual void setVisible(bool yes); bool isVisible() const { return (bool)vis; } virtual void setSelected(bool yes); bool isSelected() const { return (bool)sel; } virtual void setEnabled(bool yes); bool isEnabled() const { return (bool)ena; } virtual void setActive(bool yes); bool isActive() const { return (bool)act; } #ifndef QT_NO_COMPAT bool visible() const { return (bool)vis; } bool selected() const { return (bool)sel; } bool enabled() const { return (bool)ena; } bool active() const { return (bool)act; } #endif enum RttiValues { Rtti_Item = 0, Rtti_Sprite = 1, Rtti_PolygonalItem = 2, Rtti_Text = 3, Rtti_Polygon = 4, Rtti_Rectangle = 5, Rtti_Ellipse = 6, Rtti_Line = 7, Rtti_Spline = 8 }; virtual int rtti() const; static int RTTI; virtual TTQRect boundingRect() const=0; virtual TTQRect boundingRectAdvanced() const; TTQCanvas* canvas() const { return cnv; } protected: void update() { changeChunks(); } private: // For friendly subclasses... friend class TTQCanvasPolygonalItem; friend class TTQCanvasSprite; friend class TTQCanvasRectangle; friend class TTQCanvasPolygon; friend class TTQCanvasEllipse; friend class TTQCanvasText; friend class TTQCanvasLine; virtual TTQPointArray chunks() const; virtual void addToChunks(); virtual void removeFromChunks(); virtual void changeChunks(); virtual bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const = 0; // End of friend stuff TTQCanvas* cnv; static TTQCanvas* current_canvas; double myx,myy,myz; TTQCanvasItemExtra *ext; TTQCanvasItemExtra& extra(); uint ani:1; uint vis:1; uint val:1; uint sel:1; uint ena:1; uint act:1; }; class TTQCanvasData; class TQM_EXPORT_CANVAS TTQCanvas : public TQObject { Q_OBJECT public: TTQCanvas( TTQObject* parent = 0, const char* name = 0 ); TTQCanvas(int w, int h); TTQCanvas( TTQPixmap p, int h, int v, int tilewidth, int tileheight ); virtual ~TTQCanvas(); virtual void setTiles( TTQPixmap tiles, int h, int v, int tilewidth, int tileheight ); virtual void setBackgroundPixmap( const TTQPixmap& p ); TTQPixmap backgroundPixmap() const; virtual void setBackgroundColor( const TTQColor& c ); TTQColor backgroundColor() const; virtual void setTile( int x, int y, int tilenum ); int tile( int x, int y ) const { return grid[x+y*htiles]; } int tilesHorizontally() const { return htiles; } int tilesVertically() const { return vtiles; } int tileWidth() const { return tilew; } int tileHeight() const { return tileh; } virtual void resize(int width, int height); int width() const { return awidth; } int height() const { return aheight; } TTQSize size() const { return TTQSize(awidth,aheight); } TTQRect rect() const { return TTQRect( 0, 0, awidth, aheight ); } bool onCanvas( int x, int y ) const { return x>=0 && y>=0 && x=0 && y>=0 && x, TTQPtrList hotspots); TTQCanvasPixmapArray(TTQValueList, TTQPointArray hotspots = TTQPointArray() ); ~TTQCanvasPixmapArray(); #ifndef QT_NO_IMAGEIO bool readPixmaps(const TTQString& datafilenamepattern, int framecount=0); bool readCollisionMasks(const TTQString& filenamepattern); #endif // deprecated bool operator!(); // Failure check. bool isValid() const; TTQCanvasPixmap* image(int i) const { return img ? img[i] : 0; } void setImage(int i, TTQCanvasPixmap* p); uint count() const { return (uint)framecount; } private: #if defined(Q_DISABLE_COPY) TTQCanvasPixmapArray( const TTQCanvasPixmapArray & ); TTQCanvasPixmapArray &operator=( const TTQCanvasPixmapArray & ); #endif #ifndef QT_NO_IMAGEIO bool readPixmaps(const TTQString& datafilenamepattern, int framecount, bool maskonly); #endif void reset(); int framecount; TTQCanvasPixmap** img; }; class TQM_EXPORT_CANVAS TTQCanvasSprite : public TQCanvasItem { public: TTQCanvasSprite(TTQCanvasPixmapArray* array, TTQCanvas* canvas); void setSequence(TTQCanvasPixmapArray* seq); virtual ~TTQCanvasSprite(); void move(double x, double y); virtual void move(double x, double y, int frame); void setFrame(int); enum FrameAnimationType { Cycle, Oscillate }; virtual void setFrameAnimation(FrameAnimationType=Cycle, int step=1, int state=0); int frame() const { return frm; } int frameCount() const { return images->count(); } int rtti() const; static int RTTI; bool collidesWith( const TTQCanvasItem* ) const; TTQRect boundingRect() const; // is there a reason for these to be protected? Lars //protected: int width() const; int height() const; int leftEdge() const; int topEdge() const; int rightEdge() const; int bottomEdge() const; int leftEdge(int nx) const; int topEdge(int ny) const; int rightEdge(int nx) const; int bottomEdge(int ny) const; TTQCanvasPixmap* image() const { return images->image(frm); } virtual TTQCanvasPixmap* imageAdvanced() const; TTQCanvasPixmap* image(int f) const { return images->image(f); } virtual void advance(int stage); public: void draw(TTQPainter& painter); private: #if defined(Q_DISABLE_COPY) TTQCanvasSprite( const TTQCanvasSprite & ); TTQCanvasSprite &operator=( const TTQCanvasSprite & ); #endif void addToChunks(); void removeFromChunks(); void changeChunks(); int frm; ushort anim_val; uint anim_state:2; uint anim_type:14; bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const; friend bool qt_testCollision( const TTQCanvasSprite* s1, const TTQCanvasSprite* s2 ); TTQCanvasPixmapArray* images; }; class TTQPolygonalProcessor; class TQM_EXPORT_CANVAS TTQCanvasPolygonalItem : public TQCanvasItem { public: TTQCanvasPolygonalItem(TTQCanvas* canvas); virtual ~TTQCanvasPolygonalItem(); bool collidesWith( const TTQCanvasItem* ) const; virtual void setPen(TTQPen p); virtual void setBrush(TTQBrush b); TTQPen pen() const { return pn; } TTQBrush brush() const { return br; } virtual TTQPointArray areaPoints() const=0; virtual TTQPointArray areaPointsAdvanced() const; TTQRect boundingRect() const; int rtti() const; static int RTTI; protected: void draw(TTQPainter &); virtual void drawShape(TTQPainter &) = 0; bool winding() const; void setWinding(bool); void invalidate(); bool isValid() const { return (bool)val; } private: void scanPolygon( const TTQPointArray& pa, int winding, TTQPolygonalProcessor& process ) const; TTQPointArray chunks() const; bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const; TTQBrush br; TTQPen pn; uint wind:1; }; class TQM_EXPORT_CANVAS TTQCanvasRectangle : public TQCanvasPolygonalItem { public: TTQCanvasRectangle(TTQCanvas* canvas); TTQCanvasRectangle(const TTQRect&, TTQCanvas* canvas); TTQCanvasRectangle(int x, int y, int width, int height, TTQCanvas* canvas); ~TTQCanvasRectangle(); int width() const; int height() const; void setSize(int w, int h); TTQSize size() const { return TTQSize(w,h); } TTQPointArray areaPoints() const; TTQRect rect() const { return TTQRect(int(x()),int(y()),w,h); } bool collidesWith( const TTQCanvasItem* ) const; int rtti() const; static int RTTI; protected: void drawShape(TTQPainter &); TTQPointArray chunks() const; private: bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const; int w, h; }; class TQM_EXPORT_CANVAS TTQCanvasPolygon : public TQCanvasPolygonalItem { public: TTQCanvasPolygon(TTQCanvas* canvas); ~TTQCanvasPolygon(); void setPoints(TTQPointArray); TTQPointArray points() const; void moveBy(double dx, double dy); TTQPointArray areaPoints() const; int rtti() const; static int RTTI; protected: void drawShape(TTQPainter &); TTQPointArray poly; }; class TQM_EXPORT_CANVAS TTQCanvasSpline : public TQCanvasPolygon { public: TTQCanvasSpline(TTQCanvas* canvas); ~TTQCanvasSpline(); void setControlPoints(TTQPointArray, bool closed=TRUE); TTQPointArray controlPoints() const; bool closed() const; int rtti() const; static int RTTI; private: void recalcPoly(); TTQPointArray bez; bool cl; }; class TQM_EXPORT_CANVAS TTQCanvasLine : public TQCanvasPolygonalItem { public: TTQCanvasLine(TTQCanvas* canvas); ~TTQCanvasLine(); void setPoints(int x1, int y1, int x2, int y2); TTQPoint startPoint() const { return TTQPoint(x1,y1); } TTQPoint endPoint() const { return TTQPoint(x2,y2); } int rtti() const; static int RTTI; void setPen(TTQPen p); protected: void drawShape(TTQPainter &); TTQPointArray areaPoints() const; private: int x1,y1,x2,y2; }; class TQM_EXPORT_CANVAS TTQCanvasEllipse : public TQCanvasPolygonalItem { public: TTQCanvasEllipse( TTQCanvas* canvas ); TTQCanvasEllipse( int width, int height, TTQCanvas* canvas ); TTQCanvasEllipse( int width, int height, int startangle, int angle, TTQCanvas* canvas ); ~TTQCanvasEllipse(); int width() const; int height() const; void setSize(int w, int h); void setAngles(int start, int length); int angleStart() const { return a1; } int angleLength() const { return a2; } TTQPointArray areaPoints() const; bool collidesWith( const TTQCanvasItem* ) const; int rtti() const; static int RTTI; protected: void drawShape(TTQPainter &); private: bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const; int w, h; int a1, a2; }; class TTQCanvasTextExtra; class TQM_EXPORT_CANVAS TTQCanvasText : public TQCanvasItem { public: TTQCanvasText(TTQCanvas* canvas); TTQCanvasText(const TTQString&, TTQCanvas* canvas); TTQCanvasText(const TTQString&, TTQFont, TTQCanvas* canvas); virtual ~TTQCanvasText(); void setText( const TTQString& ); void setFont( const TTQFont& ); void setColor( const TTQColor& ); TTQString text() const; TTQFont font() const; TTQColor color() const; void moveBy(double dx, double dy); int textFlags() const { return flags; } void setTextFlags(int); TTQRect boundingRect() const; bool collidesWith( const TTQCanvasItem* ) const; int rtti() const; static int RTTI; protected: virtual void draw(TTQPainter&); private: #if defined(Q_DISABLE_COPY) TTQCanvasText( const TTQCanvasText & ); TTQCanvasText &operator=( const TTQCanvasText & ); #endif void addToChunks(); void removeFromChunks(); void changeChunks(); void setRect(); TTQRect brect; TTQString txt; int flags; TTQFont fnt; TTQColor col; TTQCanvasTextExtra* extra; bool collidesWith( const TTQCanvasSprite*, const TTQCanvasPolygonalItem*, const TTQCanvasRectangle*, const TTQCanvasEllipse*, const TTQCanvasText* ) const; }; #define Q_DEFINED_QCANVAS #include "tqwinexport.h" #endif // QT_NO_CANVAS #endif // TQCANVAS_H