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 #include "xfa/include/fwl/lightwidget/widget.h" | 7 #include "xfa/fwl/lightwidget/cfwl_widget.h" |
8 | 8 |
9 #include "xfa/fde/tto/fde_textout.h" | 9 #include "xfa/fde/tto/fde_textout.h" |
10 #include "xfa/fwl/core/cfwl_themetext.h" | 10 #include "xfa/fwl/core/cfwl_themetext.h" |
11 #include "xfa/fwl/core/fwl_noteimp.h" | 11 #include "xfa/fwl/core/fwl_noteimp.h" |
12 #include "xfa/fwl/core/fwl_noteimp.h" | 12 #include "xfa/fwl/core/fwl_noteimp.h" |
13 #include "xfa/fwl/core/fwl_targetimp.h" | 13 #include "xfa/fwl/core/fwl_targetimp.h" |
14 #include "xfa/fwl/core/fwl_widgetimp.h" | 14 #include "xfa/fwl/core/fwl_widgetimp.h" |
15 #include "xfa/fwl/core/fwl_widgetmgrimp.h" | 15 #include "xfa/fwl/core/fwl_widgetmgrimp.h" |
16 #include "xfa/fwl/core/ifwl_notethread.h" | 16 #include "xfa/fwl/core/ifwl_notethread.h" |
17 #include "xfa/fwl/core/ifwl_themeprovider.h" | 17 #include "xfa/fwl/core/ifwl_themeprovider.h" |
18 | 18 |
19 CFWL_WidgetImpProperties CFWL_WidgetProperties::MakeWidgetImpProperties( | |
20 IFWL_DataProvider* pDataProvider) const { | |
21 CFWL_WidgetImpProperties result; | |
22 result.m_ctmOnParent = m_ctmOnParent; | |
23 result.m_rtWidget = m_rtWidget; | |
24 result.m_dwStyles = m_dwStyles; | |
25 result.m_dwStyleExes = m_dwStyleExes; | |
26 result.m_dwStates = m_dwStates; | |
27 if (m_pParent) | |
28 result.m_pParent = m_pParent->GetWidget(); | |
29 if (m_pOwner) | |
30 result.m_pOwner = m_pOwner->GetWidget(); | |
31 result.m_pDataProvider = pDataProvider; | |
32 return result; | |
33 } | |
34 IFWL_Widget* CFWL_Widget::GetWidget() { | 19 IFWL_Widget* CFWL_Widget::GetWidget() { |
35 return m_pIface; | 20 return m_pIface; |
36 } | 21 } |
| 22 |
37 FWL_ERR CFWL_Widget::GetClassName(CFX_WideString& wsClass) const { | 23 FWL_ERR CFWL_Widget::GetClassName(CFX_WideString& wsClass) const { |
38 if (!m_pIface) | 24 if (!m_pIface) |
39 return FWL_ERR_Indefinite; | 25 return FWL_ERR_Indefinite; |
40 return m_pIface->GetClassName(wsClass); | 26 return m_pIface->GetClassName(wsClass); |
41 } | 27 } |
| 28 |
42 uint32_t CFWL_Widget::GetClassID() const { | 29 uint32_t CFWL_Widget::GetClassID() const { |
43 if (!m_pIface) | 30 if (!m_pIface) |
44 return 0; | 31 return 0; |
45 return m_pIface->GetClassID(); | 32 return m_pIface->GetClassID(); |
46 } | 33 } |
| 34 |
47 FX_BOOL CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { | 35 FX_BOOL CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { |
48 if (!m_pIface) | 36 if (!m_pIface) |
49 return FALSE; | 37 return FALSE; |
50 return m_pIface->IsInstance(wsClass); | 38 return m_pIface->IsInstance(wsClass); |
51 } | 39 } |
| 40 |
52 static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't'); | 41 static void* gs_pFWLWidget = (void*)FXBSTR_ID('l', 'i', 'g', 't'); |
| 42 |
53 FWL_ERR CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { | 43 FWL_ERR CFWL_Widget::Initialize(const CFWL_WidgetProperties* pProperties) { |
54 if (!m_pIface) | 44 if (!m_pIface) |
55 return FWL_ERR_Indefinite; | 45 return FWL_ERR_Indefinite; |
56 return m_pIface->SetPrivateData(gs_pFWLWidget, this, NULL); | 46 return m_pIface->SetPrivateData(gs_pFWLWidget, this, NULL); |
57 } | 47 } |
| 48 |
58 FWL_ERR CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { | 49 FWL_ERR CFWL_Widget::GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize) { |
59 if (!m_pIface) | 50 if (!m_pIface) |
60 return FWL_ERR_Indefinite; | 51 return FWL_ERR_Indefinite; |
61 return m_pIface->GetWidgetRect(rect, bAutoSize); | 52 return m_pIface->GetWidgetRect(rect, bAutoSize); |
62 } | 53 } |
| 54 |
63 FWL_ERR CFWL_Widget::GetGlobalRect(CFX_RectF& rect) { | 55 FWL_ERR CFWL_Widget::GetGlobalRect(CFX_RectF& rect) { |
64 if (!m_pIface) | 56 if (!m_pIface) |
65 return FWL_ERR_Indefinite; | 57 return FWL_ERR_Indefinite; |
66 return m_pIface->GetGlobalRect(rect); | 58 return m_pIface->GetGlobalRect(rect); |
67 } | 59 } |
| 60 |
68 FWL_ERR CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { | 61 FWL_ERR CFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { |
69 if (!m_pIface) | 62 if (!m_pIface) |
70 return FWL_ERR_Indefinite; | 63 return FWL_ERR_Indefinite; |
71 return m_pIface->SetWidgetRect(rect); | 64 return m_pIface->SetWidgetRect(rect); |
72 } | 65 } |
| 66 |
73 FWL_ERR CFWL_Widget::GetClientRect(CFX_RectF& rect) { | 67 FWL_ERR CFWL_Widget::GetClientRect(CFX_RectF& rect) { |
74 if (!m_pIface) | 68 if (!m_pIface) |
75 return FWL_ERR_Indefinite; | 69 return FWL_ERR_Indefinite; |
76 return m_pIface->GetClientRect(rect); | 70 return m_pIface->GetClientRect(rect); |
77 } | 71 } |
| 72 |
78 CFWL_Widget* CFWL_Widget::GetParent() { | 73 CFWL_Widget* CFWL_Widget::GetParent() { |
79 if (!m_pIface) | 74 if (!m_pIface) |
80 return NULL; | 75 return NULL; |
81 IFWL_Widget* parent = m_pIface->GetParent(); | 76 IFWL_Widget* parent = m_pIface->GetParent(); |
82 if (parent) { | 77 if (parent) { |
83 return static_cast<CFWL_Widget*>(parent->GetPrivateData(gs_pFWLWidget)); | 78 return static_cast<CFWL_Widget*>(parent->GetPrivateData(gs_pFWLWidget)); |
84 } | 79 } |
85 return NULL; | 80 return NULL; |
86 } | 81 } |
| 82 |
87 FWL_ERR CFWL_Widget::SetParent(CFWL_Widget* pParent) { | 83 FWL_ERR CFWL_Widget::SetParent(CFWL_Widget* pParent) { |
88 if (!m_pIface) | 84 if (!m_pIface) |
89 return FWL_ERR_Indefinite; | 85 return FWL_ERR_Indefinite; |
90 return m_pIface->SetParent(pParent ? pParent->GetWidget() : NULL); | 86 return m_pIface->SetParent(pParent ? pParent->GetWidget() : NULL); |
91 } | 87 } |
| 88 |
92 CFWL_Widget* CFWL_Widget::GetOwner() { | 89 CFWL_Widget* CFWL_Widget::GetOwner() { |
93 if (!m_pIface) | 90 if (!m_pIface) |
94 return NULL; | 91 return NULL; |
95 return NULL; | 92 return NULL; |
96 } | 93 } |
| 94 |
97 FWL_ERR CFWL_Widget::SetOwner(CFWL_Widget* pOwner) { | 95 FWL_ERR CFWL_Widget::SetOwner(CFWL_Widget* pOwner) { |
98 if (!m_pIface) | 96 if (!m_pIface) |
99 return FWL_ERR_Indefinite; | 97 return FWL_ERR_Indefinite; |
100 return FWL_ERR_Succeeded; | 98 return FWL_ERR_Succeeded; |
101 } | 99 } |
| 100 |
102 uint32_t CFWL_Widget::GetStyles() { | 101 uint32_t CFWL_Widget::GetStyles() { |
103 if (!m_pIface) | 102 if (!m_pIface) |
104 return 0; | 103 return 0; |
105 return m_pIface->GetStyles(); | 104 return m_pIface->GetStyles(); |
106 } | 105 } |
| 106 |
107 FWL_ERR CFWL_Widget::ModifyStyles(uint32_t dwStylesAdded, | 107 FWL_ERR CFWL_Widget::ModifyStyles(uint32_t dwStylesAdded, |
108 uint32_t dwStylesRemoved) { | 108 uint32_t dwStylesRemoved) { |
109 if (!m_pIface) | 109 if (!m_pIface) |
110 return FWL_ERR_Indefinite; | 110 return FWL_ERR_Indefinite; |
111 return m_pIface->ModifyStyles(dwStylesAdded, dwStylesRemoved); | 111 return m_pIface->ModifyStyles(dwStylesAdded, dwStylesRemoved); |
112 } | 112 } |
113 uint32_t CFWL_Widget::GetStylesEx() { | 113 uint32_t CFWL_Widget::GetStylesEx() { |
114 if (!m_pIface) | 114 if (!m_pIface) |
115 return 0; | 115 return 0; |
116 return m_pIface->GetStylesEx(); | 116 return m_pIface->GetStylesEx(); |
117 } | 117 } |
| 118 |
118 FWL_ERR CFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded, | 119 FWL_ERR CFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded, |
119 uint32_t dwStylesExRemoved) { | 120 uint32_t dwStylesExRemoved) { |
120 return m_pIface->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); | 121 return m_pIface->ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); |
121 } | 122 } |
| 123 |
122 uint32_t CFWL_Widget::GetStates() { | 124 uint32_t CFWL_Widget::GetStates() { |
123 if (!m_pIface) | 125 if (!m_pIface) |
124 return FWL_ERR_Indefinite; | 126 return FWL_ERR_Indefinite; |
125 return m_pIface->GetStates(); | 127 return m_pIface->GetStates(); |
126 } | 128 } |
| 129 |
127 FWL_ERR CFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) { | 130 FWL_ERR CFWL_Widget::SetStates(uint32_t dwStates, FX_BOOL bSet) { |
128 if (!m_pIface) | 131 if (!m_pIface) |
129 return FWL_ERR_Indefinite; | 132 return FWL_ERR_Indefinite; |
130 return m_pIface->SetStates(dwStates, bSet); | 133 return m_pIface->SetStates(dwStates, bSet); |
131 } | 134 } |
| 135 |
132 FWL_ERR CFWL_Widget::SetPrivateData(void* module_id, | 136 FWL_ERR CFWL_Widget::SetPrivateData(void* module_id, |
133 void* pData, | 137 void* pData, |
134 PD_CALLBACK_FREEDATA callback) { | 138 PD_CALLBACK_FREEDATA callback) { |
135 if (!m_pIface) | 139 if (!m_pIface) |
136 return FWL_ERR_Indefinite; | 140 return FWL_ERR_Indefinite; |
137 return m_pIface->SetPrivateData(module_id, pData, callback); | 141 return m_pIface->SetPrivateData(module_id, pData, callback); |
138 } | 142 } |
| 143 |
139 void* CFWL_Widget::GetPrivateData(void* module_id) { | 144 void* CFWL_Widget::GetPrivateData(void* module_id) { |
140 if (!m_pIface) | 145 if (!m_pIface) |
141 return NULL; | 146 return NULL; |
142 return m_pIface->GetPrivateData(module_id); | 147 return m_pIface->GetPrivateData(module_id); |
143 } | 148 } |
| 149 |
144 FWL_ERR CFWL_Widget::Update() { | 150 FWL_ERR CFWL_Widget::Update() { |
145 if (!m_pIface) | 151 if (!m_pIface) |
146 return FWL_ERR_Indefinite; | 152 return FWL_ERR_Indefinite; |
147 return m_pIface->Update(); | 153 return m_pIface->Update(); |
148 } | 154 } |
| 155 |
149 FWL_ERR CFWL_Widget::LockUpdate() { | 156 FWL_ERR CFWL_Widget::LockUpdate() { |
150 if (!m_pIface) | 157 if (!m_pIface) |
151 return FWL_ERR_Indefinite; | 158 return FWL_ERR_Indefinite; |
152 return m_pIface->LockUpdate(); | 159 return m_pIface->LockUpdate(); |
153 } | 160 } |
| 161 |
154 FWL_ERR CFWL_Widget::UnlockUpdate() { | 162 FWL_ERR CFWL_Widget::UnlockUpdate() { |
155 if (!m_pIface) | 163 if (!m_pIface) |
156 return FWL_ERR_Indefinite; | 164 return FWL_ERR_Indefinite; |
157 return m_pIface->UnlockUpdate(); | 165 return m_pIface->UnlockUpdate(); |
158 } | 166 } |
| 167 |
159 uint32_t CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { | 168 uint32_t CFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { |
160 if (!m_pIface) | 169 if (!m_pIface) |
161 return 0; | 170 return 0; |
162 return m_pIface->HitTest(fx, fy); | 171 return m_pIface->HitTest(fx, fy); |
163 } | 172 } |
| 173 |
164 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, | 174 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, |
165 FX_FLOAT& fx, | 175 FX_FLOAT& fx, |
166 FX_FLOAT& fy) { | 176 FX_FLOAT& fy) { |
167 if (!m_pIface) | 177 if (!m_pIface) |
168 return FWL_ERR_Indefinite; | 178 return FWL_ERR_Indefinite; |
169 return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, fx, fy); | 179 return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, fx, fy); |
170 } | 180 } |
| 181 |
171 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, CFX_RectF& rt) { | 182 FWL_ERR CFWL_Widget::TransformTo(CFWL_Widget* pWidget, CFX_RectF& rt) { |
172 if (!m_pIface) | 183 if (!m_pIface) |
173 return FWL_ERR_Indefinite; | 184 return FWL_ERR_Indefinite; |
174 return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, rt); | 185 return m_pIface->TransformTo(pWidget ? pWidget->GetWidget() : NULL, rt); |
175 } | 186 } |
| 187 |
176 FWL_ERR CFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { | 188 FWL_ERR CFWL_Widget::GetMatrix(CFX_Matrix& matrix, FX_BOOL bGlobal) { |
177 if (!m_pIface) | 189 if (!m_pIface) |
178 return FWL_ERR_Indefinite; | 190 return FWL_ERR_Indefinite; |
179 return m_pIface->GetMatrix(matrix, bGlobal); | 191 return m_pIface->GetMatrix(matrix, bGlobal); |
180 } | 192 } |
| 193 |
181 FWL_ERR CFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { | 194 FWL_ERR CFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { |
182 if (!m_pIface) | 195 if (!m_pIface) |
183 return FWL_ERR_Indefinite; | 196 return FWL_ERR_Indefinite; |
184 return m_pIface->SetMatrix(matrix); | 197 return m_pIface->SetMatrix(matrix); |
185 } | 198 } |
| 199 |
186 FWL_ERR CFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, | 200 FWL_ERR CFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, |
187 const CFX_Matrix* pMatrix) { | 201 const CFX_Matrix* pMatrix) { |
188 if (!m_pIface) | 202 if (!m_pIface) |
189 return FWL_ERR_Indefinite; | 203 return FWL_ERR_Indefinite; |
190 return m_pIface->DrawWidget(pGraphics, pMatrix); | 204 return m_pIface->DrawWidget(pGraphics, pMatrix); |
191 } | 205 } |
| 206 |
192 IFWL_WidgetDelegate* CFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { | 207 IFWL_WidgetDelegate* CFWL_Widget::SetDelegate(IFWL_WidgetDelegate* pDelegate) { |
193 if (!m_pIface) | 208 if (!m_pIface) |
194 return NULL; | 209 return NULL; |
195 m_pDelegate = m_pIface->SetDelegate(pDelegate); | 210 m_pDelegate = m_pIface->SetDelegate(pDelegate); |
196 return m_pDelegate; | 211 return m_pDelegate; |
197 } | 212 } |
| 213 |
198 CFWL_Widget::CFWL_Widget() | 214 CFWL_Widget::CFWL_Widget() |
199 : m_pIface(NULL), m_pDelegate(NULL), m_pProperties(NULL) { | 215 : m_pIface(NULL), m_pDelegate(NULL), m_pProperties(NULL) { |
200 m_pProperties = new CFWL_WidgetProperties; | 216 m_pProperties = new CFWL_WidgetProperties; |
201 m_pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); | 217 m_pWidgetMgr = static_cast<CFWL_WidgetMgr*>(FWL_GetWidgetMgr()); |
202 FXSYS_assert(m_pWidgetMgr != NULL); | 218 FXSYS_assert(m_pWidgetMgr != NULL); |
203 } | 219 } |
| 220 |
204 CFWL_Widget::~CFWL_Widget() { | 221 CFWL_Widget::~CFWL_Widget() { |
205 delete m_pProperties; | 222 delete m_pProperties; |
206 if (m_pIface) { | 223 if (m_pIface) { |
207 m_pIface->Finalize(); | 224 m_pIface->Finalize(); |
208 delete m_pIface; | 225 delete m_pIface; |
209 } | 226 } |
210 } | 227 } |
| 228 |
211 FWL_ERR CFWL_Widget::Repaint(const CFX_RectF* pRect) { | 229 FWL_ERR CFWL_Widget::Repaint(const CFX_RectF* pRect) { |
212 if (!m_pIface) | 230 if (!m_pIface) |
213 return FWL_ERR_Indefinite; | 231 return FWL_ERR_Indefinite; |
214 CFX_RectF rect; | 232 CFX_RectF rect; |
215 if (pRect) { | 233 if (pRect) { |
216 rect = *pRect; | 234 rect = *pRect; |
217 } else { | 235 } else { |
218 m_pIface->GetWidgetRect(rect); | 236 m_pIface->GetWidgetRect(rect); |
219 rect.left = rect.top = 0; | 237 rect.left = rect.top = 0; |
220 } | 238 } |
221 return m_pWidgetMgr->RepaintWidget(m_pIface, &rect); | 239 return m_pWidgetMgr->RepaintWidget(m_pIface, &rect); |
222 } | 240 } |
| 241 |
223 FWL_ERR CFWL_Widget::SetFocus(FX_BOOL bFocus) { | 242 FWL_ERR CFWL_Widget::SetFocus(FX_BOOL bFocus) { |
224 if (!m_pIface) | 243 if (!m_pIface) |
225 return FWL_ERR_Indefinite; | 244 return FWL_ERR_Indefinite; |
226 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); | 245 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); |
227 if (!pThread) | 246 if (!pThread) |
228 return FWL_ERR_Indefinite; | 247 return FWL_ERR_Indefinite; |
229 IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); | 248 IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); |
230 if (!pDriver) | 249 if (!pDriver) |
231 return FWL_ERR_Indefinite; | 250 return FWL_ERR_Indefinite; |
232 if (bFocus) { | 251 if (bFocus) { |
233 pDriver->SetFocus(m_pIface); | 252 pDriver->SetFocus(m_pIface); |
234 } else { | 253 } else { |
235 if (pDriver->GetFocus() == m_pIface) { | 254 if (pDriver->GetFocus() == m_pIface) { |
236 pDriver->SetFocus(NULL); | 255 pDriver->SetFocus(NULL); |
237 } | 256 } |
238 } | 257 } |
239 return FWL_ERR_Succeeded; | 258 return FWL_ERR_Succeeded; |
240 } | 259 } |
| 260 |
241 FWL_ERR CFWL_Widget::SetGrab(FX_BOOL bSet) { | 261 FWL_ERR CFWL_Widget::SetGrab(FX_BOOL bSet) { |
242 if (!m_pIface) | 262 if (!m_pIface) |
243 return FWL_ERR_Indefinite; | 263 return FWL_ERR_Indefinite; |
244 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); | 264 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); |
245 if (!pThread) | 265 if (!pThread) |
246 return FWL_ERR_Indefinite; | 266 return FWL_ERR_Indefinite; |
247 IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); | 267 IFWL_NoteDriver* pDriver = pThread->GetNoteDriver(); |
248 if (!pDriver) | 268 if (!pDriver) |
249 return FWL_ERR_Indefinite; | 269 return FWL_ERR_Indefinite; |
250 pDriver->SetGrab(m_pIface, bSet); | 270 pDriver->SetGrab(m_pIface, bSet); |
251 return FWL_ERR_Succeeded; | 271 return FWL_ERR_Succeeded; |
252 } | 272 } |
| 273 |
253 void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource, | 274 void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource, |
254 uint32_t dwFilter) { | 275 uint32_t dwFilter) { |
255 if (!m_pIface) | 276 if (!m_pIface) |
256 return; | 277 return; |
257 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); | 278 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); |
258 if (!pThread) | 279 if (!pThread) |
259 return; | 280 return; |
260 IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); | 281 IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); |
261 if (!pNoteDriver) | 282 if (!pNoteDriver) |
262 return; | 283 return; |
263 IFWL_Widget* pEventSourceImp = | 284 IFWL_Widget* pEventSourceImp = |
264 !pEventSource ? NULL : pEventSource->GetWidget(); | 285 !pEventSource ? NULL : pEventSource->GetWidget(); |
265 pNoteDriver->RegisterEventTarget(GetWidget(), pEventSourceImp, dwFilter); | 286 pNoteDriver->RegisterEventTarget(GetWidget(), pEventSourceImp, dwFilter); |
266 } | 287 } |
| 288 |
267 void CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { | 289 void CFWL_Widget::DispatchEvent(CFWL_Event* pEvent) { |
268 if (!m_pIface) | 290 if (!m_pIface) |
269 return; | 291 return; |
270 if (m_pIface->GetOuter()) { | 292 if (m_pIface->GetOuter()) { |
271 return; | 293 return; |
272 } | 294 } |
273 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); | 295 IFWL_NoteThread* pThread = m_pIface->GetOwnerThread(); |
274 if (!pThread) | 296 if (!pThread) |
275 return; | 297 return; |
276 IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); | 298 IFWL_NoteDriver* pNoteDriver = pThread->GetNoteDriver(); |
277 if (!pNoteDriver) | 299 if (!pNoteDriver) |
278 return; | 300 return; |
279 pNoteDriver->SendNote(pEvent); | 301 pNoteDriver->SendNote(pEvent); |
280 } | 302 } |
| 303 |
281 #define FWL_WGT_CalcHeight 2048 | 304 #define FWL_WGT_CalcHeight 2048 |
282 #define FWL_WGT_CalcWidth 2048 | 305 #define FWL_WGT_CalcWidth 2048 |
283 #define FWL_WGT_CalcMultiLineDefWidth 120.0f | 306 #define FWL_WGT_CalcMultiLineDefWidth 120.0f |
| 307 |
284 CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, | 308 CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText, |
285 FX_BOOL bMultiLine, | 309 FX_BOOL bMultiLine, |
286 int32_t iLineWidth) { | 310 int32_t iLineWidth) { |
287 if (!m_pIface) | 311 if (!m_pIface) |
288 return CFX_SizeF(); | 312 return CFX_SizeF(); |
289 IFWL_ThemeProvider* pTheme = m_pIface->GetThemeProvider(); | 313 IFWL_ThemeProvider* pTheme = m_pIface->GetThemeProvider(); |
290 if (!pTheme) | 314 if (!pTheme) |
291 return CFX_SizeF(); | 315 return CFX_SizeF(); |
292 | 316 |
293 CFWL_ThemeText calPart; | 317 CFWL_ThemeText calPart; |
294 calPart.m_pWidget = m_pIface; | 318 calPart.m_pWidget = m_pIface; |
295 calPart.m_wsText = wsText; | 319 calPart.m_wsText = wsText; |
296 calPart.m_dwTTOStyles = | 320 calPart.m_dwTTOStyles = |
297 bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; | 321 bMultiLine ? FDE_TTOSTYLE_LineWrap : FDE_TTOSTYLE_SingleLine; |
298 calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; | 322 calPart.m_iTTOAlign = FDE_TTOALIGNMENT_TopLeft; |
299 CFX_RectF rect; | 323 CFX_RectF rect; |
300 FX_FLOAT fWidth = bMultiLine | 324 FX_FLOAT fWidth = bMultiLine |
301 ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth | 325 ? (iLineWidth > 0 ? (FX_FLOAT)iLineWidth |
302 : FWL_WGT_CalcMultiLineDefWidth) | 326 : FWL_WGT_CalcMultiLineDefWidth) |
303 : FWL_WGT_CalcWidth; | 327 : FWL_WGT_CalcWidth; |
304 rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); | 328 rect.Set(0, 0, fWidth, FWL_WGT_CalcHeight); |
305 pTheme->CalcTextRect(&calPart, rect); | 329 pTheme->CalcTextRect(&calPart, rect); |
306 return CFX_SizeF(rect.width, rect.height); | 330 return CFX_SizeF(rect.width, rect.height); |
307 } | 331 } |
308 CFWL_WidgetDelegate::CFWL_WidgetDelegate() {} | |
309 CFWL_WidgetDelegate::~CFWL_WidgetDelegate() {} | |
310 int32_t CFWL_WidgetDelegate::OnProcessMessage(CFWL_Message* pMessage) { | |
311 return 1; | |
312 } | |
313 FWL_ERR CFWL_WidgetDelegate::OnProcessEvent(CFWL_Event* pEvent) { | |
314 return FWL_ERR_Succeeded; | |
315 } | |
316 FWL_ERR CFWL_WidgetDelegate::OnDrawWidget(CFX_Graphics* pGraphics, | |
317 const CFX_Matrix* pMatrix) { | |
318 return FWL_ERR_Succeeded; | |
319 } | |
OLD | NEW |