My Project
Painter.h
1 #pragma once
2 #include "qtransform.h"
3 #include "ParaRect.h"
4 #include "PaintEngine.h"
5 #include "IAttributeFields.h"
6 #include "2dengine/GUIResource.h"
7 #include "qfont.h"
8 #include "qpen.h"
9 #include "qbrush.h"
10 #include "qtextoption.h"
11 #include "qpolygon.h"
12 
13 namespace ParaEngine
14 {
15  class CPaintEngine;
16  class CPaintDevice;
17  class CPainterState;
18  struct CPainterDummyState;
19  class QFont;
20  class QBrush;
21  class QPen;
22  class QPainterPath;
23  class CBaseObject;
24 
38  class CPainter : public IAttributeFields
39  {
40  public:
41  CPainter();
42  explicit CPainter(CPaintDevice * pd);
43  virtual ~CPainter();
44  ATTRIBUTE_DEFINE_CLASS(CPainter);
45 
47  virtual int InstallFields(CAttributeClass* pClass, bool bOverride);
48 
49  ATTRIBUTE_METHOD1(CPainter, GetCompositionMode_s, int*) { *p1 = cls->compositionMode(); return S_OK; }
50  ATTRIBUTE_METHOD1(CPainter, SetCompositionMode_s, int) { cls->setCompositionMode((CompositionMode)p1); return S_OK; }
51 
52  ATTRIBUTE_METHOD1(CPainter, GetOpacity_s, float*) { *p1 = cls->opacity(); return S_OK; }
53  ATTRIBUTE_METHOD1(CPainter, SetOpacity_s, float) { cls->setOpacity(p1); return S_OK; }
54 
55  ATTRIBUTE_METHOD1(CPainter, IsAutoLineWidth_s, bool*) { *p1 = cls->IsAutoLineWidth(); return S_OK; }
56  ATTRIBUTE_METHOD1(CPainter, EnableAutoLineWidth_s, bool) { cls->EnableAutoLineWidth(p1); return S_OK; }
57 
58  ATTRIBUTE_METHOD1(CPainter, IsSpriteUseWorldMatrix_s, bool*) { *p1 = cls->IsSpriteUseWorldMatrix(); return S_OK; }
59  ATTRIBUTE_METHOD1(CPainter, SetSpriteUseWorldMatrix_s, bool) { cls->SetSpriteUseWorldMatrix(p1); return S_OK; }
60 
61  ATTRIBUTE_METHOD(CPainter, Save_s) { cls->save(); return S_OK; }
62  ATTRIBUTE_METHOD(CPainter, Restore_s) { cls->restore(); return S_OK; }
63  ATTRIBUTE_METHOD(CPainter, Flush_s) { cls->Flush(); return S_OK; }
64  ATTRIBUTE_METHOD(CPainter, BeginNativePainting_s) { cls->beginNativePainting(); return S_OK; }
65  ATTRIBUTE_METHOD(CPainter, EndNativePainting_s) { cls->endNativePainting(); return S_OK; }
66  ATTRIBUTE_METHOD(CPainter, ResetTransform_s) { cls->resetTransform(); return S_OK; }
67 
68  ATTRIBUTE_METHOD1(CPainter, GetMatrixMode_s, int*) { *p1 = cls->GetMatrixMode(); return S_OK; }
69  ATTRIBUTE_METHOD1(CPainter, SetMatrixMode_s, int) { cls->SetMatrixMode(p1); return S_OK; }
70 
71  ATTRIBUTE_METHOD(CPainter, PushMatrix_s) { cls->PushMatrix(); return S_OK; }
72  ATTRIBUTE_METHOD(CPainter, PopMatrix_s) { cls->PopMatrix(); return S_OK; }
73  ATTRIBUTE_METHOD(CPainter, LoadCurrentMatrix_s) { cls->LoadCurrentMatrix(); return S_OK; }
74  ATTRIBUTE_METHOD(CPainter, LoadIdentityMatrix_s) { cls->LoadIdentityMatrix(); return S_OK; }
75  ATTRIBUTE_METHOD(CPainter, LoadBillboardMatrix_s) { cls->LoadBillboardMatrix(); return S_OK; }
76 
77  ATTRIBUTE_METHOD3(CPainter, TranslateMatrix_s, float) { cls->TranslateMatrix(p1, p2, p3); return S_OK; }
78  ATTRIBUTE_METHOD4(CPainter, RotateMatrix_s, float) { cls->RotateMatrix(p1, p2, p3, p4); return S_OK; }
79  ATTRIBUTE_METHOD3(CPainter, ScaleMatrix_s, float) { cls->ScaleMatrix(p1, p2, p3); return S_OK; }
80 
81  ATTRIBUTE_METHOD1(CPainter, LoadMatrix_s, const Matrix4&) { cls->LoadMatrix(p1); return S_OK; }
82  ATTRIBUTE_METHOD1(CPainter, MultiplyMatrix_s, const Matrix4&) { cls->MultiplyMatrix(p1); return S_OK; }
83 
84  ATTRIBUTE_METHOD1(CPainter, GetCurrentMatrix_s, Matrix4*) { *p1 = cls->GetCurMatrix(); return S_OK; }
85  ATTRIBUTE_METHOD1(CPainter, GetScaling_s, Vector3*) { *p1 = cls->GetScaling(); return S_OK; }
86 
87 
88  public:
94  CPaintDevice *device() const;
95 
96  bool begin(CPaintDevice * pd);
97  bool end();
98  bool isActive() const;
99 
100  void initFrom(const CPaintDevice *device);
101 
102  enum CompositionMode {
103  CompositionMode_SourceBlend,
104  CompositionMode_SourceOver,
105  CompositionMode_DestinationOver,
106  CompositionMode_Clear,
107  CompositionMode_Source,
108  CompositionMode_Destination,
109  CompositionMode_SourceIn,
110  CompositionMode_DestinationIn,
111  CompositionMode_SourceOut,
112  CompositionMode_DestinationOut,
113  CompositionMode_SourceAtop,
114  CompositionMode_DestinationAtop,
115  CompositionMode_Xor,
116  CompositionMode_Plus,
117  CompositionMode_PlusSourceBlend,
118  // ROPs
119  RasterOp_SourceOrDestination,
120  RasterOp_SourceAndDestination,
121  RasterOp_SourceXorDestination,
122  RasterOp_NotSourceAndNotDestination,
123  RasterOp_NotSourceOrNotDestination,
124  RasterOp_NotSourceXorDestination,
125  RasterOp_NotSource,
126  RasterOp_NotSourceAndDestination,
127  RasterOp_SourceAndNotDestination,
128  RasterOp_NotSourceOrDestination,
129  RasterOp_SourceOrNotDestination,
130  RasterOp_ClearDestination,
131  RasterOp_SetDestination,
132  RasterOp_NotDestination
133  };
134 
135  CPaintEngine *paintEngine() const;
136  bool IsScissorRectSupported() const;
137  bool IsStencilSupported() const;
138 
139  //
140  // state functions
141  //
142  void setCompositionMode(CompositionMode mode);
143  CompositionMode compositionMode() const;
147  int GetPendingAssetCount();
148 
152  bool IsAutoLineWidth() const;
153  void EnableAutoLineWidth(bool val);
154 
158  float FromUnitSpaceX(float fUnitspaceX);
159  float FromUnitSpaceY(float fUnitspaceY);
160 
161  const QFont &font() const;
162  void setFont(const QFont &f);
163 
164  void setPen(const Color &color);
165  void setPen(const QPen &pen);
166  void setPen(PenStyle style);
167  const QPen &pen() const;
168 
169  void setBrush(const QBrush &brush);
170  void setBrush(BrushStyle style);
171  const QBrush &brush() const;
172 
173  QPoint brushOrigin() const;
174  inline void setBrushOrigin(int x, int y);
175  inline void setBrushOrigin(const QPoint &);
176  void setBrushOrigin(const QPointF &);
177 
178  void setBackground(const QBrush &bg);
179  const QBrush &background() const;
180 
181  float opacity() const;
182  void setOpacity(float opacity);
183 
184  // Clip functions
185  QRegion clipRegion() const;
186  QPainterPath clipPath() const;
187 
188  void setClipRect(const QRectF &, ClipOperation op = ReplaceClip);
189  void setClipRect(const QRect &, ClipOperation op = ReplaceClip);
190  inline void setClipRect(int x, int y, int w, int h, ClipOperation op = ReplaceClip);
191 
192  void setClipRegion(const QRegion &, ClipOperation op = ReplaceClip);
193 
194  void setClipPath(const QPainterPath &path, ClipOperation op = ReplaceClip);
195 
196  void setClipping(bool enable);
197  bool hasClipping() const;
198 
199  QRectF clipBoundingRect() const;
200 
201  void save();
202  void restore();
203 
207  void beginNativePainting();
208  void endNativePainting();
209 
210  void Flush();
211 
212  //
213  // transforms
214  //
218  void setWorldTransform(const QTransform &matrix, bool combine = false);
219  const QTransform &worldTransform() const;
220  const QTransform &deviceTransform() const;
224  void resetTransform();
228 
229  void setWorldMatrixEnabled(bool enabled);
230  bool worldMatrixEnabled() const;
231 
232  void scale(float sx, float sy);
233  void shear(float sh, float sv);
234  void rotate(float a);
235 
236  void translate(const QPointF &offset);
237  inline void translate(const QPoint &offset);
238  inline void translate(float dx, float dy);
239 
240  QRect viewport() const;
241  void setViewport(const QRect &viewport);
242 
243  QPointF UIScaling() const;
245  void setUIScaling(const QPointF &uiScaling);
246 
247  void setViewTransformEnabled(bool enable);
248  bool viewTransformEnabled() const;
249 
250 
251  //
252  // draw shapes
253  //
254  void drawPoints(const QPointF *points, int pointCount);
255  void drawPoints(const QPoint *points, int pointCount);
256  void drawLines(const QLineF *lines, int lineCount);
257  void drawLines(const QPointF *pointPairs, int lineCount);
258  void drawLines(const QLine *lines, int lineCount);
259  void drawLines(const QPoint *pointPairs, int lineCount);
260  void drawLines(const Vector3* vertices, int nLineCount); // 3d lines
261  void drawRects(const QRectF *rects, int rectCount);
262  void drawRects(const QRect *rects, int rectCount);
263 
264  void drawTriangles(const Vector3* vertices, int nTriangleCount);
265 
266 
267  inline void drawPoint(const QPointF &pt);
268  inline void drawPoint(const QPoint &p);
269  inline void drawPoint(int x, int y);
270 
271  inline void drawLine(const QLineF &line);
272  inline void drawLine(const QLine &line);
273  inline void drawLine(int x1, int y1, int x2, int y2);
274  inline void drawLine(const QPoint &p1, const QPoint &p2);
275  inline void drawLine(const QPointF &p1, const QPointF &p2);
276  inline void drawLines(const std::vector<QLineF> &lines);
277  inline void drawLines(const std::vector<QPointF> &pointPairs);
278  inline void drawLines(const std::vector<QLine> &lines);
279  inline void drawLines(const std::vector<QPoint> &pointPairs);
280 
281  inline void drawRect(const QRectF &rect);
282  inline void drawRect(int x1, int y1, int w, int h);
283  inline void drawRect(const QRect &rect);
284  inline void drawRects(const std::vector<QRectF> &rectangles);
285  inline void drawRects(const std::vector<QRect> &rectangles);
286 
287  void drawPolyline(const QPointF *points, int pointCount);
288  inline void drawPolyline(const QPolygonF &polyline);
289  void drawPolyline(const QPoint *points, int pointCount);
290  inline void drawPolyline(const QPolygon &polygon);
291 
292  void drawPolygon(const QPointF *points, int pointCount, FillRule fillRule = OddEvenFill);
293  inline void drawPolygon(const QPolygonF &polygon, FillRule fillRule = OddEvenFill);
294  void drawPolygon(const QPoint *points, int pointCount, FillRule fillRule = OddEvenFill);
295  inline void drawPolygon(const QPolygon &polygon, FillRule fillRule = OddEvenFill);
296 
297  //
298  // draw images
299  //
300  void drawTexture(const QPointF &p, TextureEntity* pTexture, float fDepth = 0.f);
301  void drawTexture(const QRectF &targetRect, TextureEntity* pTexture, const QRectF &sourceRect, float fDepth = 0.f);
302 
303  inline void drawTexture(const QRect &targetRect, TextureEntity* pTexture, const QRect &sourceRect, float fDepth = 0.f);
304  inline void drawTexture(int x, int y, int w, int h, TextureEntity* pTexture, int sx, int sy, int sw, int sh, float fDepth = 0.f);
305  inline void drawTexture(int x, int y, TextureEntity* pTexture, int sx, int sy, int sw, int sh, float fDepth = 0.f);
306  inline void drawTexture(const QPointF &p, TextureEntity* pTexture, const QRectF &sr, float fDepth = 0.f);
307  inline void drawTexture(const QPoint &p, TextureEntity* pTexture, const QRect &sr, float fDepth = 0.f);
308  inline void drawTexture(const QPoint &p, TextureEntity* pTexture, float fDepth = 0.f);
309  inline void drawTexture(int x, int y, TextureEntity* pTexture, float fDepth = 0.f);
310  inline void drawTexture(const QRect &r, TextureEntity* pTexture, float fDepth = 0.f);
311  inline void drawTexture(int x, int y, int w, int h, TextureEntity* pTexture, float fDepth = 0.f);
312 
313  //
314  // draw text
315  //
316  void drawText(const QPointF &p, const std::string &s);
317  void drawText(const QRectF &r, const std::string &text, const QTextOption &o = QTextOption());
318 
319  inline void drawText(const QPoint &p, const std::string &s);
320  inline void drawText(int x, int y, const std::string &s);
321 
322  //
323  // scene object
324  //
325 
330  void DrawSceneObject(CBaseObject* pObj, int nOption = 0);
331 
332  public:
334  // following is for backward compatibility with old GUIResource API, which is only used by system drawing of GUIBase controls.
336 
338  void SetSpriteTransform(const Matrix4 * pMatrix = NULL);
339 
343  HRESULT DrawSprite(GUITextureElement* pElement, RECT *prcDest, float depth);
344  HRESULT DrawSprite(GUITextureElement* pElement, RECT *prcDest, Matrix4 matTransform, float depth);
348  HRESULT DrawSprite(GUITextureElement* pElement, RECT *prcDest, const Vector2& vRotOrigin, float fRadian, const Vector2* vScaling, const Vector2* vTranslation, const DWORD* dwColorMask, float depth);
349 
353  HRESULT DrawSprite(GUITextureElement* pElement, RECT *prcDest, int n, float depth);
354  HRESULT DrawRect(RECT* pRect, Color color, float depth);
355  HRESULT DrawText(const char16_t* strText, GUIFontElement* pElement, RECT* prcDest, float depth, bool bShadow = false, int nCount = -1, int shadowQuality = 0, Color shadowColor = 0);
356 
360  HRESULT DrawText(const char16_t* strText, GUIFontElement* pElement, RECT* prcDest, const Vector2& vRotOrigin,
361  float fRadian, const Vector2* vScaling, const Vector2* vTranslation, const DWORD* dwColorMask,
362  float depth, bool bShadow = false, int nCount = -1, int shadowQuality = 0, Color shadowColor = 0);
363 
364  HRESULT DrawText(const char16_t* strText, GUIFontElement* pElement, RECT* prcDest, const Matrix4& mat, const DWORD* dwColorMask,
365  float depth, bool bShadow = false, int nCount = -1, int shadowQuality = 0, Color shadowColor = 0);
366 
367  HRESULT CalcTextRect(const char16_t* strText, GUIFontElement* pElement, RECT* prcDest, float depth, int nCount = -1);
368 
372  void SetUse3DTransform(bool bUse3DSpaceTransform);
373 
375  bool IsUse3DTransform();
376 
378  void SetSpriteUseWorldMatrix(bool bEnable);
379 
380  bool IsSpriteUseWorldMatrix();
381 
383  void SetHelperDevice(CPaintDevice * val);
384 
385  public:
389  void SetMatrixMode(int nMode);
390  int GetMatrixMode() const;
391 
393  void PushMatrix();
395  void PopMatrix();
397  void LoadCurrentMatrix();
398 
400  void LoadIdentityMatrix();
401 
403  void LoadBillboardMatrix();
404 
406  void LoadMatrix(const Matrix4& mat);
408  void MultiplyMatrix(const Matrix4& mat);
410  void TranslateMatrix(float x, float y, float z);
412  void RotateMatrix(float angle, float x, float y, float z);
414  void ScaleMatrix(float x, float y, float z);
415 
417  const ParaEngine::Matrix4& GetCurMatrix() const;
420  private:
421 
422  void updateStateImpl(CPainterState *state);
423  void updateState(CPainterState *state);
424 
425  void cleanup_painter_state();
426 
427  CPainterDummyState *fakeState() const;
428 
430  QTransform viewTransform() const;
431  void updateMatrix();
432 
433  TransformStack& GetMatrixStack();
434  private:
435  CPaintDevice *m_device;
436  CPaintDevice *original_device;
437  CPaintDevice *helper_device;
438 
439  CPaintEngine *engine;
440  CPainterState *state;
441  std::vector<CPainterState*> states;
442  bool m_bUse3DTransform;
444  int m_nMatrixMode;
446  Matrix4 m_curMatrix;
450  bool m_bAutoLineWidth;
451  };
452 
453  //
454  // inline functions
455  //
456 
457  inline void CPainter::translate(float dx, float dy)
458  {
459  translate(QPointF(dx, dy));
460  }
461 
462  inline void CPainter::translate(const QPoint &offset)
463  {
464  translate((float)offset.x(), (float)offset.y());
465  }
466 
467  inline void CPainter::drawLine(const QLineF &l)
468  {
469  drawLines(&l, 1);
470  }
471 
472  inline void CPainter::drawLine(const QLine &line)
473  {
474  drawLines(&line, 1);
475  }
476 
477  inline void CPainter::drawLine(int x1, int y1, int x2, int y2)
478  {
479  QLine l(x1, y1, x2, y2);
480  drawLines(&l, 1);
481  }
482 
483  inline void CPainter::drawLine(const QPoint &p1, const QPoint &p2)
484  {
485  QLine l(p1, p2);
486  drawLines(&l, 1);
487  }
488 
489  inline void CPainter::drawLine(const QPointF &p1, const QPointF &p2)
490  {
491  drawLine(QLineF(p1, p2));
492  }
493 
494  inline void CPainter::drawLines(const std::vector<QLineF> &lines)
495  {
496  drawLines(constVectorData(lines), lines.size());
497  }
498 
499  inline void CPainter::drawLines(const std::vector<QLine> &lines)
500  {
501  drawLines(constVectorData(lines), lines.size());
502  }
503 
504  inline void CPainter::drawLines(const std::vector<QPointF> &pointPairs)
505  {
506  drawLines(constVectorData(pointPairs), pointPairs.size() / 2);
507  }
508 
509  inline void CPainter::drawLines(const std::vector<QPoint> &pointPairs)
510  {
511  drawLines(constVectorData(pointPairs), pointPairs.size() / 2);
512  }
513 
514  inline void CPainter::drawRect(const QRectF &rect)
515  {
516  drawRects(&rect, 1);
517  }
518 
519  inline void CPainter::drawRect(int x, int y, int w, int h)
520  {
521  QRect r(x, y, w, h);
522  drawRects(&r, 1);
523  }
524 
525  inline void CPainter::drawRect(const QRect &r)
526  {
527  drawRects(&r, 1);
528  }
529 
530  inline void CPainter::drawRects(const std::vector<QRectF> &rects)
531  {
532  drawRects(constVectorData(rects), rects.size());
533  }
534 
535  inline void CPainter::drawRects(const std::vector<QRect> &rects)
536  {
537  drawRects(constVectorData(rects), rects.size());
538  }
539 
540  inline void CPainter::drawPoint(const QPointF &p)
541  {
542  drawPoints(&p, 1);
543  }
544 
545  inline void CPainter::drawPoint(int x, int y)
546  {
547  QPoint p(x, y);
548  drawPoints(&p, 1);
549  }
550 
551  inline void CPainter::drawPoint(const QPoint &p)
552  {
553  drawPoints(&p, 1);
554  }
555 
556 
557  inline void CPainter::drawPolyline(const QPolygonF &polyline)
558  {
559  drawPolyline(polyline.constData(), polyline.size());
560  }
561 
562  inline void CPainter::drawPolyline(const QPolygon &polyline)
563  {
564  drawPolyline(polyline.constData(), polyline.size());
565  }
566 
567  inline void CPainter::drawPolygon(const QPolygonF &polygon, FillRule fillRule)
568  {
569  drawPolygon(polygon.constData(), polygon.size(), fillRule);
570  }
571 
572  inline void CPainter::drawPolygon(const QPolygon &polygon, FillRule fillRule)
573  {
574  drawPolygon(polygon.constData(), polygon.size(), fillRule);
575  }
576 
577  inline void CPainter::drawTexture(const QRect &targetRect, TextureEntity* pTexture, const QRect &sourceRect, float fDepth)
578  {
579  drawTexture(QRectF(targetRect), pTexture, QRectF(sourceRect), fDepth);
580  }
581 
582  inline void CPainter::drawTexture(const QPoint &p, TextureEntity*pTexture, float fDepth)
583  {
584  drawTexture(QPointF(p), pTexture, fDepth);
585  }
586 
587  inline void CPainter::drawTexture(const QRect &r, TextureEntity*pTexture, float fDepth)
588  {
589  drawTexture(QRectF(r), pTexture, QRectF(), fDepth);
590  }
591 
592  inline void CPainter::drawTexture(int x, int y, TextureEntity*pTexture, float fDepth)
593  {
594  drawTexture(QPointF((float)x, (float)y), pTexture, fDepth);
595  }
596 
597  inline void CPainter::drawTexture(int x, int y, int w, int h, TextureEntity*pTexture, float fDepth)
598  {
599  drawTexture(QRectF((float)x, (float)y, (float)w, (float)h), pTexture, QRectF(), fDepth);
600  }
601 
602  inline void CPainter::drawTexture(int x, int y, int w, int h, TextureEntity*pTexture,
603  int sx, int sy, int sw, int sh, float fDepth)
604  {
605  drawTexture(QRectF((float)x, (float)y, (float)w, (float)h), pTexture, QRectF((float)sx, (float)sy, (float)sw, (float)sh), fDepth);
606  }
607 
608  inline void CPainter::drawTexture(int x, int y, TextureEntity*pTexture,
609  int sx, int sy, int sw, int sh, float fDepth)
610  {
611  drawTexture(QRectF((float)x, (float)y, -1, -1), pTexture, QRectF((float)sx, (float)sy, (float)sw, (float)sh), fDepth);
612  }
613 
614  inline void CPainter::drawTexture(const QPointF &p, TextureEntity*pTexture, const QRectF &sr, float fDepth)
615  {
616  drawTexture(QRectF(p.x(), p.y(), -1, -1), pTexture, sr, fDepth);
617  }
618 
619  inline void CPainter::drawTexture(const QPoint &p, TextureEntity*pTexture, const QRect &sr, float fDepth)
620  {
621  drawTexture(QRectF((float)p.x(), (float)p.y(), -1.f, -1.f), pTexture, sr, fDepth);
622  }
623 
624  inline void CPainter::drawText(const QPoint &p, const std::string &s)
625  {
626  drawText(QPointF(p), s);
627  }
628 
629  inline void CPainter::drawText(int x, int y, const std::string &s)
630  {
631  drawText(QPointF((float)x, (float)y), s);
632  }
633 
634  inline void CPainter::setBrushOrigin(int x, int y)
635  {
636  setBrushOrigin(QPoint(x, y));
637  }
638 
639  inline void CPainter::setBrushOrigin(const QPoint &p)
640  {
641  setBrushOrigin(QPointF(p));
642  }
643 
644  inline void CPainter::setClipRect(int x, int y, int w, int h, ClipOperation op)
645  {
646  setClipRect(QRect(x, y, w, h), op);
647  }
648 
651  {
652  public:
653  CompositionModeStack(CPainter* pPainter, CPainter::CompositionMode newMode, bool bAutoBegin = true)
654  :m_painter(pPainter), m_newBlendMode(newMode), m_bIsBegin(false)
655  {
656  if (bAutoBegin)
657  Begin();
658  }
660  {
661  if (m_bIsBegin)
662  End();
663  }
664  void Begin()
665  {
666  if (!m_bIsBegin)
667  {
668  m_lastBlendMode = m_painter->compositionMode();
669  m_painter->setCompositionMode(m_newBlendMode);
670  m_bIsBegin = true;
671  }
672  }
673  void End()
674  {
675  if (m_bIsBegin)
676  {
677  m_painter->setCompositionMode(m_lastBlendMode);
678  m_bIsBegin = false;
679  }
680  }
681  public:
682  CPainter::CompositionMode m_lastBlendMode;
683  CPainter::CompositionMode m_newBlendMode;
684  CPainter* m_painter;
685  bool m_bIsBegin;
686  };
687 
688 }
689 
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats whic...
Definition: TextureEntity.h:29
void setWorldTransform(const QTransform &matrix, bool combine=false)
Sets the world transformation matrix.
Definition: Painter.cpp:1043
an attribute class is a collection of attribute fields.
Definition: AttributeClass.h:10
void ScaleMatrix(float x, float y, float z)
multiply the current matrix by a scaling matrix
Definition: Painter.cpp:1528
The QPen class defines how a CPainter should draw lines and outlines of shapes.
Definition: qpen.h:13
Definition: combase.h:159
float FromUnitSpaceX(float fUnitspaceX)
get screen space coordinate from a unit space x parameter.
Definition: Painter.cpp:310
Definition: ParaPoint.h:203
for ease of push/pop composition mode.
Definition: Painter.h:650
different physics engine has different winding order.
Definition: EventBinding.h:32
void SetHelperDevice(CPaintDevice *val)
currently only used for text size calculation.
Definition: Painter.cpp:334
void SetUse3DTransform(bool bUse3DSpaceTransform)
by default, transforms are in 2d screen space.
Definition: Painter.cpp:339
CPaintDevice * device() const
Definition: Painter.cpp:191
void LoadBillboardMatrix()
load a matrix so that everything rendered faces the camera.
Definition: Painter.cpp:1485
Definition: ManagedDef.h:18
Definition: ParaLine.h:151
Definition: ParaRect.h:517
void TranslateMatrix(float x, float y, float z)
multiply the current matrix by a translation matrix
Definition: Painter.cpp:1512
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
void LoadCurrentMatrix()
retrieve the current matrix.
Definition: Painter.cpp:1474
Definition: ParaLine.h:6
Definition: qfont.h:8
Definition: PainterState.h:25
virtual int InstallFields(CAttributeClass *pClass, bool bOverride)
this class should be implemented if one wants to add new attribute.
Definition: Painter.cpp:1546
void resetTransform()
Resets any transformations that were made using translate(), scale(), shear(), rotate(), setWorldTransform(), setViewport()
Definition: Painter.cpp:1068
Standard 2-dimensional vector.
Definition: ParaVector2.h:16
bool IsAutoLineWidth() const
whether we will render line so that they are at least 1 pixel width automatically adjust line width a...
Definition: Painter.cpp:1429
Definition: qtransform.h:14
void RotateMatrix(float angle, float x, float y, float z)
multiply the current matrix by a rotation matrix
Definition: Painter.cpp:1520
The QBrush class defines the fill pattern of shapes drawn by CPainter.
Definition: qbrush.h:11
void LoadMatrix(const Matrix4 &mat)
we use row-major matrix
Definition: Painter.cpp:1500
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: ParaMatrix4.h:23
base class for a surface to paint to.
Definition: Painter.h:38
a texture from a rectangular region of bitmap, and one additional texture color
Definition: GUIResource.h:12
Vector3 GetScaling()
get the current world matrix&#39;s scaling.
Definition: Painter.cpp:1541
QTransform combinedTransform() const
Returns the transformation matrix combining the current window/viewport and world transformation...
Definition: Painter.cpp:1079
Definition: PainterState.h:104
Definition: ParaPoint.h:5
void setUIScaling(const QPointF &uiScaling)
called automatically according to paint device
Definition: Painter.cpp:302
A common interface for all classes implementing IAttributeFields By implementing this class&#39;s virtual...
Definition: IAttributeFields.h:59
void SetSpriteUseWorldMatrix(bool bEnable)
set sprite use world matrix.
Definition: Painter.cpp:357
Set the text align and other text displaying formats.
Definition: qtextoption.h:33
The CPaintEngine class provides an abstract definition of how CPainter draws to a given device on a g...
Definition: PaintEngine.h:34
int GetPendingAssetCount()
number of texture between begin() end() that is not available at the time of drawing.
Definition: Painter.cpp:1424
Definition: qpolygon.h:10
a font name, format and font color
Definition: GUIResource.h:36
void DrawSceneObject(CBaseObject *pObj, int nOption=0)
draw a scene object
Definition: Painter.cpp:275
Definition: qpolygon.h:87
for world view projection transformation stack
Definition: Globals.h:115
Defines the base class of all scene elements:CBaseObject for Parallel World Engine.
Definition: BaseObject.h:230
const ParaEngine::Matrix4 & GetCurMatrix() const
get current world matrix.
Definition: Painter.cpp:1536
bool IsUse3DTransform()
return false by default.
Definition: Painter.cpp:352
void beginNativePainting()
native painting is supported by default.
Definition: Painter.cpp:203
Definition: ParaRegion.h:7
base class for a surface to paint to.
Definition: PaintDevice.h:10
Definition: ParaColor.h:275
Definition: qpainterpath.h:18
HRESULT DrawSprite(GUITextureElement *pElement, RECT *prcDest, float depth)
rotate sprite at a rect
Definition: Painter.cpp:382
void PushMatrix()
similar to glPushMatrix() in opengl.
Definition: Painter.cpp:1461
void PopMatrix()
similar to glPopMatrix() in opengl.
Definition: Painter.cpp:1467
void LoadIdentityMatrix()
load identity matrix
Definition: Painter.cpp:1479
void MultiplyMatrix(const Matrix4 &mat)
multiply the current matrix with the specified matrix.
Definition: Painter.cpp:1506
void SetMatrixMode(int nMode)
similar to glMatrixMode() in opengl.
Definition: Painter.cpp:1444
void SetSpriteTransform(const Matrix4 *pMatrix=NULL)
set the global transform to sprite object.
Definition: Painter.cpp:289