OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef XFA_FWL_CORE_IFWL_WIDGET_H_ | 7 #ifndef XFA_FWL_CORE_IFWL_WIDGET_H_ |
8 #define XFA_FWL_CORE_IFWL_WIDGET_H_ | 8 #define XFA_FWL_CORE_IFWL_WIDGET_H_ |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
11 | 11 |
12 #include "core/fxcrt/fx_coordinates.h" | 12 #include "core/fxcrt/fx_coordinates.h" |
13 #include "core/fxcrt/fx_system.h" | 13 #include "core/fxcrt/fx_system.h" |
14 #include "xfa/fwl/core/cfwl_event.h" | 14 #include "xfa/fwl/core/cfwl_event.h" |
15 #include "xfa/fwl/core/cfwl_themepart.h" | 15 #include "xfa/fwl/core/cfwl_themepart.h" |
16 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 16 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
17 #include "xfa/fwl/core/cfwl_widgetproperties.h" | |
18 #include "xfa/fwl/core/fwl_widgethit.h" | 17 #include "xfa/fwl/core/fwl_widgethit.h" |
19 #include "xfa/fwl/core/ifwl_widgetdelegate.h" | 18 #include "xfa/fwl/core/ifwl_widgetdelegate.h" |
20 #include "xfa/fwl/theme/cfwl_widgettp.h" | 19 #include "xfa/fwl/theme/cfwl_widgettp.h" |
21 | 20 |
22 // FWL contains two parallel inheritance hierarchies, which reference each | 21 // FWL contains two parallel inheritance hierarchies, which reference each |
23 // other via pointers as follows: | 22 // other via pointers as follows: |
24 // | 23 // |
25 // m_pAssociate | 24 // m_pAssociate |
26 // <---------- | 25 // <---------- |
27 // CFWL_Widget ----------> IFWL_Widget | 26 // CFWL_Widget ----------> IFWL_Widget |
(...skipping 24 matching lines...) Expand all Loading... |
52 SpinButton, | 51 SpinButton, |
53 ToolTip | 52 ToolTip |
54 }; | 53 }; |
55 | 54 |
56 class CFWL_AppImp; | 55 class CFWL_AppImp; |
57 class CFWL_MsgKey; | 56 class CFWL_MsgKey; |
58 class CFWL_Widget; | 57 class CFWL_Widget; |
59 class CFWL_WidgetProperties; | 58 class CFWL_WidgetProperties; |
60 class CFWL_WidgetMgr; | 59 class CFWL_WidgetMgr; |
61 class IFWL_App; | 60 class IFWL_App; |
62 class IFWL_DataProvider; | |
63 class IFWL_ThemeProvider; | 61 class IFWL_ThemeProvider; |
64 class IFWL_Widget; | 62 class IFWL_Widget; |
65 enum class FWL_Type; | 63 enum class FWL_Type; |
66 | 64 |
67 class IFWL_Widget : public IFWL_WidgetDelegate { | 65 class IFWL_Widget : public IFWL_WidgetDelegate { |
68 public: | 66 public: |
| 67 class DataProvider { |
| 68 public: |
| 69 virtual void GetCaption(IFWL_Widget* pWidget, |
| 70 CFX_WideString& wsCaption) = 0; |
| 71 }; |
| 72 |
69 ~IFWL_Widget() override; | 73 ~IFWL_Widget() override; |
70 | 74 |
71 virtual FWL_Type GetClassID() const = 0; | 75 virtual FWL_Type GetClassID() const = 0; |
72 virtual bool IsInstance(const CFX_WideStringC& wsClass) const; | 76 virtual bool IsInstance(const CFX_WideStringC& wsClass) const; |
73 virtual void GetWidgetRect(CFX_RectF& rect, bool bAutoSize = false); | 77 virtual void GetWidgetRect(CFX_RectF& rect, bool bAutoSize = false); |
74 virtual void GetClientRect(CFX_RectF& rect); | 78 virtual void GetClientRect(CFX_RectF& rect); |
75 virtual void ModifyStylesEx(uint32_t dwStylesExAdded, | 79 virtual void ModifyStylesEx(uint32_t dwStylesExAdded, |
76 uint32_t dwStylesExRemoved); | 80 uint32_t dwStylesExRemoved); |
77 virtual void SetStates(uint32_t dwStates, bool bSet = true); | 81 virtual void SetStates(uint32_t dwStates, bool bSet = true); |
78 virtual void Update(); | 82 virtual void Update(); |
79 virtual FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy); | 83 virtual FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy); |
80 virtual void DrawWidget(CFX_Graphics* pGraphics, | 84 virtual void DrawWidget(CFX_Graphics* pGraphics, |
81 const CFX_Matrix* pMatrix = nullptr); | 85 const CFX_Matrix* pMatrix = nullptr); |
82 virtual void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); | 86 virtual void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); |
83 | 87 |
84 // IFWL_WidgetDelegate. | 88 // IFWL_WidgetDelegate. |
85 void OnProcessMessage(CFWL_Message* pMessage) override; | 89 void OnProcessMessage(CFWL_Message* pMessage) override; |
86 void OnProcessEvent(CFWL_Event* pEvent) override; | 90 void OnProcessEvent(CFWL_Event* pEvent) override; |
87 void OnDrawWidget(CFX_Graphics* pGraphics, | 91 void OnDrawWidget(CFX_Graphics* pGraphics, |
88 const CFX_Matrix* pMatrix = nullptr) override; | 92 const CFX_Matrix* pMatrix = nullptr) override; |
89 | 93 |
90 void SetWidgetRect(const CFX_RectF& rect); | 94 void SetWidgetRect(const CFX_RectF& rect); |
91 | 95 |
92 void SetParent(IFWL_Widget* pParent); | 96 void SetParent(IFWL_Widget* pParent); |
93 | 97 |
94 IFWL_Widget* GetOwner() { return m_pWidgetMgr->GetOwnerWidget(this); } | 98 IFWL_Widget* GetOwner() { return m_pWidgetMgr->GetOwnerWidget(this); } |
95 IFWL_Widget* GetOuter() const { return m_pOuter; } | 99 IFWL_Widget* GetOuter() const { return m_pOuter; } |
96 | 100 |
97 uint32_t GetStyles() const { return m_pProperties->m_dwStyles; } | 101 uint32_t GetStyles() const; |
98 void ModifyStyles(uint32_t dwStylesAdded, uint32_t dwStylesRemoved); | 102 void ModifyStyles(uint32_t dwStylesAdded, uint32_t dwStylesRemoved); |
99 uint32_t GetStylesEx() const { return m_pProperties->m_dwStyleExes; } | 103 uint32_t GetStylesEx() const; |
100 uint32_t GetStates() const { return m_pProperties->m_dwStates; } | 104 uint32_t GetStates() const; |
101 | 105 |
102 void LockUpdate() { m_iLock++; } | 106 void LockUpdate() { m_iLock++; } |
103 void UnlockUpdate() { | 107 void UnlockUpdate() { |
104 if (IsLocked()) | 108 if (IsLocked()) |
105 m_iLock--; | 109 m_iLock--; |
106 } | 110 } |
107 | 111 |
108 void TransformTo(IFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); | 112 void TransformTo(IFWL_Widget* pWidget, FX_FLOAT& fx, FX_FLOAT& fy); |
109 void GetMatrix(CFX_Matrix& matrix, bool bGlobal = false); | 113 void GetMatrix(CFX_Matrix& matrix, bool bGlobal = false); |
110 IFWL_ThemeProvider* GetThemeProvider() const { | 114 IFWL_ThemeProvider* GetThemeProvider() const; |
111 return m_pProperties->m_pThemeProvider; | 115 IFWL_Widget::DataProvider* GetDataProvider() const; |
112 } | |
113 | |
114 IFWL_DataProvider* GetDataProvider() const { | |
115 return m_pProperties->m_pDataProvider; | |
116 } | |
117 | 116 |
118 void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; } | 117 void SetDelegate(IFWL_WidgetDelegate* delegate) { m_pDelegate = delegate; } |
119 IFWL_WidgetDelegate* GetDelegate() { | 118 IFWL_WidgetDelegate* GetDelegate() { |
120 return m_pDelegate ? m_pDelegate : this; | 119 return m_pDelegate ? m_pDelegate : this; |
121 } | 120 } |
122 const IFWL_WidgetDelegate* GetDelegate() const { | 121 const IFWL_WidgetDelegate* GetDelegate() const { |
123 return m_pDelegate ? m_pDelegate : this; | 122 return m_pDelegate ? m_pDelegate : this; |
124 } | 123 } |
125 | 124 |
126 const IFWL_App* GetOwnerApp() const { return m_pOwnerApp; } | 125 const IFWL_App* GetOwnerApp() const { return m_pOwnerApp; } |
127 uint32_t GetEventKey() const { return m_nEventKey; } | 126 uint32_t GetEventKey() const { return m_nEventKey; } |
128 void SetEventKey(uint32_t key) { m_nEventKey = key; } | 127 void SetEventKey(uint32_t key) { m_nEventKey = key; } |
129 | 128 |
130 void* GetLayoutItem() const { return m_pLayoutItem; } | 129 void* GetLayoutItem() const { return m_pLayoutItem; } |
131 void SetLayoutItem(void* pItem) { m_pLayoutItem = pItem; } | 130 void SetLayoutItem(void* pItem) { m_pLayoutItem = pItem; } |
132 | 131 |
133 void SetAssociateWidget(CFWL_Widget* pAssociate) { | 132 void SetAssociateWidget(CFWL_Widget* pAssociate) { |
134 m_pAssociate = pAssociate; | 133 m_pAssociate = pAssociate; |
135 } | 134 } |
136 | 135 |
137 void SetFocus(bool bFocus); | 136 void SetFocus(bool bFocus); |
138 void Repaint(const CFX_RectF* pRect = nullptr); | 137 void Repaint(const CFX_RectF* pRect = nullptr); |
139 | 138 |
140 protected: | 139 protected: |
141 IFWL_Widget(const IFWL_App* app, | 140 IFWL_Widget(const IFWL_App* app, |
142 std::unique_ptr<CFWL_WidgetProperties> properties, | 141 std::unique_ptr<CFWL_WidgetProperties> properties, |
143 IFWL_Widget* pOuter); | 142 IFWL_Widget* pOuter); |
144 | 143 |
145 bool IsEnabled() const { | 144 bool IsEnabled() const; |
146 return (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == 0; | 145 bool IsActive() const; |
147 } | |
148 bool IsActive() const { | |
149 return (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) == 0; | |
150 } | |
151 bool IsLocked() const { return m_iLock > 0; } | 146 bool IsLocked() const { return m_iLock > 0; } |
152 bool HasBorder() const { | 147 bool HasBorder() const; |
153 return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border); | 148 bool HasEdge() const; |
154 } | |
155 bool HasEdge() const { | |
156 return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask); | |
157 } | |
158 void GetEdgeRect(CFX_RectF& rtEdge); | 149 void GetEdgeRect(CFX_RectF& rtEdge); |
159 FX_FLOAT GetBorderSize(bool bCX = true); | 150 FX_FLOAT GetBorderSize(bool bCX = true); |
160 FX_FLOAT GetEdgeWidth(); | 151 FX_FLOAT GetEdgeWidth(); |
161 void GetRelativeRect(CFX_RectF& rect); | 152 void GetRelativeRect(CFX_RectF& rect); |
162 void* GetThemeCapacity(CFWL_WidgetCapacity dwCapacity); | 153 void* GetThemeCapacity(CFWL_WidgetCapacity dwCapacity); |
163 IFWL_ThemeProvider* GetAvailableTheme(); | 154 IFWL_ThemeProvider* GetAvailableTheme(); |
164 CFX_SizeF CalcTextSize(const CFX_WideString& wsText, | 155 CFX_SizeF CalcTextSize(const CFX_WideString& wsText, |
165 IFWL_ThemeProvider* pTheme, | 156 IFWL_ThemeProvider* pTheme, |
166 bool bMultiLine = false, | 157 bool bMultiLine = false, |
167 int32_t iLineWidth = -1); | 158 int32_t iLineWidth = -1); |
(...skipping 24 matching lines...) Expand all Loading... |
192 const IFWL_App* const m_pOwnerApp; | 183 const IFWL_App* const m_pOwnerApp; |
193 CFWL_WidgetMgr* const m_pWidgetMgr; | 184 CFWL_WidgetMgr* const m_pWidgetMgr; |
194 std::unique_ptr<CFWL_WidgetProperties> m_pProperties; | 185 std::unique_ptr<CFWL_WidgetProperties> m_pProperties; |
195 IFWL_Widget* m_pOuter; | 186 IFWL_Widget* m_pOuter; |
196 int32_t m_iLock; | 187 int32_t m_iLock; |
197 | 188 |
198 private: | 189 private: |
199 IFWL_Widget* GetParent() { return m_pWidgetMgr->GetParentWidget(this); } | 190 IFWL_Widget* GetParent() { return m_pWidgetMgr->GetParentWidget(this); } |
200 CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); | 191 CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); |
201 | 192 |
202 bool IsVisible() const { | 193 bool IsVisible() const; |
203 return (m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) == 0; | 194 bool IsOverLapper() const; |
204 } | 195 bool IsPopup() const; |
205 bool IsOverLapper() const { | 196 bool IsChild() const; |
206 return (m_pProperties->m_dwStyles & FWL_WGTSTYLE_WindowTypeMask) == | 197 bool IsOffscreen() const; |
207 FWL_WGTSTYLE_OverLapper; | |
208 } | |
209 bool IsPopup() const { | |
210 return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Popup); | |
211 } | |
212 bool IsChild() const { | |
213 return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child); | |
214 } | |
215 bool IsOffscreen() const { | |
216 return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Offscreen); | |
217 } | |
218 IFWL_Widget* GetRootOuter(); | 198 IFWL_Widget* GetRootOuter(); |
219 bool GetPopupPosMenu(FX_FLOAT fMinHeight, | 199 bool GetPopupPosMenu(FX_FLOAT fMinHeight, |
220 FX_FLOAT fMaxHeight, | 200 FX_FLOAT fMaxHeight, |
221 const CFX_RectF& rtAnchor, | 201 const CFX_RectF& rtAnchor, |
222 CFX_RectF& rtPopup); | 202 CFX_RectF& rtPopup); |
223 bool GetPopupPosComboBox(FX_FLOAT fMinHeight, | 203 bool GetPopupPosComboBox(FX_FLOAT fMinHeight, |
224 FX_FLOAT fMaxHeight, | 204 FX_FLOAT fMaxHeight, |
225 const CFX_RectF& rtAnchor, | 205 const CFX_RectF& rtAnchor, |
226 CFX_RectF& rtPopup); | 206 CFX_RectF& rtPopup); |
227 bool GetPopupPosGeneral(FX_FLOAT fMinHeight, | 207 bool GetPopupPosGeneral(FX_FLOAT fMinHeight, |
228 FX_FLOAT fMaxHeight, | 208 FX_FLOAT fMaxHeight, |
229 const CFX_RectF& rtAnchor, | 209 const CFX_RectF& rtAnchor, |
230 CFX_RectF& rtPopup); | 210 CFX_RectF& rtPopup); |
231 bool GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy); | 211 bool GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy); |
232 void DrawBackground(CFX_Graphics* pGraphics, | 212 void DrawBackground(CFX_Graphics* pGraphics, |
233 CFWL_Part iPartBk, | 213 CFWL_Part iPartBk, |
234 IFWL_ThemeProvider* pTheme, | 214 IFWL_ThemeProvider* pTheme, |
235 const CFX_Matrix* pMatrix = nullptr); | 215 const CFX_Matrix* pMatrix = nullptr); |
236 void NotifyDriver(); | 216 void NotifyDriver(); |
237 bool IsParent(IFWL_Widget* pParent); | 217 bool IsParent(IFWL_Widget* pParent); |
238 | 218 |
239 void* m_pLayoutItem; | 219 void* m_pLayoutItem; |
240 CFWL_Widget* m_pAssociate; | 220 CFWL_Widget* m_pAssociate; |
241 uint32_t m_nEventKey; | 221 uint32_t m_nEventKey; |
242 IFWL_WidgetDelegate* m_pDelegate; // Not owned. | 222 IFWL_WidgetDelegate* m_pDelegate; // Not owned. |
243 }; | 223 }; |
244 | 224 |
245 #endif // XFA_FWL_CORE_IFWL_WIDGET_H_ | 225 #endif // XFA_FWL_CORE_IFWL_WIDGET_H_ |
OLD | NEW |