Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxfa / src / app / xfa_ffwidget.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 _FXFA_FORMFILLER_WIDGET_IMP_H\r
8 #define _FXFA_FORMFILLER_WIDGET_IMP_H\r
9 \r
10 #include "../../../../include/fxfa/fxfa.h"\r
11 \r
12 class CXFA_FFPageView;\r
13 class CXFA_FFDocView;\r
14 class CXFA_FFDoc;\r
15 class CXFA_FFApp;\r
16 class CXFA_LayoutItem;\r
17 \r
18 #define XFA_GOTO_POSITION_IF_FAIL(arg, pos) { if (!(arg)) goto pos; }\r
19 inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi)\r
20 {\r
21     return fPx * 72.0f / fDpi;\r
22 }\r
23 #define XFA_FLOAT_PERCISION 0.001f\r
24 enum XFA_WIDGETITEM {\r
25     XFA_WIDGETITEM_Parent,\r
26     XFA_WIDGETITEM_FirstChild,\r
27     XFA_WIDGETITEM_NextSibling,\r
28     XFA_WIDGETITEM_PrevSibling,\r
29 };\r
30 class CXFA_CalcData\r
31 {\r
32 public:\r
33     CXFA_CalcData() : m_iRefCount(0) {}\r
34     ~CXFA_CalcData()\r
35     {\r
36         m_Globals.RemoveAll();\r
37     }\r
38     CFX_PtrArray                                m_Globals;\r
39     int32_t                                     m_iRefCount;\r
40 };\r
41 class CXFA_FFWidget : public IXFA_Widget, public CFX_PrivateData, public CXFA_ContentLayoutItemImpl\r
42 {\r
43 public:\r
44     CXFA_FFWidget(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);\r
45     virtual ~CXFA_FFWidget();\r
46     IXFA_PageView*      GetPageView();\r
47     void                        SetPageView(IXFA_PageView* pPageView);\r
48     void                        GetWidgetRect(CFX_RectF &rtWidget);\r
49     CFX_RectF           ReCacheWidgetRect();\r
50     FX_DWORD            GetStatus();\r
51     void                        ModifyStatus(FX_DWORD dwAdded, FX_DWORD dwRemoved);\r
52     virtual FX_BOOL                     GetBBox(CFX_RectF &rtBox, FX_DWORD dwStatus, FX_BOOL bDrawFocus = FALSE);\r
53     CXFA_WidgetAcc*     GetDataAcc();\r
54     FX_BOOL                     GetToolTip(CFX_WideString &wsToolTip);\r
55     virtual void                        RenderWidget(CFX_Graphics* pGS, CFX_Matrix* pMatrix = NULL, FX_DWORD dwStatus = 0, int32_t iRotate = 0);\r
56 \r
57     virtual     FX_BOOL                 IsLoaded();\r
58     virtual FX_BOOL                     LoadWidget();\r
59     virtual void                        UnloadWidget();\r
60     virtual FX_BOOL                     LayoutWidget();\r
61     virtual FX_BOOL                     UpdateFWLData();\r
62     virtual void                        UpdateWidgetProperty();\r
63     virtual FX_BOOL             OnMouseEnter();\r
64     virtual FX_BOOL             OnMouseExit();\r
65     virtual FX_BOOL             OnLButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
66     virtual FX_BOOL             OnLButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
67     virtual FX_BOOL             OnLButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
68     virtual FX_BOOL             OnMouseMove(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
69     virtual FX_BOOL             OnMouseWheel(FX_DWORD dwFlags, int16_t zDelta, FX_FLOAT fx, FX_FLOAT fy);\r
70     virtual FX_BOOL             OnRButtonDown(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
71     virtual FX_BOOL             OnRButtonUp(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
72     virtual FX_BOOL             OnRButtonDblClk(FX_DWORD dwFlags, FX_FLOAT fx, FX_FLOAT fy);\r
73 \r
74     virtual FX_BOOL             OnSetFocus(CXFA_FFWidget* pOldWidget);\r
75     virtual FX_BOOL             OnKillFocus(CXFA_FFWidget* pNewWidget);\r
76     virtual FX_BOOL             OnKeyDown(FX_DWORD dwKeyCode, FX_DWORD dwFlags);\r
77     virtual FX_BOOL             OnKeyUp(FX_DWORD dwKeyCode, FX_DWORD dwFlags);\r
78     virtual FX_BOOL             OnChar(FX_DWORD dwChar, FX_DWORD dwFlags);\r
79     virtual     FX_DWORD        OnHitTest(FX_FLOAT fx, FX_FLOAT fy);\r
80     virtual FX_BOOL             OnSetCursor(FX_FLOAT fx, FX_FLOAT fy);\r
81     virtual FX_BOOL             CanUndo()\r
82     {\r
83         return FALSE;\r
84     }\r
85     virtual FX_BOOL             CanRedo()\r
86     {\r
87         return FALSE;\r
88     }\r
89     virtual FX_BOOL             Undo()\r
90     {\r
91         return FALSE;\r
92     }\r
93     virtual FX_BOOL             Redo()\r
94     {\r
95         return FALSE;\r
96     }\r
97     virtual FX_BOOL             CanCopy()\r
98     {\r
99         return FALSE;\r
100     }\r
101     virtual FX_BOOL             CanCut()\r
102     {\r
103         return FALSE;\r
104     }\r
105     virtual FX_BOOL             CanPaste()\r
106     {\r
107         return FALSE;\r
108     }\r
109     virtual FX_BOOL             CanSelectAll()\r
110     {\r
111         return FALSE;\r
112     }\r
113     virtual FX_BOOL             CanDelete()\r
114     {\r
115         return CanCut();\r
116     }\r
117     virtual FX_BOOL             CanDeSelect()\r
118     {\r
119         return CanCopy();\r
120     }\r
121     virtual FX_BOOL             Copy(CFX_WideString &wsCopy)\r
122     {\r
123         return FALSE;\r
124     }\r
125     virtual FX_BOOL             Cut(CFX_WideString &wsCut)\r
126     {\r
127         return FALSE;\r
128     }\r
129     virtual FX_BOOL             Paste(const CFX_WideString &wsPaste)\r
130     {\r
131         return FALSE;\r
132     }\r
133     virtual FX_BOOL             SelectAll()\r
134     {\r
135         return FALSE;\r
136     }\r
137     virtual FX_BOOL             Delete()\r
138     {\r
139         return FALSE;\r
140     }\r
141     virtual FX_BOOL             DeSelect()\r
142     {\r
143         return FALSE;\r
144     }\r
145     virtual FX_BOOL             GetSuggestWords(CFX_PointF pointf, CFX_ByteStringArray &sSuggest)\r
146     {\r
147         return FALSE;\r
148     }\r
149     virtual FX_BOOL             ReplaceSpellCheckWord(CFX_PointF pointf, FX_BSTR bsReplace)\r
150     {\r
151         return FALSE;\r
152     }\r
153     CXFA_FFDocView*             GetDocView();\r
154     void                                SetDocView(CXFA_FFDocView* pDocView)\r
155     {\r
156         m_pDocView = pDocView;\r
157     }\r
158     CXFA_FFDoc*                 GetDoc();\r
159     CXFA_FFApp*                 GetApp();\r
160     IXFA_AppProvider*   GetAppProvider();\r
161     void                                InvalidateWidget(const CFX_RectF* pRect = NULL);\r
162     void                                AddInvalidateRect(const CFX_RectF* pRect = NULL);\r
163     FX_BOOL                             GetCaptionText(CFX_WideString &wsCap);\r
164     FX_BOOL                             IsFocused();\r
165     CXFA_LayoutItem*    GetLayoutItem()\r
166     {\r
167         return (CXFA_LayoutItem*)(CXFA_ContentLayoutItemImpl*)this;\r
168     }\r
169     void                                Rotate2Normal(FX_FLOAT &fx, FX_FLOAT &fy);\r
170     void                                GetRotateMatrix(CFX_Matrix &mt);\r
171     FX_BOOL                             IsLayoutRectEmpty();\r
172     CXFA_FFWidget*              GetParent();\r
173     FX_BOOL                             IsAncestorOf(CXFA_FFWidget* pWidget);\r
174 \r
175 protected:\r
176     virtual     FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy);\r
177     void        DrawBorder(CFX_Graphics* pGS, CXFA_Box box, const CFX_RectF& rtBorder, CFX_Matrix* pMatrix, FX_DWORD dwFlags = 0);\r
178     void        GetMinMaxWidth(FX_FLOAT fMinWidth, FX_FLOAT fMaxWidth);\r
179     void        GetMinMaxHeight(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight);\r
180     void        GetRectWithoutRotate(CFX_RectF &rtWidget);\r
181     FX_BOOL IsMatchVisibleStatus(FX_DWORD dwStatus);\r
182 \r
183     void                EventKillFocus();\r
184     FX_BOOL             IsButtonDown();\r
185     void                SetButtonDown(FX_BOOL bSet);\r
186     CXFA_FFDocView*             m_pDocView;\r
187     CXFA_FFPageView*    m_pPageView;\r
188     CXFA_WidgetAcc*             m_pDataAcc;\r
189     CFX_RectF                   m_rtWidget;\r
190 };\r
191 int32_t         XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics, int32_t iStrokeType, int32_t iCapType);\r
192 CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap);\r
193 void                    XFA_DrawImage(CFX_Graphics* pGS, const CFX_RectF &rtImage, CFX_Matrix* pMatrix, CFX_DIBitmap* pDIBitmap, int32_t iAspect, int32_t iImageXDpi, int32_t iImageYDpi, int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left, int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top);\r
194 CFX_DIBitmap*   XFA_LoadImageData(CXFA_FFDoc *pDoc, CXFA_Image *pImage, FX_BOOL &bNameImage, int32_t &iImageXDpi, int32_t &iImageYDpi);\r
195 CFX_DIBitmap*   XFA_LoadImageFromBuffer(IFX_FileRead* pImageFileRead, FXCODEC_IMAGE_TYPE type, int32_t &iImageXDpi, int32_t &iImageYDpi);\r
196 FXCODEC_IMAGE_TYPE XFA_GetImageType(FX_WSTR wsType);\r
197 FX_LPSTR                XFA_Base64Encode(FX_LPCBYTE buf, int32_t buf_len);\r
198 void                    XFA_RectWidthoutMargin(CFX_RectF &rt, const CXFA_Margin &mg, FX_BOOL bUI = FALSE);\r
199 FX_FLOAT                XFA_GetEdgeThickness(const CXFA_StrokeArray &strokes, FX_BOOL b3DStyle, int32_t nIndex);\r
200 CXFA_FFWidget*  XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);\r
201 FX_BOOL                 XFA_IsCreateWidget(XFA_ELEMENT iType);\r
202 #define XFA_DRAWBOX_ForceRound  1\r
203 #define XFA_DRAWBOX_Lowered3D   2\r
204 void XFA_DrawBox(CXFA_Box box, CFX_Graphics* pGS, const CFX_RectF &rtWidget, CFX_Matrix* pMatrix, FX_DWORD dwFlags = 0);\r
205 #endif\r