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 _FWL_FORM_THEMEPROVIDER_H
8 #define _FWL_FORM_THEMEPROVIDER_H
9 class CFWL_WidgetTP;
10 class CFWL_FormTP;
11 class CFWL_FormTP : public CFWL_WidgetTP {
12  public:
13   CFWL_FormTP();
14   virtual ~CFWL_FormTP();
15 
16   virtual FWL_ERR Initialize();
17   virtual FWL_ERR Finalize();
18   virtual FX_BOOL IsValidWidget(IFWL_Widget* pWidget);
19   virtual FX_DWORD SetThemeID(IFWL_Widget* pWidget,
20                               FX_DWORD dwThemeID,
21                               FX_BOOL bChildren = TRUE);
22   virtual FX_BOOL DrawBackground(CFWL_ThemeBackground* pParams);
23   virtual FX_BOOL DrawText(CFWL_ThemeText* pParams);
24   virtual void* GetCapacity(CFWL_ThemePart* pThemePart, FX_DWORD dwCapacity);
25   virtual FWL_ERR GetPartRect(CFWL_ThemePart* pThemePart, CFX_RectF& rtPart);
26 
27  protected:
28   void CalCloseBox(IFWL_Widget* pWidget, CFX_RectF& rect);
29   void CalMaxBox(IFWL_Widget* pWidget, CFX_RectF& rect);
30   void CalMinBox(IFWL_Widget* pWidget, CFX_RectF& rect);
31   void CalCaption(IFWL_Widget* pWidget, CFX_RectF& rect);
32   void CalIcon(IFWL_Widget* pWidget, CFX_RectF& rect);
33 
34   void DrawFormBorder(CFX_Graphics* pGraphics,
35                       const CFX_RectF* pRect,
36                       FWLTHEME_STATE eState,
37                       CFX_Matrix* pMatrix,
38                       int32_t iActive = 0);
39   void DrawCaption(CFX_Graphics* pGraphics,
40                    const CFX_RectF* pRect,
41                    FWLTHEME_STATE eState,
42                    CFX_Matrix* pMatrix,
43                    int32_t iActive = 0);
44   void DrawNarrowCaption(CFX_Graphics* pGraphics,
45                          const CFX_RectF* pRect,
46                          FWLTHEME_STATE eState,
47                          CFX_Matrix* pMatrix,
48                          int32_t iActive = 0);
49   void DrawCloseBox(CFX_Graphics* pGraphics,
50                     const CFX_RectF* pRect,
51                     FWLTHEME_STATE eState,
52                     CFX_Matrix* pMatrix,
53                     int32_t iActive = 0);
54   void DrawMinMaxBoxCommon(CFX_Graphics* pGraphics,
55                            const CFX_RectF* pRect,
56                            FWLTHEME_STATE eState,
57                            CFX_Matrix* pMatrix,
58                            int32_t iActive = 0);
59   void DrawMinimizeBox(CFX_Graphics* pGraphics,
60                        const CFX_RectF* pRect,
61                        FWLTHEME_STATE eState,
62                        CFX_Matrix* pMatrix,
63                        int32_t iActive = 0);
64   void DrawMaximizeBox(CFX_Graphics* pGraphics,
65                        const CFX_RectF* pRect,
66                        FWLTHEME_STATE eState,
67                        FX_BOOL bMax,
68                        CFX_Matrix* pMatrix,
69                        int32_t iActive = 0);
70   void DrawIconImage(CFX_Graphics* pGraphics,
71                      CFX_DIBitmap* pDIBitmap,
72                      const CFX_RectF* pRect,
73                      FWLTHEME_STATE eState,
74                      CFX_Matrix* pMatrix,
75                      int32_t iActive = 0);
76   void SetThemeData(FX_DWORD dwID);
77   void TransModeColor(FX_ARGB clrFore, FX_ARGB& clrBack);
78   void DeactiveForm();
79   void InitCaption(FX_BOOL bActive);
80   CFX_DIBitmap* m_pActiveBitmap;
81   CFX_DIBitmap* m_pDeactivebitmap;
82   CFX_RectF m_rtDisCaption;
83   CFX_RectF m_rtDisLBorder;
84   CFX_RectF m_rtDisRBorder;
85   CFX_RectF m_rtDisBBorder;
86   struct SBThemeData {
87     FX_ARGB clrHeadBK[2][4];
88     FX_ARGB clrHeadEdgeLeft[2][3];
89     FX_ARGB clrHeadEdgeRight[2][3];
90     FX_ARGB clrHeadEdgeTop[2][3];
91     FX_ARGB clrHeadEdgeBottom[2][3];
92     FX_ARGB clrCloseBtBKStart[2][3];
93     FX_ARGB clrCloseBtBKEnd[2][3];
94     FX_ARGB clrCloseBtEdgeLight[2][3];
95     FX_ARGB clrCloseBtEdgeDark[2][3];
96     FX_ARGB clrNormalBtBKStart[2][3];
97     FX_ARGB clrNormalBtBKEnd[2][3];
98     FX_ARGB clrNormalBtEdgeLight[2][3];
99     FX_ARGB clrNormalBtEdgeDark[2][3];
100     FX_ARGB clrBtnEdgeOut[2];
101     FX_ARGB clrBtnCornerLight[2][3];
102     FX_ARGB clrHeadText[2];
103     FX_ARGB clrFormBorder[2][5];
104     FX_ARGB clrFormBorderLight[2];
105     FX_ARGB clrTransWhite;
106   } * m_pThemeData;
107 };
108 #endif
109