1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef _FDE_BRUSH 8 #define _FDE_BRUSH 9 class IFDE_Image; 10 class IFDE_Path; 11 class IFDE_Brush; 12 class IFDE_SolidBrush; 13 class IFDE_HatchBrush; 14 class IFDE_TextureBrush; 15 class IFDE_LinearGradientBrush; 16 #define FDE_BRUSHTYPE_Unknown -1 17 #define FDE_BRUSHTYPE_Solid 0 18 #define FDE_BRUSHTYPE_Hatch 1 19 #define FDE_BRUSHTYPE_Texture 2 20 #define FDE_BRUSHTYPE_LinearGradient 3 21 #define FDE_BRUSHTYPE_MAX 3 22 #define FDE_WRAPMODE_Tile 0 23 #define FDE_WRAPMODE_TileFlipX 1 24 #define FDE_WRAPMODE_TileFlipY 2 25 #define FDE_WRAPMODE_TileFlipXY 3 26 #define FDE_WRAPMODE_Clamp 4 27 typedef struct _FDE_GRADIENTCOLOR { 28 FX_FLOAT pos; 29 FX_ARGB color; 30 } FDE_GRADIENTCOLOR, *FDE_LPGRADIENTCOLOR; 31 typedef FDE_GRADIENTCOLOR const* FDE_LPCGRADIENTCOLOR; 32 typedef CFX_ArrayTemplate<FDE_GRADIENTCOLOR> CFDE_GradientColors; 33 class IFDE_Brush { 34 public: 35 static IFDE_Brush* Create(int32_t iType); ~IFDE_Brush()36 virtual ~IFDE_Brush() {} 37 virtual void Release() = 0; 38 virtual int32_t GetType() const = 0; 39 }; 40 class IFDE_SolidBrush : public IFDE_Brush { 41 public: 42 virtual FX_ARGB GetColor() const = 0; 43 virtual void SetColor(FX_ARGB color) = 0; 44 virtual const CFX_Matrix& GetMatrix() const = 0; 45 virtual void ResetMatrix() = 0; 46 virtual void TranslateMatrix(FX_FLOAT dx, FX_FLOAT dy) = 0; 47 virtual void RotateMatrix(FX_FLOAT fRadian) = 0; 48 virtual void ScaleMatrix(FX_FLOAT sx, FX_FLOAT sy) = 0; 49 virtual void ConcatMatrix(const CFX_Matrix& matrix) = 0; 50 virtual void SetMatrix(const CFX_Matrix& matrix) = 0; 51 }; 52 #define FDE_HATCHSTYLE_Horizontal 0 53 #define FDE_HATCHSTYLE_Vertical 1 54 #define FDE_HATCHSTYLE_ForwardDiagonal 2 55 #define FDE_HATCHSTYLE_BackwardDiagonal 3 56 #define FDE_HATCHSTYLE_Cross 4 57 #define FDE_HATCHSTYLE_DiagonalCross 5 58 #define FDE_HATCHSTYLE_05Percent 6 59 #define FDE_HATCHSTYLE_10Percent 7 60 #define FDE_HATCHSTYLE_20Percent 8 61 #define FDE_HATCHSTYLE_25Percent 9 62 #define FDE_HATCHSTYLE_30Percent 10 63 #define FDE_HATCHSTYLE_40Percent 11 64 #define FDE_HATCHSTYLE_50Percent 12 65 #define FDE_HATCHSTYLE_60Percent 13 66 #define FDE_HATCHSTYLE_70Percent 14 67 #define FDE_HATCHSTYLE_75Percent 15 68 #define FDE_HATCHSTYLE_80Percent 16 69 #define FDE_HATCHSTYLE_90Percent 17 70 #define FDE_HATCHSTYLE_LightDownwardDiagonal 18 71 #define FDE_HATCHSTYLE_LightUpwardDiagonal 19 72 #define FDE_HATCHSTYLE_DarkDownwardDiagonal 20 73 #define FDE_HATCHSTYLE_DarkUpwardDiagonal 21 74 #define FDE_HATCHSTYLE_WideDownwardDiagonal 22 75 #define FDE_HATCHSTYLE_WideUpwardDiagonal 23 76 #define FDE_HATCHSTYLE_LightVertical 24 77 #define FDE_HATCHSTYLE_LightHorizontal 25 78 #define FDE_HATCHSTYLE_NarrowVertical 26 79 #define FDE_HATCHSTYLE_NarrowHorizontal 27 80 #define FDE_HATCHSTYLE_DarkVertical 28 81 #define FDE_HATCHSTYLE_DarkHorizontal 29 82 #define FDE_HATCHSTYLE_DashedDownwardDiagonal 30 83 #define FDE_HATCHSTYLE_DashedUpwardDiagonal 31 84 #define FDE_HATCHSTYLE_DashedHorizontal 32 85 #define FDE_HATCHSTYLE_DashedVertical 33 86 #define FDE_HATCHSTYLE_SmallConfetti 34 87 #define FDE_HATCHSTYLE_LargeConfetti 35 88 #define FDE_HATCHSTYLE_ZigZag 36 89 #define FDE_HATCHSTYLE_Wave 37 90 #define FDE_HATCHSTYLE_DiagonalBrick 38 91 #define FDE_HATCHSTYLE_HorizontalBrick 39 92 #define FDE_HATCHSTYLE_Weave 40 93 #define FDE_HATCHSTYLE_Plaid 41 94 #define FDE_HATCHSTYLE_Divot 42 95 #define FDE_HATCHSTYLE_DottedGrid 43 96 #define FDE_HATCHSTYLE_DottedDiamond 44 97 #define FDE_HATCHSTYLE_Shingle 45 98 #define FDE_HATCHSTYLE_Trellis 46 99 #define FDE_HATCHSTYLE_Sphere 47 100 #define FDE_HATCHSTYLE_SmallGrid 48 101 #define FDE_HATCHSTYLE_SmallCheckerBoard 49 102 #define FDE_HATCHSTYLE_LargeCheckerBoard 50 103 #define FDE_HATCHSTYLE_OutlinedDiamond 51 104 #define FDE_HATCHSTYLE_SolidDiamond 52 105 #define FDE_HATCHSTYLE_Total 53 106 #define FDE_HATCHSTYLE_LargeGrid FDE_HATCHSTYLE_Cross 107 #define FDE_HATCHSTYLE_Min FDE_HATCHSTYLE_Horizontal 108 #define FDE_HATCHSTYLE_Max (FDE_HATCHSTYLE_Total - 1) 109 class IFDE_HatchBrush : public IFDE_Brush { 110 public: 111 virtual FX_ARGB GetColor(FX_BOOL bForegroundColor) const = 0; 112 virtual void SetColor(FX_ARGB color, FX_BOOL bForegroundColor) = 0; 113 virtual int32_t GetHatchStyle() const = 0; 114 virtual FX_BOOL SetHatchStyle(int32_t iHatchStyle) = 0; 115 }; 116 class IFDE_TextureBrush : public IFDE_Brush { 117 public: 118 virtual IFDE_Image* GetImage() const = 0; 119 virtual void SetImage(IFDE_Image* pImage, FX_BOOL bAutoRelease) = 0; 120 virtual int32_t GetWrapMode() const = 0; 121 virtual void SetWrapMode(int32_t iWrapMode) = 0; 122 }; 123 #define FDE_LINEARGRADIENTMODE_Horizontal 0 124 #define FDE_LINEARGRADIENTMODE_Vertical 1 125 #define FDE_LINEARGRADIENTMODE_ForwardDiagonal 2 126 #define FDE_LINEARGRADIENTMODE_BackwardDiagonal 3 127 class IFDE_LinearGradientBrush : public IFDE_Brush { 128 public: 129 virtual void GetLinearPoints(CFX_PointF& startingPoint, 130 CFX_PointF& endingPoint) const = 0; 131 virtual void SetLinearPoints(const CFX_PointF& startingPoint, 132 const CFX_PointF& endingPoint) = 0; 133 virtual void GetLinearColors(FX_ARGB& startingColor, 134 FX_ARGB& endingColor) const = 0; 135 virtual void SetLinearColors(const FX_ARGB& startingColor, 136 const FX_ARGB& endingColor) = 0; 137 virtual int32_t CountGradientColors() const = 0; 138 virtual FX_BOOL GetGradientColors(CFDE_GradientColors& colors) const = 0; 139 virtual FX_BOOL SetGradientColors(const CFDE_GradientColors& colors) = 0; 140 virtual int32_t GetWrapMode() const = 0; 141 virtual void SetWrapMode(int32_t iWrapMode) = 0; 142 }; 143 #endif 144