My Project
PaintEngine.h
1 #pragma once
2 #include "ParaRegion.h"
3 #include "qtransform.h"
4 
5 namespace ParaEngine
6 {
7  class CPaintDevice;
8  class CPaintEngineState;
9  class CFontEngine;
10  class CPainter;
11  class QLineF;
12  class QLine;
13  class CPainterPath;
14  class CPainterState;
15  class CPolygonF;
16  struct TextureEntity;
17  struct SpriteFontEntity;
18  class CTextItem;
19  class ImageEntity;
20 
35  {
36  public:
37  enum DirtyFlags {
38  DirtyPen = 0x0001,
39  DirtyBrush = 0x0002,
40  DirtyBrushOrigin = 0x0004,
41  DirtyFont = 0x0008,
42  DirtyBackground = 0x0010,
43  DirtyBackgroundMode = 0x0020,
44  DirtyTransform = 0x0040,
45  DirtyClipRegion = 0x0080,
46  DirtyClipPath = 0x0100,
47  DirtyHints = 0x0200,
48  DirtyCompositionMode = 0x0400,
49  DirtyClipEnabled = 0x0800,
50  DirtyOpacity = 0x1000,
51 
52  AllDirty = 0xffff
53  };
54 
55  enum PolygonDrawMode {
56  OddEvenMode,
57  WindingMode,
58  ConvexMode,
59  PolylineMode
60  };
61 
62  public:
63  CPaintEngine();
64  virtual ~CPaintEngine();
65 
66  virtual CPainterState *createState(CPainterState *orig) const;
67  virtual void setState(CPainterState *s);
68  CPainterState *GetState();
69  const CPainterState *GetState() const;
70 
71  bool isActive() const { return active; }
72  void setActive(bool newState) { active = newState; }
73 
74  virtual bool begin(CPaintDevice *pdev) = 0;
75  virtual bool end() = 0;
76  virtual void Flush();
77 
78  virtual void ApplyStateChanges();
79 
80  virtual void updateState(const CPaintEngineState &state) = 0;
81 
82  virtual void drawRects(const QRect *rects, int rectCount);
83  virtual void drawRects(const QRectF *rects, int rectCount);
84 
85  virtual void drawLines(const QLine *lines, int lineCount);
86  virtual void drawLines(const QLineF *lines, int lineCount);
87  virtual void drawLines(const Vector3 *vertices, int lineCount);
88 
89  virtual void drawEllipse(const QRectF &r);
90  virtual void drawEllipse(const QRect &r);
91 
92  virtual void drawTriangles(const Vector3* vertices, int nTriangleCount);
93 
94  virtual void drawPath(const CPainterPath &path);
95 
96  virtual void drawPoints(const QPointF *points, int pointCount);
97  virtual void drawPoints(const QPoint *points, int pointCount);
98 
99  virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
100  virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
101 
102  virtual void drawPixmap(const QRectF &r, const TextureEntity &pm, const QRectF &sr) = 0;
103  virtual void drawTextItem(const QPointF &p, const CTextItem &textItem);
104  virtual void drawImage(const QRectF &r, const ImageEntity &pm, const QRectF &sr);
105 
106  void setPaintDevice(CPaintDevice *device);
107  CPaintDevice *paintDevice() const;
108 
109  void setSystemClip(const QRegion &baseClip);
110  QRegion systemClip() const;
111 
112  void setSystemRect(const QRect &rect);
113  QRect systemRect() const;
114 
115 
116  virtual QPoint coordinateOffset() const;
117 
118 
119  inline bool testDirty(DirtyFlags df);
120  inline void setDirty(DirtyFlags df);
121  inline void clearDirty(DirtyFlags df);
122  CPainter *painter() const;
123 
124 
125  virtual bool IsScissorRectSupported() const { return false; };
126  virtual bool IsStencilSupported() const { return false; };
127  virtual void clip(const QRect & rect, ClipOperation op = ReplaceClip);
128 
129 
133  virtual void SetUse3DTransform(bool bUse3DSpaceTransform){};
134 
136  virtual bool IsUse3DTransform(){ return false; };
137  public:
139  // following is for backward compatibility with old GUIResource API.
141  virtual HRESULT DrawRect(const RECT* rect, Color color, float depth){ return S_OK; };
142 
143  virtual HRESULT DrawQuad(TextureEntity* pTexture, const RECT* pSrcRect, const Vector3* vCenter, const Vector3* pPosition, Color c){ return S_OK; };
144 
145  virtual HRESULT drawText(SpriteFontEntity* pFont, const char* strText, int nCount, RECT* rect, DWORD dwTextFormat, DWORD textColor){ return S_OK; };
146  virtual HRESULT drawText(SpriteFontEntity* pFont, const char16_t* strText, int nCount, RECT* rect, DWORD dwTextFormat, DWORD textColor){ return S_OK; };
147  private:
148  void setAutoDestruct(bool autoDestr) { selfDestruct = autoDestr; }
149  bool autoDestruct() const { return selfDestruct; }
150 
151  virtual void transformChanged(){};
152  virtual void penChanged(){};
153  virtual void brushChanged(){};
154  virtual void brushOriginChanged(){};
155  virtual void opacityChanged(){};
156  virtual void clipEnabledChanged(){};
157  virtual void transformModeChanged(){};
158  virtual void compositionModeChanged(){};
159 
160  protected:
161  friend class CPainter;
162 
163  CPaintDevice *pdev;
164  CPaintEngineState *state;
165  bool active : 1;
166  bool selfDestruct : 1;
167  bool hasSystemTransform : 1;
168  bool hasSystemViewport : 1;
169 
170  QRegion m_systemClip;
171  QRect m_systemRect;
172  QRegion systemViewport;
173  QTransform systemTransform;
174  CPaintDevice *currentClipDevice;
175  };
176 
179  {
180  public:
181  CPaintEngine::DirtyFlags state() const { return (CPaintEngine::DirtyFlags)dirtyFlags; }
182 
183  CPainter *painter() const;
184 
185  protected:
186  friend class CPaintEngine;
187  friend class CPainter;
188 
190  uint32 dirtyFlags;
191  };
192 
193 
194  inline bool CPaintEngine::testDirty(DirtyFlags df) {
195  PE_ASSERT(state);
196  return ((state->dirtyFlags & df) != 0);
197  }
198 
199  inline void CPaintEngine::setDirty(DirtyFlags df) {
200  PE_ASSERT(state);
201  state->dirtyFlags |= df;
202  }
203 
204  inline void CPaintEngine::clearDirty(DirtyFlags df)
205  {
206  PE_ASSERT(state);
207  state->dirtyFlags &= ~static_cast<uint32>(df);
208  }
209 }
210 
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats whic...
Definition: TextureEntity.h:29
virtual void SetUse3DTransform(bool bUse3DSpaceTransform)
by default, transforms are in 2d screen space.
Definition: PaintEngine.h:133
Definition: ParaPoint.h:203
different physics engine has different winding order.
Definition: EventBinding.h:32
virtual bool IsUse3DTransform()
return false by default.
Definition: PaintEngine.h:136
Definition: ManagedDef.h:18
Definition: ParaLine.h:151
Definition: ParaRect.h:517
when concerting QRect with QRectF and RECT, we ensure that their left, top and width, height are the same.
Definition: ParaRect.h:16
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
Definition: ParaLine.h:6
Definition: PainterState.h:25
Definition: qtransform.h:14
base class for a surface to paint to.
Definition: Painter.h:38
Definition: ParaPoint.h:5
uint32 dirtyFlags
type of CPaintEngine::DirtyFlags
Definition: PaintEngine.h:190
The CPaintEngine class provides an abstract definition of how CPainter draws to a given device on a g...
Definition: PaintEngine.h:34
Definition: ParaRegion.h:7
base class for a surface to paint to.
Definition: PaintDevice.h:10
painter state, such as selected pen, brush, etc.
Definition: PaintEngine.h:178
Definition: ParaColor.h:275
Unlike TextureEntity, ImageEntity is a device independent entity in memory.
Definition: ImageEntity.h:9
Definition: SpriteFontEntity.h:26