// 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 #include #include "core/fxcrt/fx_system.h" #include "core/fxge/cfx_graphstatedata.h" #include "xfa/fxgraphics/cxfa_gecolor.h" using FX_FillMode = int32_t; enum class FX_HatchStyle { Horizontal = 0, Vertical = 1, ForwardDiagonal = 2, BackwardDiagonal = 3, Cross = 4, DiagonalCross = 5 }; class CFX_DIBBase; class CFX_RenderDevice; class CXFA_GEPath; 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); 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; }; 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& source, const CFX_Matrix& matrix); CFX_RenderDevice* const m_renderDevice; // Not owned. TInfo m_info; std::vector> m_infoStack; }; #endif // XFA_FXGRAPHICS_CXFA_GRAPHICS_H_