| // Copyright 2014 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #ifndef _FDE_GDIPLUSDEVICE_IMP |
| #define _FDE_GDIPLUSDEVICE_IMP |
| #ifdef _FDEPLUS |
| #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || \ |
| _FX_OS_ == _FX_WIN64_ |
| class CFDE_GdiPath; |
| class CFDE_GdiDevice : public IFDE_RenderDevice, public CFX_Target { |
| public: |
| CFDE_GdiDevice(CFX_DIBitmap* pDib); |
| ~CFDE_GdiDevice(); |
| |
| virtual void Release() { delete this; } |
| |
| virtual int32_t GetWidth() const; |
| virtual int32_t GetHeight() const; |
| virtual FDE_HDEVICESTATE SaveState(); |
| virtual void RestoreState(FDE_HDEVICESTATE hState); |
| virtual FX_BOOL SetClipPath(const IFDE_Path* pClip); |
| virtual IFDE_Path* GetClipPath() const; |
| virtual FX_BOOL SetClipRect(const CFX_RectF& rtClip); |
| virtual const CFX_RectF& GetClipRect(); |
| |
| virtual FX_FLOAT GetDpiX() const; |
| virtual FX_FLOAT GetDpiY() const; |
| |
| virtual FX_BOOL DrawImage(CFX_DIBSource* pDib, |
| const CFX_RectF* pSrcRect, |
| const CFX_RectF& dstRect, |
| const CFX_Matrix* pImgMatrix = NULL, |
| const CFX_Matrix* pDevMatrix = NULL); |
| virtual FX_BOOL DrawImage(IFDE_Image* pImg, |
| const CFX_RectF* pSrcRect, |
| const CFX_RectF& dstRect, |
| const CFX_Matrix* pImgMatrix = NULL, |
| const CFX_Matrix* pDevMatrix = NULL); |
| virtual FX_BOOL DrawString(IFDE_Brush* pBrush, |
| IFX_Font* pFont, |
| const FXTEXT_CHARPOS* pCharPos, |
| int32_t iCount, |
| FX_FLOAT fFontSize, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawArc(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| FX_FLOAT startAngle, |
| FX_FLOAT sweepAngle, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawBezier(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_PointF& pt1, |
| const CFX_PointF& pt2, |
| const CFX_PointF& pt3, |
| const CFX_PointF& pt4, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawCurve(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_PointsF& points, |
| FX_BOOL bClosed, |
| FX_FLOAT fTension = 0.5f, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawEllipse(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawLines(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_PointsF& points, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawLine(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_PointF& pt1, |
| const CFX_PointF& pt2, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawPath(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const IFDE_Path* pPath, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawPie(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| FX_FLOAT startAngle, |
| FX_FLOAT sweepAngle, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawChord(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| FX_FLOAT startAngle, |
| FX_FLOAT sweepAngle, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawPolygon(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_PointsF& points, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawRectangle(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL DrawRoundRectangle(IFDE_Pen* pPen, |
| FX_FLOAT fPenWidth, |
| const CFX_RectF& rect, |
| const CFX_SizeF& round, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillClosedCurve(IFDE_Brush* pBrush, |
| const CFX_PointsF& points, |
| FX_FLOAT fTension = 0.5f, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillEllipse(IFDE_Brush* pBrush, |
| const CFX_RectF& rect, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillPath(IFDE_Brush* pBrush, |
| const IFDE_Path* pPath, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillPie(IFDE_Brush* pBrush, |
| const CFX_RectF& rect, |
| FX_FLOAT startAngle, |
| FX_FLOAT sweepAngle, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillChord(IFDE_Brush* pBrush, |
| const CFX_RectF& rect, |
| FX_FLOAT startAngle, |
| FX_FLOAT sweepAngle, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillPolygon(IFDE_Brush* pBrush, |
| const CFX_PointsF& points, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillRectangle(IFDE_Brush* pBrush, |
| const CFX_RectF& rect, |
| const CFX_Matrix* pMatrix = NULL); |
| virtual FX_BOOL FillRoundRectangle(IFDE_Brush* pBrush, |
| const CFX_RectF& rect, |
| const CFX_SizeF& round, |
| const CFX_Matrix* pMatrix = NULL); |
| |
| protected: |
| Gdiplus::Pen* CreateGdiPen(IFDE_Pen* pPen, FX_FLOAT fPenWidth); |
| void ReleaseGdiPen(Gdiplus::Pen* pGdiPen); |
| Gdiplus::Brush* CreateGdiBrush(IFDE_Brush* pBrush); |
| void ReleaseGdiBrush(Gdiplus::Brush* pGdiBrush); |
| void ApplyMatrix(const CFX_Matrix* pMatrix); |
| void RestoreMatrix(const CFX_Matrix* pMatrix); |
| Gdiplus::GraphicsState m_GraphicsState; |
| Gdiplus::Graphics* m_pGraphics; |
| Gdiplus::Bitmap* m_pBitmap; |
| uint8_t* m_pGlyphBuf; |
| FX_DWORD m_dwGlyphLen; |
| CFX_RectF m_rtClipRect; |
| CFDE_GdiPath* m_pClipPath; |
| }; |
| #endif |
| #endif |
| #endif |