2 #include "qtransform.h" 4 #include "PaintEngine.h" 5 #include "IAttributeFields.h" 6 #include "2dengine/GUIResource.h" 10 #include "qtextoption.h" 18 struct CPainterDummyState;
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
98 bool isActive()
const;
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,
116 CompositionMode_Plus,
117 CompositionMode_PlusSourceBlend,
119 RasterOp_SourceOrDestination,
120 RasterOp_SourceAndDestination,
121 RasterOp_SourceXorDestination,
122 RasterOp_NotSourceAndNotDestination,
123 RasterOp_NotSourceOrNotDestination,
124 RasterOp_NotSourceXorDestination,
126 RasterOp_NotSourceAndDestination,
127 RasterOp_SourceAndNotDestination,
128 RasterOp_NotSourceOrDestination,
129 RasterOp_SourceOrNotDestination,
130 RasterOp_ClearDestination,
131 RasterOp_SetDestination,
132 RasterOp_NotDestination
136 bool IsScissorRectSupported()
const;
137 bool IsStencilSupported()
const;
142 void setCompositionMode(CompositionMode mode);
143 CompositionMode compositionMode()
const;
153 void EnableAutoLineWidth(
bool val);
159 float FromUnitSpaceY(
float fUnitspaceY);
161 const QFont &font()
const;
162 void setFont(
const QFont &f);
164 void setPen(
const Color &color);
165 void setPen(
const QPen &pen);
166 void setPen(PenStyle style);
167 const QPen &pen()
const;
169 void setBrush(
const QBrush &brush);
170 void setBrush(BrushStyle style);
171 const QBrush &brush()
const;
173 QPoint brushOrigin()
const;
174 inline void setBrushOrigin(
int x,
int y);
175 inline void setBrushOrigin(
const QPoint &);
176 void setBrushOrigin(
const QPointF &);
178 void setBackground(
const QBrush &bg);
179 const QBrush &background()
const;
181 float opacity()
const;
182 void setOpacity(
float opacity);
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);
192 void setClipRegion(
const QRegion &, ClipOperation op = ReplaceClip);
194 void setClipPath(
const QPainterPath &path, ClipOperation op = ReplaceClip);
196 void setClipping(
bool enable);
197 bool hasClipping()
const;
199 QRectF clipBoundingRect()
const;
208 void endNativePainting();
229 void setWorldMatrixEnabled(
bool enabled);
230 bool worldMatrixEnabled()
const;
232 void scale(
float sx,
float sy);
233 void shear(
float sh,
float sv);
234 void rotate(
float a);
236 void translate(
const QPointF &offset);
237 inline void translate(
const QPoint &offset);
238 inline void translate(
float dx,
float dy);
240 QRect viewport()
const;
241 void setViewport(
const QRect &viewport);
247 void setViewTransformEnabled(
bool enable);
248 bool viewTransformEnabled()
const;
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);
261 void drawRects(
const QRectF *rects,
int rectCount);
262 void drawRects(
const QRect *rects,
int rectCount);
264 void drawTriangles(
const Vector3* vertices,
int nTriangleCount);
267 inline void drawPoint(
const QPointF &pt);
268 inline void drawPoint(
const QPoint &p);
269 inline void drawPoint(
int x,
int y);
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);
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);
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);
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);
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);
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);
309 inline void drawTexture(
int x,
int y,
TextureEntity* pTexture,
float fDepth = 0.f);
311 inline void drawTexture(
int x,
int y,
int w,
int h,
TextureEntity* pTexture,
float fDepth = 0.f);
316 void drawText(
const QPointF &p,
const std::string &s);
319 inline void drawText(
const QPoint &p,
const std::string &s);
320 inline void drawText(
int x,
int y,
const std::string &s);
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);
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);
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);
367 HRESULT CalcTextRect(
const char16_t* strText,
GUIFontElement* pElement,
RECT* prcDest,
float depth,
int nCount = -1);
380 bool IsSpriteUseWorldMatrix();
390 int GetMatrixMode()
const;
412 void RotateMatrix(
float angle,
float x,
float y,
float z);
425 void cleanup_painter_state();
441 std::vector<CPainterState*> states;
442 bool m_bUse3DTransform;
450 bool m_bAutoLineWidth;
457 inline void CPainter::translate(
float dx,
float dy)
462 inline void CPainter::translate(
const QPoint &offset)
464 translate((
float)offset.x(), (float)offset.y());
467 inline void CPainter::drawLine(
const QLineF &l)
472 inline void CPainter::drawLine(
const QLine &line)
477 inline void CPainter::drawLine(
int x1,
int y1,
int x2,
int y2)
479 QLine l(x1, y1, x2, y2);
483 inline void CPainter::drawLine(
const QPoint &p1,
const QPoint &p2)
489 inline void CPainter::drawLine(
const QPointF &p1,
const QPointF &p2)
494 inline void CPainter::drawLines(
const std::vector<QLineF> &lines)
496 drawLines(constVectorData(lines), lines.size());
499 inline void CPainter::drawLines(
const std::vector<QLine> &lines)
501 drawLines(constVectorData(lines), lines.size());
504 inline void CPainter::drawLines(
const std::vector<QPointF> &pointPairs)
506 drawLines(constVectorData(pointPairs), pointPairs.size() / 2);
509 inline void CPainter::drawLines(
const std::vector<QPoint> &pointPairs)
511 drawLines(constVectorData(pointPairs), pointPairs.size() / 2);
514 inline void CPainter::drawRect(
const QRectF &rect)
519 inline void CPainter::drawRect(
int x,
int y,
int w,
int h)
525 inline void CPainter::drawRect(
const QRect &r)
530 inline void CPainter::drawRects(
const std::vector<QRectF> &rects)
532 drawRects(constVectorData(rects), rects.size());
535 inline void CPainter::drawRects(
const std::vector<QRect> &rects)
537 drawRects(constVectorData(rects), rects.size());
540 inline void CPainter::drawPoint(
const QPointF &p)
545 inline void CPainter::drawPoint(
int x,
int y)
551 inline void CPainter::drawPoint(
const QPoint &p)
557 inline void CPainter::drawPolyline(
const QPolygonF &polyline)
559 drawPolyline(polyline.constData(), polyline.size());
562 inline void CPainter::drawPolyline(
const QPolygon &polyline)
564 drawPolyline(polyline.constData(), polyline.size());
567 inline void CPainter::drawPolygon(
const QPolygonF &polygon, FillRule fillRule)
569 drawPolygon(polygon.constData(), polygon.size(), fillRule);
572 inline void CPainter::drawPolygon(
const QPolygon &polygon, FillRule fillRule)
574 drawPolygon(polygon.constData(), polygon.size(), fillRule);
577 inline void CPainter::drawTexture(
const QRect &targetRect,
TextureEntity* pTexture,
const QRect &sourceRect,
float fDepth)
579 drawTexture(
QRectF(targetRect), pTexture,
QRectF(sourceRect), fDepth);
584 drawTexture(
QPointF(p), pTexture, fDepth);
587 inline void CPainter::drawTexture(
const QRect &r,
TextureEntity*pTexture,
float fDepth)
592 inline void CPainter::drawTexture(
int x,
int y,
TextureEntity*pTexture,
float fDepth)
594 drawTexture(
QPointF((
float)x, (
float)y), pTexture, fDepth);
597 inline void CPainter::drawTexture(
int x,
int y,
int w,
int h,
TextureEntity*pTexture,
float fDepth)
599 drawTexture(
QRectF((
float)x, (
float)y, (
float)w, (
float)h), pTexture,
QRectF(), fDepth);
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)
605 drawTexture(
QRectF((
float)x, (
float)y, (
float)w, (
float)h), pTexture,
QRectF((
float)sx, (
float)sy, (
float)sw, (
float)sh), fDepth);
608 inline void CPainter::drawTexture(
int x,
int y,
TextureEntity*pTexture,
609 int sx,
int sy,
int sw,
int sh,
float fDepth)
611 drawTexture(
QRectF((
float)x, (
float)y, -1, -1), pTexture,
QRectF((
float)sx, (
float)sy, (
float)sw, (
float)sh), fDepth);
616 drawTexture(
QRectF(p.x(), p.y(), -1, -1), pTexture, sr, fDepth);
621 drawTexture(
QRectF((
float)p.x(), (float)p.y(), -1.f, -1.f), pTexture, sr, fDepth);
624 inline void CPainter::drawText(
const QPoint &p,
const std::string &s)
629 inline void CPainter::drawText(
int x,
int y,
const std::string &s)
631 drawText(
QPointF((
float)x, (
float)y), s);
634 inline void CPainter::setBrushOrigin(
int x,
int y)
636 setBrushOrigin(
QPoint(x, y));
639 inline void CPainter::setBrushOrigin(
const QPoint &p)
644 inline void CPainter::setClipRect(
int x,
int y,
int w,
int h, ClipOperation op)
646 setClipRect(
QRect(x, y, w, h), op);
654 :m_painter(pPainter), m_newBlendMode(newMode), m_bIsBegin(
false)
668 m_lastBlendMode = m_painter->compositionMode();
669 m_painter->setCompositionMode(m_newBlendMode);
677 m_painter->setCompositionMode(m_lastBlendMode);
682 CPainter::CompositionMode m_lastBlendMode;
683 CPainter::CompositionMode m_newBlendMode;
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: 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
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'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'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
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