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 XFA_FWL_THEME_CFWL_WIDGETTP_H_
8 #define XFA_FWL_THEME_CFWL_WIDGETTP_H_
9 
10 #include <memory>
11 #include <vector>
12 
13 #include "core/fxcrt/fx_coordinates.h"
14 #include "core/fxcrt/fx_system.h"
15 #include "core/fxcrt/retain_ptr.h"
16 #include "xfa/fwl/theme/cfwl_utils.h"
17 #include "xfa/fxgraphics/cxfa_graphics.h"
18 
19 class CFDE_TextOut;
20 class CFGAS_FontMgr;
21 class CFGAS_GEFont;
22 class CFWL_ThemeBackground;
23 class CFWL_ThemePart;
24 class CFWL_ThemeText;
25 class CFWL_Widget;
26 
27 #if _FX_PLATFORM_ != _FX_PLATFORM_WINDOWS_
28 class CFX_FontSourceEnum_File;
29 #endif
30 
31 class CFWL_WidgetTP {
32  public:
33   virtual ~CFWL_WidgetTP();
34 
35   virtual void Initialize();
36   virtual void Finalize();
37 
38   virtual void DrawBackground(CFWL_ThemeBackground* pParams);
39   virtual void DrawText(CFWL_ThemeText* pParams);
40 
41   const RetainPtr<CFGAS_GEFont>& GetFont() const;
42 
43  protected:
44   struct CColorData {
45     FX_ARGB clrBorder[4];
46     FX_ARGB clrStart[4];
47     FX_ARGB clrEnd[4];
48     FX_ARGB clrSign[4];
49   };
50 
51   CFWL_WidgetTP();
52 
53   void InitializeArrowColorData();
54   void InitTTO();
55   void FinalizeTTO();
56 
57   void DrawBorder(CXFA_Graphics* pGraphics,
58                   const CFX_RectF* pRect,
59                   CFX_Matrix* pMatrix = nullptr);
60   void FillBackground(CXFA_Graphics* pGraphics,
61                       const CFX_RectF* pRect,
62                       CFX_Matrix* pMatrix = nullptr);
63   void FillSoildRect(CXFA_Graphics* pGraphics,
64                      FX_ARGB fillColor,
65                      const CFX_RectF* pRect,
66                      CFX_Matrix* pMatrix = nullptr);
67   void DrawAxialShading(CXFA_Graphics* pGraphics,
68                         float fx1,
69                         float fy1,
70                         float fx2,
71                         float fy2,
72                         FX_ARGB beginColor,
73                         FX_ARGB endColor,
74                         CXFA_GEPath* path,
75                         int32_t fillMode = FXFILL_WINDING,
76                         CFX_Matrix* pMatrix = nullptr);
77   void DrawFocus(CXFA_Graphics* pGraphics,
78                  const CFX_RectF* pRect,
79                  CFX_Matrix* pMatrix = nullptr);
80   void DrawArrow(CXFA_Graphics* pGraphics,
81                  const CFX_RectF* pRect,
82                  FWLTHEME_DIRECTION eDict,
83                  FX_ARGB argSign,
84                  CFX_Matrix* pMatrix = nullptr);
85   void DrawBtn(CXFA_Graphics* pGraphics,
86                const CFX_RectF* pRect,
87                FWLTHEME_STATE eState,
88                CFX_Matrix* pMatrix = nullptr);
89   void DrawArrowBtn(CXFA_Graphics* pGraphics,
90                     const CFX_RectF* pRect,
91                     FWLTHEME_DIRECTION eDict,
92                     FWLTHEME_STATE eState,
93                     CFX_Matrix* pMatrix = nullptr);
94 
95   uint32_t m_dwRefCount;
96   std::unique_ptr<CFDE_TextOut> m_pTextOut;
97   RetainPtr<CFGAS_GEFont> m_pFDEFont;
98   std::unique_ptr<CColorData> m_pColorData;
99 };
100 
101 void FWLTHEME_Release();
102 
103 class CFWL_FontData {
104  public:
105   CFWL_FontData();
106   virtual ~CFWL_FontData();
107 
108   bool Equal(const WideStringView& wsFontFamily,
109              uint32_t dwFontStyles,
110              uint16_t wCodePage);
111   bool LoadFont(const WideStringView& wsFontFamily,
112                 uint32_t dwFontStyles,
113                 uint16_t wCodePage);
114   RetainPtr<CFGAS_GEFont> GetFont() const;
115 
116  protected:
117   WideString m_wsFamily;
118   uint32_t m_dwStyles;
119   uint32_t m_dwCodePage;
120   std::unique_ptr<CFGAS_FontMgr> m_pFontMgr;
121   RetainPtr<CFGAS_GEFont> m_pFont;
122 };
123 
124 class CFWL_FontManager {
125  public:
126   static CFWL_FontManager* GetInstance();
127   static void DestroyInstance();
128 
129   RetainPtr<CFGAS_GEFont> FindFont(const WideStringView& wsFontFamily,
130                                    uint32_t dwFontStyles,
131                                    uint16_t dwCodePage);
132 
133  protected:
134   CFWL_FontManager();
135   virtual ~CFWL_FontManager();
136 
137   static CFWL_FontManager* s_FontManager;
138   std::vector<std::unique_ptr<CFWL_FontData>> m_FontsArray;
139 };
140 
141 #endif  // XFA_FWL_THEME_CFWL_WIDGETTP_H_
142