// 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 XFA_FDE_FDE_OBJECT_H_ #define XFA_FDE_FDE_OBJECT_H_ #include <cstdint> #include "core/fxge/include/fx_dib.h" #include "xfa/fde/fde_brush.h" #include "xfa/fde/fde_pen.h" #include "xfa/fgas/crt/fgas_memory.h" class CFDE_Pen : public IFDE_Pen, public CFX_Target { public: CFDE_Pen() : m_Color(0), m_iLineCap(0), m_iLineJoin(0), m_iDashStyle(0), m_fDashPhase(0), m_fMiterLimit(10), m_bAutoRelease(FALSE), m_pBrush(NULL) {} ~CFDE_Pen() { if (m_pBrush && m_bAutoRelease) { m_pBrush->Release(); } } virtual void Release() { delete this; } virtual int32_t GetType() const { return m_pBrush ? m_pBrush->GetType() : FDE_PENTYPE_SolidColor; } virtual FX_ARGB GetColor() const { return m_Color; } virtual void SetColor(FX_ARGB color) { m_Color = color; } virtual IFDE_Brush* GetBrush() const { return m_pBrush; } virtual void SetBrush(IFDE_Brush* pBrush, FX_BOOL bAutoRelease) { m_bAutoRelease = bAutoRelease; m_pBrush = pBrush; if (m_pBrush && m_pBrush->GetType() == FDE_BRUSHTYPE_Solid) { m_Color = ((IFDE_SolidBrush*)m_pBrush)->GetColor(); } } virtual int32_t GetLineCap() const { return m_iLineCap; } virtual void SetLineCap(int32_t iLineCap) { m_iLineCap = iLineCap; } virtual int32_t GetDashStyle() const { return m_iDashStyle; } virtual void SetDashStyle(int32_t iDashStyle) { m_iDashStyle = iDashStyle; } virtual FX_FLOAT GetDashPhase() const { return m_fDashPhase; } virtual void SetDashPhase(FX_FLOAT fPhase) { m_fDashPhase = fPhase; } virtual int32_t CountDashArray() const { return m_DashArray.GetSize(); } virtual int32_t GetDashArray(CFX_FloatArray& dashArray) const { dashArray.Copy(m_DashArray); return dashArray.GetSize(); } virtual void SetDashArray(const CFX_FloatArray& dashArray) { m_DashArray.Copy(dashArray); } virtual int32_t GetLineJoin() const { return m_iLineJoin; } virtual void SetLineJoin(int32_t iLineJoin) { m_iLineJoin = iLineJoin; } virtual FX_FLOAT GetMiterLimit() const { return m_fMiterLimit; } virtual void SetMiterLimit(FX_FLOAT fMiterLimit) { m_fMiterLimit = fMiterLimit; } virtual int32_t CountCompoundPatterns() const { return m_CompoundPatterns.GetSize(); } virtual FX_BOOL GetCompoundPatterns( CFDE_CompoundPatterns& compoundPatterns) const { return compoundPatterns.Copy(m_CompoundPatterns), TRUE; } virtual FX_BOOL SetCompoundPatterns( const CFDE_CompoundPatterns& compoundPatterns) { return m_CompoundPatterns.Copy(compoundPatterns), TRUE; } FX_ARGB m_Color; int32_t m_iLineCap; int32_t m_iLineJoin; int32_t m_iDashStyle; FX_FLOAT m_fDashPhase; FX_FLOAT m_fMiterLimit; FX_BOOL m_bAutoRelease; IFDE_Brush* m_pBrush; CFX_FloatArray m_DashArray; CFDE_CompoundPatterns m_CompoundPatterns; }; class CFDE_SolidBrush : public IFDE_SolidBrush, public CFX_Target { public: CFDE_SolidBrush() : m_Color(0xFF000000) { m_Matrix.SetIdentity(); } virtual void Release() { delete this; } virtual int32_t GetType() const { return FDE_BRUSHTYPE_Solid; } virtual const CFX_Matrix& GetMatrix() const { return m_Matrix; } virtual void ResetMatrix() { m_Matrix.SetIdentity(); } virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) { m_Matrix.Translate(dx, dy); } virtual void RotateMatrix(FX_FLOAT fRadian) { m_Matrix.Rotate(fRadian); } virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) { m_Matrix.Scale(sx, sy); } virtual void ConcatMatrix(const CFX_Matrix& matrix) { m_Matrix.Concat(matrix); } virtual void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; } virtual FX_ARGB GetColor() const { return m_Color; } virtual void SetColor(FX_ARGB color) { m_Color = color; } FX_ARGB m_Color; CFX_Matrix m_Matrix; }; #endif // XFA_FDE_FDE_OBJECT_H_