|  | // Copyright 2016 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 XFA_FXGRAPHICS_CXFA_GRAPHICS_H_ | 
|  | #define XFA_FXGRAPHICS_CXFA_GRAPHICS_H_ | 
|  |  | 
|  | #include <memory> | 
|  | #include <vector> | 
|  |  | 
|  | #include "core/fxcrt/fx_system.h" | 
|  | #include "core/fxge/cfx_defaultrenderdevice.h" | 
|  | #include "core/fxge/cfx_graphstatedata.h" | 
|  | #include "core/fxge/cfx_renderdevice.h" | 
|  | #include "core/fxge/fx_dib.h" | 
|  | #include "xfa/fxgraphics/cxfa_gecolor.h" | 
|  |  | 
|  | class CXFA_GEPath; | 
|  |  | 
|  | using FX_FillMode = int32_t; | 
|  |  | 
|  | enum class FX_HatchStyle { | 
|  | Horizontal = 0, | 
|  | Vertical = 1, | 
|  | ForwardDiagonal = 2, | 
|  | BackwardDiagonal = 3, | 
|  | Cross = 4, | 
|  | DiagonalCross = 5 | 
|  | }; | 
|  |  | 
|  | class CFX_RenderDevice; | 
|  |  | 
|  | class CXFA_Graphics { | 
|  | public: | 
|  | explicit CXFA_Graphics(CFX_RenderDevice* renderDevice); | 
|  | ~CXFA_Graphics(); | 
|  |  | 
|  | void SaveGraphState(); | 
|  | void RestoreGraphState(); | 
|  |  | 
|  | CFX_RectF GetClipRect() const; | 
|  | const CFX_Matrix* GetMatrix() const; | 
|  | CFX_RenderDevice* GetRenderDevice(); | 
|  |  | 
|  | void SetLineCap(CFX_GraphStateData::LineCap lineCap); | 
|  | void SetLineDash(float dashPhase, const float* dashArray, size_t dashCount); | 
|  | void SetSolidLineDash(); | 
|  | void SetLineWidth(float lineWidth); | 
|  | void EnableActOnDash(); | 
|  | void SetStrokeColor(const CXFA_GEColor& color); | 
|  | void SetFillColor(const CXFA_GEColor& color); | 
|  | void SetClipRect(const CFX_RectF& rect); | 
|  | void StrokePath(CXFA_GEPath* path, const CFX_Matrix* matrix); | 
|  | void FillPath(CXFA_GEPath* path, | 
|  | FX_FillMode fillMode, | 
|  | const CFX_Matrix* matrix); | 
|  | void ConcatMatrix(const CFX_Matrix* matrix); | 
|  |  | 
|  | protected: | 
|  | int32_t m_type; | 
|  |  | 
|  | private: | 
|  | struct TInfo { | 
|  | TInfo(); | 
|  | explicit TInfo(const TInfo& info); | 
|  | TInfo& operator=(const TInfo& other); | 
|  |  | 
|  | CFX_GraphStateData graphState; | 
|  | CFX_Matrix CTM; | 
|  | bool isActOnDash; | 
|  | CXFA_GEColor strokeColor; | 
|  | CXFA_GEColor fillColor; | 
|  | } m_info; | 
|  |  | 
|  | void RenderDeviceStrokePath(const CXFA_GEPath* path, | 
|  | const CFX_Matrix* matrix); | 
|  | void RenderDeviceFillPath(const CXFA_GEPath* path, | 
|  | FX_FillMode fillMode, | 
|  | const CFX_Matrix* matrix); | 
|  |  | 
|  | void FillPathWithPattern(const CXFA_GEPath* path, | 
|  | FX_FillMode fillMode, | 
|  | const CFX_Matrix& matrix); | 
|  | void FillPathWithShading(const CXFA_GEPath* path, | 
|  | FX_FillMode fillMode, | 
|  | const CFX_Matrix& matrix); | 
|  |  | 
|  | void SetDIBitsWithMatrix(const RetainPtr<CFX_DIBBase>& source, | 
|  | const CFX_Matrix& matrix); | 
|  |  | 
|  | CFX_RenderDevice* const m_renderDevice;  // Not owned. | 
|  | std::vector<std::unique_ptr<TInfo>> m_infoStack; | 
|  | }; | 
|  |  | 
|  | #endif  // XFA_FXGRAPHICS_CXFA_GRAPHICS_H_ |