5 #ifndef __gdiplusdrawcontext__ 6 #define __gdiplusdrawcontext__ 8 #include "../../coffscreencontext.h" 12 #include "win32support.h" 18 class GdiplusDrawContext :
public COffscreenContext
21 GdiplusDrawContext (HWND window,
const CRect& drawSurface);
22 GdiplusDrawContext (GdiplusBitmap* bitmap);
23 ~GdiplusDrawContext () noexcept;
25 Gdiplus::Graphics* getGraphics ()
const {
return pGraphics; }
26 Gdiplus::Pen* getPen ()
const {
return pPen; }
27 Gdiplus::SolidBrush* getBrush ()
const {
return pBrush; }
28 Gdiplus::SolidBrush* getFontBrush ()
const {
return pFontBrush; }
31 void drawLine (
const LinePair& line)
override;
32 void drawLines (
const LineList& lines)
override;
33 void drawPolygon (
const PointList& polygonPointList,
const CDrawStyle drawStyle = kDrawStroked)
override;
34 void drawRect (
const CRect &rect,
const CDrawStyle drawStyle = kDrawStroked)
override;
35 void drawArc (
const CRect &rect,
const float startAngle1,
const float endAngle2,
const CDrawStyle drawStyle = kDrawStroked)
override;
36 void drawEllipse (
const CRect &rect,
const CDrawStyle drawStyle = kDrawStroked)
override;
37 void drawPoint (
const CPoint &point,
const CColor& color)
override;
38 void drawBitmap (CBitmap* bitmap,
const CRect& dest,
const CPoint& offset = CPoint (0, 0),
float alpha = 1.f)
override;
39 void clearRect (
const CRect& rect)
override;
40 void setLineStyle (
const CLineStyle& style)
override;
41 void setLineWidth (CCoord width)
override;
42 void setDrawMode (CDrawMode mode)
override;
43 void setClipRect (
const CRect &clip)
override;
44 void resetClipRect ()
override;
45 void setFillColor (
const CColor& color)
override;
46 void setFrameColor (
const CColor& color)
override;
47 void setFontColor (
const CColor& color)
override;
48 void setGlobalAlpha (
float newAlpha)
override;
49 void saveGlobalState ()
override;
50 void restoreGlobalState ()
override;
51 CGraphicsPath* createGraphicsPath ()
override;
52 CGraphicsPath* createTextPath (
const CFontRef font, UTF8StringPtr text)
override;
53 void drawGraphicsPath (CGraphicsPath* path, PathDrawMode mode = kPathFilled, CGraphicsTransform* transformation =
nullptr)
override;
54 void fillLinearGradient (CGraphicsPath* path,
const CGradient& gradient,
const CPoint& startPoint,
const CPoint& endPoint,
bool evenOdd =
false, CGraphicsTransform* transformation =
nullptr)
override;
55 void fillRadialGradient (CGraphicsPath* path,
const CGradient& gradient,
const CPoint& center, CCoord radius,
const CPoint& originOffset = CPoint (0, 0),
bool evenOdd =
false, CGraphicsTransform* transformation =
nullptr)
override;
57 void endDraw ()
override;
60 void init ()
override;
62 void setFillColorInternal (
const CColor& color);
63 void setFrameColorInternal (
const CColor& color);
64 void setFontColorInternal (
const CColor& color);
65 void setLineStyleInternal (
const CLineStyle& style);
66 void setLineWidthInternal (CCoord width);
67 void setDrawModeInternal (CDrawMode mode);
70 Gdiplus::Graphics *pGraphics;
72 Gdiplus::SolidBrush *pBrush;
73 Gdiplus::SolidBrush *pFontBrush;
77 struct GdiplusDrawScope
79 GdiplusDrawScope (Gdiplus::Graphics* graphics,
const CRect& clipRect,
const CGraphicsTransform& transform)
82 graphics->SetClip (Gdiplus::RectF ((Gdiplus::REAL)clipRect.left, (Gdiplus::REAL)clipRect.top, (Gdiplus::REAL)clipRect.getWidth (), (Gdiplus::REAL)clipRect.getHeight ()), Gdiplus::CombineModeReplace);
83 if (transform.isInvariant () ==
false)
85 Gdiplus::Matrix matrix ((Gdiplus::REAL)transform.m11, (Gdiplus::REAL)transform.m12, (Gdiplus::REAL)transform.m21, (Gdiplus::REAL)transform.m22, (Gdiplus::REAL)transform.dx, (Gdiplus::REAL)transform.dy);
86 graphics->SetTransform (&matrix);
90 ~GdiplusDrawScope () noexcept
92 Gdiplus::Matrix matrix;
93 graphics->SetTransform (&matrix);
96 Gdiplus::Graphics* graphics;
100 inline void convert (Gdiplus::Matrix& matrix,
const CGraphicsTransform& t)
102 matrix.SetElements ((Gdiplus::REAL)t.m11, (Gdiplus::REAL)t.m21, (Gdiplus::REAL)t.m12, (Gdiplus::REAL)t.m22, (Gdiplus::REAL)t.dx, (Gdiplus::REAL)t.dy);
110 #endif // __gdiplusdrawcontext__ Definition: customcontrols.cpp:8