📄 q3canvas.h
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the Qt3Support module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file. Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef Q3CANVAS_H#define Q3CANVAS_H#include <Qt3Support/q3scrollview.h>#include <QtGui/qpixmap.h>#include <Qt3Support/q3ptrlist.h>#include <QtGui/qbrush.h>#include <QtGui/qpen.h>#include <Qt3Support/q3valuelist.h>#include <Qt3Support/q3pointarray.h>QT_BEGIN_HEADERQT_MODULE(Qt3Support)class Q3CanvasSprite;class Q3CanvasPolygonalItem;class Q3CanvasRectangle;class Q3CanvasPolygon;class Q3CanvasEllipse;class Q3CanvasText;class Q3CanvasLine;class Q3CanvasChunk;class Q3Canvas;class Q3CanvasItem;class Q3CanvasView;class Q3CanvasPixmap;class Q_COMPAT_EXPORT Q3CanvasItemList : public Q3ValueList<Q3CanvasItem*> {public: void sort(); void drawUnique(QPainter& painter); Q3CanvasItemList operator+(const Q3CanvasItemList &l) const;};class Q3CanvasItemExtra;class Q_COMPAT_EXPORT Q3CanvasItem{public: Q3CanvasItem(Q3Canvas* canvas); virtual ~Q3CanvasItem(); 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 Q3CanvasItem*) const=0; Q3CanvasItemList collisions(bool exact /* NO DEFAULT */) const; virtual void setCanvas(Q3Canvas*); virtual void draw(QPainter&)=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; } bool visible() const { return (bool)vis; } bool selected() const { return (bool)sel; } bool enabled() const { return (bool)ena; } bool active() const { return (bool)act; } 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 QRect boundingRect() const=0; virtual QRect boundingRectAdvanced() const; Q3Canvas* canvas() const { return cnv; }protected: void update() { changeChunks(); }private: // For friendly subclasses... friend class Q3CanvasPolygonalItem; friend class Q3CanvasSprite; friend class Q3CanvasRectangle; friend class Q3CanvasPolygon; friend class Q3CanvasEllipse; friend class Q3CanvasText; friend class Q3CanvasLine; virtual Q3PointArray chunks() const; virtual void addToChunks(); virtual void removeFromChunks(); virtual void changeChunks(); virtual bool collidesWith(const Q3CanvasSprite*, const Q3CanvasPolygonalItem*, const Q3CanvasRectangle*, const Q3CanvasEllipse*, const Q3CanvasText*) const = 0; // End of friend stuff Q3Canvas* cnv; static Q3Canvas* current_canvas; double myx,myy,myz; Q3CanvasItemExtra *ext; Q3CanvasItemExtra& extra(); uint ani:1; uint vis:1; uint val:1; uint sel:1; uint ena:1; uint act:1;};class Q3CanvasData;class Q_COMPAT_EXPORT Q3Canvas : public QObject{ Q_OBJECTpublic: Q3Canvas(QObject* parent = 0, const char* name = 0); Q3Canvas(int w, int h); Q3Canvas(QPixmap p, int h, int v, int tilewidth, int tileheight); virtual ~Q3Canvas(); virtual void setTiles(QPixmap tiles, int h, int v, int tilewidth, int tileheight); virtual void setBackgroundPixmap(const QPixmap& p); QPixmap backgroundPixmap() const; virtual void setBackgroundColor(const QColor& c); QColor 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; } QSize size() const { return QSize(awidth,aheight); } QRect rect() const { return QRect(0, 0, awidth, aheight); } bool onCanvas(int x, int y) const { return x>=0 && y>=0 && x<awidth && y<aheight; } bool onCanvas(const QPoint& p) const { return onCanvas(p.x(),p.y()); } bool validChunk(int x, int y) const { return x>=0 && y>=0 && x<chwidth && y<chheight; } bool validChunk(const QPoint& p) const { return validChunk(p.x(),p.y()); } int chunkSize() const { return chunksize; } virtual void retune(int chunksize, int maxclusters=100); bool sameChunk(int x1, int y1, int x2, int y2) const { return x1/chunksize==x2/chunksize && y1/chunksize==y2/chunksize; } virtual void setChangedChunk(int i, int j); virtual void setChangedChunkContaining(int x, int y); virtual void setAllChanged(); virtual void setChanged(const QRect& area); virtual void setUnchanged(const QRect& area); // These call setChangedChunk. void addItemToChunk(Q3CanvasItem*, int i, int j); void removeItemFromChunk(Q3CanvasItem*, int i, int j); void addItemToChunkContaining(Q3CanvasItem*, int x, int y); void removeItemFromChunkContaining(Q3CanvasItem*, int x, int y); Q3CanvasItemList allItems(); Q3CanvasItemList collisions(const QPoint&) const; Q3CanvasItemList collisions(const QRect&) const; Q3CanvasItemList collisions(const Q3PointArray& pa, const Q3CanvasItem* item, bool exact) const; void drawArea(const QRect&, QPainter* p, bool double_buffer=false); // These are for Q3CanvasView to call virtual void addView(Q3CanvasView*); virtual void removeView(Q3CanvasView*); void drawCanvasArea(const QRect&, QPainter* p=0, bool double_buffer=true); void drawViewArea(Q3CanvasView* view, QPainter* p, const QRect& r, bool dbuf); // These are for Q3CanvasItem to call virtual void addItem(Q3CanvasItem*); virtual void addAnimation(Q3CanvasItem*); virtual void removeItem(Q3CanvasItem*); virtual void removeAnimation(Q3CanvasItem*); virtual void setAdvancePeriod(int ms); virtual void setUpdatePeriod(int ms); virtual void setDoubleBuffering(bool y);Q_SIGNALS: void resized();public Q_SLOTS: virtual void advance(); virtual void update();protected: virtual void drawBackground(QPainter&, const QRect& area); virtual void drawForeground(QPainter&, const QRect& area);private: void init(int w, int h, int chunksze=16, int maxclust=100); Q3CanvasChunk& chunk(int i, int j) const; Q3CanvasChunk& chunkContaining(int x, int y) const; QRect changeBounds(const QRect& inarea); void ensureOffScrSize(int osw, int osh); QPixmap offscr; int awidth,aheight; int chunksize; int maxclusters; int chwidth,chheight; Q3CanvasChunk* chunks; Q3CanvasData* d; void initTiles(QPixmap p, int h, int v, int tilewidth, int tileheight); ushort *grid; ushort htiles; ushort vtiles; ushort tilew; ushort tileh; bool oneone; QPixmap pm; QTimer* update_timer; QColor bgcolor; bool debug_redraw_areas; bool dblbuf; friend void qt_unview(Q3Canvas* c); Q_DISABLE_COPY(Q3Canvas)};class Q3CanvasViewData;class Q_COMPAT_EXPORT Q3CanvasView : public Q3ScrollView{ Q_OBJECTpublic: Q3CanvasView(QWidget* parent=0, const char* name=0, Qt::WindowFlags f=0); Q3CanvasView(Q3Canvas* viewing, QWidget* parent=0, const char* name=0, Qt::WindowFlags f=0); ~Q3CanvasView(); Q3Canvas* canvas() const { return viewing; } void setCanvas(Q3Canvas* v); const QMatrix &worldMatrix() const; const QMatrix &inverseWorldMatrix() const; bool setWorldMatrix(const QMatrix &);protected: void drawContents(QPainter *p, int cx, int cy, int cw, int ch); QSize sizeHint() const;private: friend class Q3Canvas; void drawContents(QPainter*); Q3Canvas* viewing; Q3CanvasViewData* d; friend void qt_unview(Q3Canvas* c);private Q_SLOTS: void updateContentsSize();private: Q_DISABLE_COPY(Q3CanvasView)};class Q_COMPAT_EXPORT Q3CanvasPixmap : public QPixmap{public:#ifndef QT_NO_IMAGEIO Q3CanvasPixmap(const QString& datafilename);#endif Q3CanvasPixmap(const QImage& image); Q3CanvasPixmap(const QPixmap&, const QPoint& hotspot); ~Q3CanvasPixmap(); int offsetX() const { return hotx; } int offsetY() const { return hoty; } void setOffset(int x, int y) { hotx = x; hoty = y; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -