Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / include / fwl / theme / widgettp.h
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #ifndef _FWL_WIDGETTP_H\r
8 #define _FWL_WIDGETTP_H\r
9 class CFX_Object;\r
10 class IFWL_ThemeProvider;\r
11 class IFWL_Widget;\r
12 class IFDE_TextOut;\r
13 class IFX_Font;\r
14 class IFX_FontMgr;\r
15 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_\r
16 class IFX_FontSourceEnum;\r
17 #endif\r
18 class CFWL_WidgetTP;\r
19 class CFWL_ArrowData;\r
20 class CFWL_WidgetTP : public CFX_Object\r
21 {\r
22 public:\r
23     virtual FX_BOOL             IsValidWidget(IFWL_Widget *pWidget);\r
24     virtual FX_DWORD    GetThemeID(IFWL_Widget *pWidget);\r
25     virtual FX_DWORD    SetThemeID(IFWL_Widget *pWidget, FX_DWORD dwThemeID, FX_BOOL bChildren = TRUE);\r
26     virtual FWL_ERR             GetThemeMatrix(IFWL_Widget *pWidget, CFX_Matrix &matrix);\r
27     virtual FWL_ERR             SetThemeMatrix(IFWL_Widget *pWidget, const CFX_Matrix &matrix);\r
28     virtual FX_BOOL             DrawBackground(CFWL_ThemeBackground *pParams);\r
29     virtual FX_BOOL             DrawText(CFWL_ThemeText *pParams);\r
30     virtual FX_LPVOID   GetCapacity(CFWL_ThemePart *pThemePart, FX_DWORD dwCapacity);\r
31     virtual FX_BOOL             IsCustomizedLayout(IFWL_Widget *pWidget);\r
32     virtual FWL_ERR             GetPartRect(CFWL_ThemePart *pThemePart, CFX_RectF &rtPart);\r
33     virtual FX_BOOL             IsInPart(CFWL_ThemePart *pThemePart, FX_FLOAT fx, FX_FLOAT fy);\r
34     virtual     FX_BOOL         CalcTextRect(CFWL_ThemeText *pParams, CFX_RectF &rect);\r
35     virtual FWL_ERR             Initialize();\r
36     virtual FWL_ERR             Finalize();\r
37     virtual ~CFWL_WidgetTP();\r
38     FWL_ERR             SetFont(IFWL_Widget *pWidget, FX_LPCWSTR strFont, FX_FLOAT fFontSize, FX_ARGB rgbFont);\r
39     FWL_ERR             SetFont(IFWL_Widget *pWidget, IFX_Font *pFont, FX_FLOAT fFontSize, FX_ARGB rgbFont);\r
40     IFX_Font*   GetFont(IFWL_Widget *pWidget);\r
41 protected:\r
42     CFWL_WidgetTP();\r
43     FX_ERR      InitTTO();\r
44     FX_ERR      FinalizeTTO();\r
45     void        DrawEdge(CFX_Graphics *pGraphics, FX_DWORD dwStyles, const CFX_RectF *pRect, CFX_Matrix *pMatrix = NULL);\r
46     void        Draw3DRect(CFX_Graphics *pGraphics, FWLTHEME_EDGE eType, FX_FLOAT fWidth, const CFX_RectF *pRect, FX_ARGB cr1, FX_ARGB cr2, FX_ARGB cr3, FX_ARGB cr4, CFX_Matrix *pMatrix = NULL);\r
47     void        Draw3DCircle(CFX_Graphics *pGraphics, FWLTHEME_EDGE eType, FX_FLOAT fWidth, const CFX_RectF *pRect, FX_ARGB cr1, FX_ARGB cr2, FX_ARGB cr3, FX_ARGB cr4, CFX_Matrix *pMatrix = NULL);\r
48     void        DrawBorder(CFX_Graphics *pGraphics, const CFX_RectF *pRect, CFX_Matrix *pMatrix = NULL);\r
49     void        FillBackground(CFX_Graphics *pGraphics, const CFX_RectF *pRect, CFX_Matrix *pMatrix = NULL);\r
50     void        FillSoildRect(CFX_Graphics *pGraphics, FX_ARGB fillColor, const CFX_RectF *pRect, CFX_Matrix *pMatrix = NULL);\r
51     void        DrawAxialShading(CFX_Graphics *pGraphics, FX_FLOAT fx1, FX_FLOAT fy1, FX_FLOAT fx2, FX_FLOAT fy2, FX_ARGB beginColor, FX_ARGB endColor, CFX_Path *path, FX_INT32 fillMode = FXFILL_WINDING, CFX_Matrix *pMatrix = NULL);\r
52     void        DrawAnnulusRect(CFX_Graphics *pGraphics, FX_ARGB fillColor, const CFX_RectF *pRect, FX_FLOAT fRingWidth = 1, CFX_Matrix *pMatrix = NULL);\r
53     void        DrawAnnulusCircle(CFX_Graphics *pGraphics, FX_ARGB fillColor, const CFX_RectF *pRect, FX_FLOAT fWidth = 1, CFX_Matrix *pMatrix = NULL);\r
54     void        DrawFocus(CFX_Graphics *pGraphics, const CFX_RectF *pRect, CFX_Matrix *pMatrix = NULL);\r
55     void        DrawArrow(CFX_Graphics *pGraphics, const CFX_RectF *pRect, FWLTHEME_DIRECTION eDict, FX_ARGB argbFill, FX_BOOL bPressed, CFX_Matrix *pMatrix = NULL);\r
56     void        DrawArrow(CFX_Graphics *pGraphics, const CFX_RectF *pRect, FWLTHEME_DIRECTION eDict, FX_ARGB argSign, CFX_Matrix *pMatrix = NULL);\r
57     void        DrawBtn(CFX_Graphics *pGraphics, const CFX_RectF *pRect, FWLTHEME_STATE eState, CFX_Matrix *pMatrix = NULL);\r
58     void        DrawArrowBtn(CFX_Graphics *pGraphics, const CFX_RectF *pRect, FWLTHEME_DIRECTION eDict, FWLTHEME_STATE eState, CFX_Matrix *pMatrix = NULL);\r
59     FWLCOLOR BlendColor(FWLCOLOR srcColor, FWLCOLOR renderColor, FX_BYTE scale);\r
60     FX_DWORD            m_dwRefCount;\r
61     IFDE_TextOut   *m_pTextOut;\r
62     IFX_Font       *m_pFDEFont;\r
63     FX_FLOAT            m_fValue;\r
64     FX_DWORD            m_dwValue;\r
65     CFX_RectF           m_rtMargin;\r
66     FX_DWORD            m_dwThemeID;\r
67     CFX_Matrix          _ctm;\r
68 };\r
69 FX_BOOL FWLTHEME_Init();\r
70 void    FWLTHEME_Release();\r
71 FX_DWORD FWL_GetThemeLayout(FX_DWORD dwThemeID);\r
72 FX_DWORD FWL_GetThemeColor(FX_DWORD dwThemeID);\r
73 FX_DWORD FWL_MakeThemeID(FX_DWORD dwLayout, FX_DWORD dwColor);\r
74 class CFWL_ArrowData : public CFX_Object\r
75 {\r
76 public:\r
77     static CFWL_ArrowData* GetInstance();\r
78     static FX_BOOL IsInstance();\r
79     static void DestroyInstance();\r
80     virtual ~CFWL_ArrowData();\r
81     void SetColorData(FX_DWORD  dwID);\r
82 \r
83     class CColorData : public CFX_Object\r
84     {\r
85     public:\r
86         FX_ARGB clrBorder[4];\r
87         FX_ARGB clrStart[4];\r
88         FX_ARGB clrEnd[4];\r
89         FX_ARGB clrSign[4];\r
90     } *m_pColorData;\r
91 protected:\r
92     CFWL_ArrowData();\r
93     static CFWL_ArrowData *m_pInstance;\r
94 };\r
95 class CFWL_FontData : public CFX_Object\r
96 {\r
97 public:\r
98     CFWL_FontData();\r
99     virtual ~CFWL_FontData();\r
100     FX_BOOL Equal(FX_WSTR wsFontFamily, FX_DWORD dwFontStyles, FX_WORD wCodePage);\r
101     FX_BOOL LoadFont(FX_WSTR wsFontFamily, FX_DWORD dwFontStyles, FX_WORD wCodePage);\r
102     IFX_Font*  GetFont() const\r
103     {\r
104         return m_pFont;\r
105     }\r
106 protected:\r
107     CFX_WideString                      m_wsFamily;\r
108     FX_DWORD                            m_dwStyles;\r
109     FX_DWORD                            m_dwCodePage;\r
110     IFX_Font                            *m_pFont;\r
111     IFX_FontMgr                         *m_pFontMgr;\r
112 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_\r
113     IFX_FontSourceEnum          *m_pFontSource;\r
114 #endif\r
115 };\r
116 class CFWL_FontManager : public CFX_Object\r
117 {\r
118 public:\r
119     CFWL_FontManager();\r
120     virtual ~CFWL_FontManager();\r
121     IFX_Font* FindFont(FX_WSTR wsFontFamily, FX_DWORD dwFontStyles, FX_WORD dwCodePage);\r
122 protected:\r
123     CFX_PtrArray    m_arrFonts;\r
124 };\r
125 CFWL_FontManager *FWL_GetFontManager();\r
126 #endif\r