blob: e7497787947578ef361b4481bb1b73929bdd7519 [file] [log] [blame]
// 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_