Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Side by Side Diff: xfa/fwl/core/cfwl_widgetmgr.cpp

Issue 2501743002: Cleaning methods and visibility in cfwl_* files. (Closed)
Patch Set: review feedback Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fwl/core/cfwl_widgetmgr.h ('k') | xfa/fwl/core/fwl_noteimp.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fwl/core/cfwl_widgetmgr.h" 7 #include "xfa/fwl/core/cfwl_widgetmgr.h"
8 8
9 #include "xfa/fwl/core/cfwl_message.h" 9 #include "xfa/fwl/core/cfwl_message.h"
10 #include "xfa/fwl/core/fwl_noteimp.h" 10 #include "xfa/fwl/core/fwl_noteimp.h"
(...skipping 17 matching lines...) Expand all
28 28
29 bool FWL_UseOffscreen(IFWL_Widget* pWidget) { 29 bool FWL_UseOffscreen(IFWL_Widget* pWidget) {
30 #if (_FX_OS_ == _FX_MACOSX_) 30 #if (_FX_OS_ == _FX_MACOSX_)
31 return false; 31 return false;
32 #else 32 #else
33 return !!(pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen); 33 return !!(pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen);
34 #endif 34 #endif
35 } 35 }
36 36
37 CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) 37 CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative)
38 : m_dwCapability(0), 38 : m_dwCapability(0), m_pAdapter(pAdapterNative->GetWidgetMgr(this)) {
39 m_pDelegate(new CFWL_WidgetMgrDelegate(this)),
40 m_pAdapter(pAdapterNative->GetWidgetMgr(m_pDelegate.get())) {
41 ASSERT(m_pAdapter); 39 ASSERT(m_pAdapter);
42 m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem); 40 m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem);
43 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) 41 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
44 m_rtScreen.Reset(); 42 m_rtScreen.Reset();
45 #endif 43 #endif
46 } 44 }
47 45
48 CFWL_WidgetMgr::~CFWL_WidgetMgr() {} 46 CFWL_WidgetMgr::~CFWL_WidgetMgr() {}
49 47
50 IFWL_Widget* CFWL_WidgetMgr::GetParentWidget(IFWL_Widget* pWidget) const { 48 IFWL_Widget* CFWL_WidgetMgr::GetParentWidget(IFWL_Widget* pWidget) const {
(...skipping 18 matching lines...) Expand all
69 IFWL_Widget* CFWL_WidgetMgr::GetPriorSiblingWidget(IFWL_Widget* pWidget) const { 67 IFWL_Widget* CFWL_WidgetMgr::GetPriorSiblingWidget(IFWL_Widget* pWidget) const {
70 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 68 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
71 return pItem && pItem->pPrevious ? pItem->pPrevious->pWidget : nullptr; 69 return pItem && pItem->pPrevious ? pItem->pPrevious->pWidget : nullptr;
72 } 70 }
73 71
74 IFWL_Widget* CFWL_WidgetMgr::GetNextSiblingWidget(IFWL_Widget* pWidget) const { 72 IFWL_Widget* CFWL_WidgetMgr::GetNextSiblingWidget(IFWL_Widget* pWidget) const {
75 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 73 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
76 return pItem && pItem->pNext ? pItem->pNext->pWidget : nullptr; 74 return pItem && pItem->pNext ? pItem->pNext->pWidget : nullptr;
77 } 75 }
78 76
79 IFWL_Widget* CFWL_WidgetMgr::GetLastSiblingWidget(IFWL_Widget* pWidget) const {
80 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
81 pItem = pItem ? pItem->pNext : nullptr; // Not self.
82 while (pItem && pItem->pNext)
83 pItem = pItem->pNext;
84
85 return pItem ? pItem->pWidget : nullptr;
86 }
87
88 IFWL_Widget* CFWL_WidgetMgr::GetFirstChildWidget(IFWL_Widget* pWidget) const { 77 IFWL_Widget* CFWL_WidgetMgr::GetFirstChildWidget(IFWL_Widget* pWidget) const {
89 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 78 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
90 return pItem && pItem->pChild ? pItem->pChild->pWidget : nullptr; 79 return pItem && pItem->pChild ? pItem->pChild->pWidget : nullptr;
91 } 80 }
92 81
93 IFWL_Widget* CFWL_WidgetMgr::GetLastChildWidget(IFWL_Widget* pWidget) const { 82 IFWL_Widget* CFWL_WidgetMgr::GetLastChildWidget(IFWL_Widget* pWidget) const {
94 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 83 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
95 pItem = pItem ? pItem->pChild : nullptr; 84 pItem = pItem ? pItem->pChild : nullptr;
96 while (pItem && pItem->pNext) 85 while (pItem && pItem->pNext)
97 pItem = pItem->pNext; 86 pItem = pItem->pNext;
98 87
99 return pItem ? pItem->pWidget : nullptr; 88 return pItem ? pItem->pWidget : nullptr;
100 } 89 }
101 90
102 IFWL_Widget* CFWL_WidgetMgr::GetSystemFormWidget(IFWL_Widget* pWidget) const { 91 IFWL_Widget* CFWL_WidgetMgr::GetSystemFormWidget(IFWL_Widget* pWidget) const {
103 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 92 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
104 while (pItem) { 93 while (pItem) {
105 if (IsAbleNative(pItem->pWidget)) 94 if (IsAbleNative(pItem->pWidget))
106 return pItem->pWidget; 95 return pItem->pWidget;
107 pItem = pItem->pParent; 96 pItem = pItem->pParent;
108 } 97 }
109 return nullptr; 98 return nullptr;
110 } 99 }
111 100
112 bool CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { 101 void CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) {
113 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 102 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
114 if (!pItem) 103 if (!pItem)
115 return false; 104 return;
116 if (!pItem->pParent) 105 if (!pItem->pParent)
117 return false; 106 return;
118 CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; 107 CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild;
119 int32_t i = 0; 108 int32_t i = 0;
120 while (pChild) { 109 while (pChild) {
121 if (pChild == pItem) { 110 if (pChild == pItem) {
122 if (i == nIndex) { 111 if (i == nIndex)
123 return true; 112 return;
124 }
125 if (pChild->pPrevious) { 113 if (pChild->pPrevious) {
126 pChild->pPrevious->pNext = pChild->pNext; 114 pChild->pPrevious->pNext = pChild->pNext;
127 } 115 }
128 if (pChild->pNext) { 116 if (pChild->pNext) {
129 pChild->pNext->pPrevious = pChild->pPrevious; 117 pChild->pNext->pPrevious = pChild->pPrevious;
130 } 118 }
131 if (pItem->pParent->pChild == pItem) { 119 if (pItem->pParent->pChild == pItem) {
132 pItem->pParent->pChild = pItem->pNext; 120 pItem->pParent->pChild = pItem->pNext;
133 } 121 }
134 pItem->pNext = nullptr; 122 pItem->pNext = nullptr;
135 pItem->pPrevious = nullptr; 123 pItem->pPrevious = nullptr;
136 break; 124 break;
137 } 125 }
138 if (!pChild->pNext) { 126 if (!pChild->pNext) {
139 break; 127 break;
140 } 128 }
141 pChild = pChild->pNext; 129 pChild = pChild->pNext;
142 ++i; 130 ++i;
143 } 131 }
144 pChild = pItem->pParent->pChild; 132 pChild = pItem->pParent->pChild;
145 if (pChild) { 133 if (pChild) {
146 if (nIndex < 0) { 134 if (nIndex < 0) {
147 while (pChild->pNext) { 135 while (pChild->pNext) {
148 pChild = pChild->pNext; 136 pChild = pChild->pNext;
149 } 137 }
150 pChild->pNext = pItem; 138 pChild->pNext = pItem;
151 pItem->pPrevious = pChild; 139 pItem->pPrevious = pChild;
152 pItem->pNext = nullptr; 140 pItem->pNext = nullptr;
153 return true; 141 return;
154 } 142 }
155 i = 0; 143 i = 0;
156 while (i < nIndex && pChild->pNext) { 144 while (i < nIndex && pChild->pNext) {
157 pChild = pChild->pNext; 145 pChild = pChild->pNext;
158 ++i; 146 ++i;
159 } 147 }
160 if (!pChild->pNext) { 148 if (!pChild->pNext) {
161 pChild->pNext = pItem; 149 pChild->pNext = pItem;
162 pItem->pPrevious = pChild; 150 pItem->pPrevious = pChild;
163 pItem->pNext = nullptr; 151 pItem->pNext = nullptr;
164 return true; 152 return;
165 } 153 }
166 if (pChild->pPrevious) { 154 if (pChild->pPrevious) {
167 pItem->pPrevious = pChild->pPrevious; 155 pItem->pPrevious = pChild->pPrevious;
168 pChild->pPrevious->pNext = pItem; 156 pChild->pPrevious->pNext = pItem;
169 } 157 }
170 pChild->pPrevious = pItem; 158 pChild->pPrevious = pItem;
171 pItem->pNext = pChild; 159 pItem->pNext = pChild;
172 if (pItem->pParent->pChild == pChild) { 160 if (pItem->pParent->pChild == pChild) {
173 pItem->pParent->pChild = pItem; 161 pItem->pParent->pChild = pItem;
174 } 162 }
175 } else { 163 } else {
176 pItem->pParent->pChild = pItem; 164 pItem->pParent->pChild = pItem;
177 pItem->pPrevious = nullptr; 165 pItem->pPrevious = nullptr;
178 pItem->pNext = nullptr; 166 pItem->pNext = nullptr;
179 } 167 }
180 return true;
181 } 168 }
182 FWL_Error CFWL_WidgetMgr::RepaintWidget(IFWL_Widget* pWidget, 169
183 const CFX_RectF* pRect) { 170 void CFWL_WidgetMgr::RepaintWidget(IFWL_Widget* pWidget,
171 const CFX_RectF* pRect) {
184 if (!m_pAdapter) 172 if (!m_pAdapter)
185 return FWL_Error::Indefinite; 173 return;
174
186 IFWL_Widget* pNative = pWidget; 175 IFWL_Widget* pNative = pWidget;
187 CFX_RectF rect(*pRect); 176 CFX_RectF rect(*pRect);
188 if (IsFormDisabled()) { 177 if (IsFormDisabled()) {
189 IFWL_Widget* pOuter = pWidget->GetOuter(); 178 IFWL_Widget* pOuter = pWidget->GetOuter();
190 while (pOuter) { 179 while (pOuter) {
191 CFX_RectF rtTemp; 180 CFX_RectF rtTemp;
192 pNative->GetWidgetRect(rtTemp); 181 pNative->GetWidgetRect(rtTemp);
193 rect.left += rtTemp.left; 182 rect.left += rtTemp.left;
194 rect.top += rtTemp.top; 183 rect.top += rtTemp.top;
195 pNative = pOuter; 184 pNative = pOuter;
196 pOuter = pOuter->GetOuter(); 185 pOuter = pOuter->GetOuter();
197 } 186 }
198 } else if (!IsAbleNative(pWidget)) { 187 } else if (!IsAbleNative(pWidget)) {
199 pNative = GetSystemFormWidget(pWidget); 188 pNative = GetSystemFormWidget(pWidget);
200 if (!pNative) 189 if (!pNative)
201 return FWL_Error::Indefinite; 190 return;
191
202 pWidget->TransformTo(pNative, rect.left, rect.top); 192 pWidget->TransformTo(pNative, rect.left, rect.top);
203 } 193 }
204 AddRedrawCounts(pNative); 194 AddRedrawCounts(pNative);
205 return m_pAdapter->RepaintWidget(pNative, &rect); 195 m_pAdapter->RepaintWidget(pNative, &rect);
206 } 196 }
207 void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { 197
208 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(nullptr);
209 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
210 if (!pItem) {
211 pItem = new CFWL_WidgetMgrItem(pWidget);
212 m_mapWidgetItem[pWidget].reset(pItem);
213 }
214 if (pItem->pParent && pItem->pParent != pParentItem) {
215 if (pItem->pPrevious) {
216 pItem->pPrevious->pNext = pItem->pNext;
217 }
218 if (pItem->pNext) {
219 pItem->pNext->pPrevious = pItem->pPrevious;
220 }
221 if (pItem->pParent->pChild == pItem) {
222 pItem->pParent->pChild = pItem->pNext;
223 }
224 }
225 pItem->pParent = pParentItem;
226 SetWidgetIndex(pWidget, -1);
227 }
228 void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent, 198 void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent,
229 IFWL_Widget* pChild, 199 IFWL_Widget* pChild,
230 int32_t nIndex) { 200 int32_t nIndex) {
231 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); 201 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent);
232 if (!pParentItem) { 202 if (!pParentItem) {
233 pParentItem = new CFWL_WidgetMgrItem(pParent); 203 pParentItem = new CFWL_WidgetMgrItem(pParent);
234 m_mapWidgetItem[pParent].reset(pParentItem); 204 m_mapWidgetItem[pParent].reset(pParentItem);
235 pParentItem->pParent = GetWidgetMgrItem(nullptr); 205 pParentItem->pParent = GetWidgetMgrItem(nullptr);
236 SetWidgetIndex(pParent, -1); 206 SetWidgetIndex(pParent, -1);
237 } 207 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 if (pItem->pParent->pChild == pItem) { 276 if (pItem->pParent->pChild == pItem) {
307 pItem->pParent->pChild = pItem->pNext; 277 pItem->pParent->pChild = pItem->pNext;
308 } 278 }
309 pItem->pNext = nullptr; 279 pItem->pNext = nullptr;
310 pItem->pPrevious = nullptr; 280 pItem->pPrevious = nullptr;
311 } 281 }
312 pItem->pParent = pParentItem; 282 pItem->pParent = pParentItem;
313 SetWidgetIndex(pChild, -1); 283 SetWidgetIndex(pChild, -1);
314 } 284 }
315 285
316 bool CFWL_WidgetMgr::IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent) { 286 void CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget,
317 IFWL_Widget* pTemp = pChild; 287 const CFX_RectF& rect) {
318 do {
319 if (pTemp == pParent)
320 return true;
321 pTemp = GetParentWidget(pTemp);
322 } while (pTemp);
323 return false;
324 }
325
326 FWL_Error CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget,
327 const CFX_RectF& rect) {
328 if (FWL_UseOffscreen(pWidget)) { 288 if (FWL_UseOffscreen(pWidget)) {
329 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 289 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
330 pItem->iRedrawCounter++; 290 pItem->iRedrawCounter++;
331 if (pItem->pOffscreen) { 291 if (pItem->pOffscreen) {
332 CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice(); 292 CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice();
333 if (pDevice && pDevice->GetBitmap()) { 293 if (pDevice && pDevice->GetBitmap()) {
334 CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); 294 CFX_DIBitmap* pBitmap = pDevice->GetBitmap();
335 if (pBitmap->GetWidth() - rect.width > 1 || 295 if (pBitmap->GetWidth() - rect.width > 1 ||
336 pBitmap->GetHeight() - rect.height > 1) { 296 pBitmap->GetHeight() - rect.height > 1) {
337 pItem->pOffscreen.reset(); 297 pItem->pOffscreen.reset();
338 } 298 }
339 } 299 }
340 } 300 }
341 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) 301 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
342 pItem->bOutsideChanged = !m_rtScreen.Contains(rect); 302 pItem->bOutsideChanged = !m_rtScreen.Contains(rect);
343 #endif 303 #endif
344 } 304 }
345 return FWL_Error::Succeeded;
346 } 305 }
347 306
348 IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, 307 IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent,
349 FX_FLOAT x, 308 FX_FLOAT x,
350 FX_FLOAT y) { 309 FX_FLOAT y) {
351 if (!parent) 310 if (!parent)
352 return nullptr; 311 return nullptr;
353 FX_FLOAT x1; 312 FX_FLOAT x1;
354 FX_FLOAT y1; 313 FX_FLOAT y1;
355 IFWL_Widget* child = GetLastChildWidget(parent); 314 IFWL_Widget* child = GetLastChildWidget(parent);
(...skipping 20 matching lines...) Expand all
376 return parent; 335 return parent;
377 } 336 }
378 337
379 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, 338 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm,
380 FX_FLOAT fx, 339 FX_FLOAT fx,
381 FX_FLOAT fy) { 340 FX_FLOAT fy) {
382 if (FWL_UseOffscreen(pForm)) 341 if (FWL_UseOffscreen(pForm))
383 GetWidgetMgrItem(pForm)->pOffscreen.reset(); 342 GetWidgetMgrItem(pForm)->pOffscreen.reset();
384 } 343 }
385 344
386 IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, 345 IFWL_Widget* CFWL_WidgetMgr::NextTab(IFWL_Widget* parent,
387 IFWL_Widget* focus, 346 IFWL_Widget* focus,
388 bool& bFind) { 347 bool& bFind) {
389 CFWL_WidgetMgr* pMgr = parent->GetOwnerApp()->GetWidgetMgr(); 348 CFWL_WidgetMgr* pMgr = parent->GetOwnerApp()->GetWidgetMgr();
390 IFWL_Widget* child = pMgr->GetFirstChildWidget(parent); 349 IFWL_Widget* child = pMgr->GetFirstChildWidget(parent);
391 while (child) { 350 while (child) {
392 if (focus == child) 351 if (focus == child)
393 bFind = true; 352 bFind = true;
394 353
395 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && 354 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) &&
396 (!focus || (focus != child && bFind))) { 355 (!focus || (focus != child && bFind))) {
397 return child; 356 return child;
398 } 357 }
399 IFWL_Widget* bRet = nextTab(child, focus, bFind); 358 IFWL_Widget* bRet = NextTab(child, focus, bFind);
400 if (bRet) 359 if (bRet)
401 return bRet; 360 return bRet;
402 361
403 child = pMgr->GetNextSiblingWidget(child); 362 child = pMgr->GetNextSiblingWidget(child);
404 } 363 }
405 return nullptr; 364 return nullptr;
406 } 365 }
407 366
408 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { 367 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) const {
409 int32_t iRet = 0; 368 int32_t iRet = 0;
410 IFWL_Widget* pChild = pFirst; 369 IFWL_Widget* pChild = pFirst;
411 while (pChild) { 370 while (pChild) {
412 pChild = GetNextSiblingWidget(pChild); 371 pChild = GetNextSiblingWidget(pChild);
413 ++iRet; 372 ++iRet;
414 } 373 }
415 return iRet; 374 return iRet;
416 } 375 }
417 IFWL_Widget* CFWL_WidgetMgr::GetSiblingRadioButton(IFWL_Widget* pWidget, 376
418 bool bNext) { 377 IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader(
378 IFWL_Widget* pRadioButton) const {
379 IFWL_Widget* pNext = pRadioButton;
380 if (pNext && (pNext->GetStyles() & FWL_WGTSTYLE_Group))
381 return pNext;
419 return nullptr; 382 return nullptr;
420 } 383 }
421 IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader( 384
422 IFWL_Widget* pRadioButton) {
423 IFWL_Widget* pNext = pRadioButton;
424 while (pNext) {
425 if (pNext->GetStyles() & FWL_WGTSTYLE_Group)
426 return pNext;
427 pNext = GetSiblingRadioButton(pNext, false);
428 }
429 pNext = GetLastSiblingWidget(pRadioButton);
430 while ((pNext = GetSiblingRadioButton(pNext, false)) != nullptr &&
431 pNext != pRadioButton) {
432 if (pNext->GetStyles() & FWL_WGTSTYLE_Group)
433 return pNext;
434 }
435 pNext = GetFirstSiblingWidget(pRadioButton);
436 return GetSiblingRadioButton(pNext, true);
437 }
438 void CFWL_WidgetMgr::GetSameGroupRadioButton( 385 void CFWL_WidgetMgr::GetSameGroupRadioButton(
439 IFWL_Widget* pRadioButton, 386 IFWL_Widget* pRadioButton,
440 CFX_ArrayTemplate<IFWL_Widget*>& group) { 387 CFX_ArrayTemplate<IFWL_Widget*>& group) const {
441 IFWL_Widget* pFirst = GetFirstSiblingWidget(pRadioButton); 388 IFWL_Widget* pFirst = GetFirstSiblingWidget(pRadioButton);
442 if (!pFirst) { 389 if (!pFirst) {
443 pFirst = pRadioButton; 390 pFirst = pRadioButton;
444 } 391 }
445 int32_t iGroup = CountRadioButtonGroup(pFirst); 392 int32_t iGroup = CountRadioButtonGroup(pFirst);
446 if (iGroup < 2) { 393 if (iGroup < 2)
447 IFWL_Widget* pNext = pFirst;
448 while ((pNext = GetSiblingRadioButton(pNext, true)) != nullptr) {
449 group.Add(pNext);
450 }
451 return; 394 return;
452 } 395 group.Add(GetRadioButtonGroupHeader(pRadioButton));
453 IFWL_Widget* pNext = GetRadioButtonGroupHeader(pRadioButton);
454 do {
455 group.Add(pNext);
456 pNext = GetSiblingRadioButton(pNext, true);
457 if (!pNext)
458 pNext = GetSiblingRadioButton(pFirst, true);
459 } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0));
460 } 396 }
461 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { 397
398 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) const {
462 if ((pParent->GetClassID() == FWL_Type::PushButton) && 399 if ((pParent->GetClassID() == FWL_Type::PushButton) &&
463 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { 400 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) {
464 return pParent; 401 return pParent;
465 } 402 }
466 IFWL_Widget* child = 403 IFWL_Widget* child =
467 pParent->GetOwnerApp()->GetWidgetMgr()->GetFirstChildWidget(pParent); 404 pParent->GetOwnerApp()->GetWidgetMgr()->GetFirstChildWidget(pParent);
468 while (child) { 405 while (child) {
469 if ((child->GetClassID() == FWL_Type::PushButton) && 406 if ((child->GetClassID() == FWL_Type::PushButton) &&
470 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { 407 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) {
471 return child; 408 return child;
472 } 409 }
473 IFWL_Widget* find = GetDefaultButton(child); 410 IFWL_Widget* find = GetDefaultButton(child);
474 if (find) { 411 if (find) {
475 return find; 412 return find;
476 } 413 }
477 child = child->GetOwnerApp()->GetWidgetMgr()->GetNextSiblingWidget(child); 414 child = child->GetOwnerApp()->GetWidgetMgr()->GetNextSiblingWidget(child);
478 } 415 }
479 return nullptr; 416 return nullptr;
480 } 417 }
418
481 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { 419 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) {
482 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 420 GetWidgetMgrItem(pWidget)->iRedrawCounter++;
483 (pItem->iRedrawCounter)++;
484 } 421 }
422
485 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { 423 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) {
486 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); 424 GetWidgetMgrItem(pWidget)->iRedrawCounter = 0;
487 pItem->iRedrawCounter = 0;
488 } 425 }
426
489 CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem( 427 CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem(
490 IFWL_Widget* pWidget) const { 428 IFWL_Widget* pWidget) const {
491 auto it = m_mapWidgetItem.find(pWidget); 429 auto it = m_mapWidgetItem.find(pWidget);
492 return it != m_mapWidgetItem.end() 430 return it != m_mapWidgetItem.end()
493 ? static_cast<CFWL_WidgetMgrItem*>(it->second.get()) 431 ? static_cast<CFWL_WidgetMgrItem*>(it->second.get())
494 : nullptr; 432 : nullptr;
495 } 433 }
496 int32_t CFWL_WidgetMgr::TravelWidgetMgr(CFWL_WidgetMgrItem* pParent,
497 int32_t* pIndex,
498 CFWL_WidgetMgrItem* pItem,
499 IFWL_Widget** pWidget) {
500 if (!pParent) {
501 return 0;
502 }
503 int32_t iCount = 0;
504 CFWL_WidgetMgrItem* pChild = pParent->pChild;
505 while (pChild) {
506 iCount++;
507 if (pIndex) {
508 if (*pIndex == 0) {
509 *pWidget = pChild->pWidget;
510 return iCount;
511 }
512 pIndex--;
513 }
514 if (pItem && pItem == pChild) {
515 return iCount - 1;
516 }
517 pChild = pChild->pNext;
518 }
519 if (pIndex) {
520 return 0;
521 } else if (pItem) {
522 return -1;
523 }
524 return iCount - 1;
525 }
526 434
527 bool CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) const { 435 bool CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) const {
528 if (!pWidget) 436 if (!pWidget)
529 return false; 437 return false;
530 if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { 438 if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) {
531 return false; 439 return false;
532 } 440 }
533 uint32_t dwStyles = pWidget->GetStyles(); 441 uint32_t dwStyles = pWidget->GetStyles();
534 return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == 442 return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) ==
535 FWL_WGTSTYLE_OverLapper) || 443 FWL_WGTSTYLE_OverLapper) ||
536 (dwStyles & FWL_WGTSTYLE_Popup); 444 (dwStyles & FWL_WGTSTYLE_Popup);
537 } 445 }
538 446
539 bool CFWL_WidgetMgr::IsThreadEnabled() { 447 void CFWL_WidgetMgr::GetAdapterPopupPos(IFWL_Widget* pWidget,
540 return !(m_dwCapability & FWL_WGTMGR_DisableThread);
541 }
542
543 bool CFWL_WidgetMgr::IsFormDisabled() {
544 return !!(m_dwCapability & FWL_WGTMGR_DisableForm);
545 }
546
547 bool CFWL_WidgetMgr::GetAdapterPopupPos(IFWL_Widget* pWidget,
548 FX_FLOAT fMinHeight, 448 FX_FLOAT fMinHeight,
549 FX_FLOAT fMaxHeight, 449 FX_FLOAT fMaxHeight,
550 const CFX_RectF& rtAnchor, 450 const CFX_RectF& rtAnchor,
551 CFX_RectF& rtPopup) { 451 CFX_RectF& rtPopup) const {
552 CXFA_FWLAdapterWidgetMgr* pSDApapter = GetAdapterWidgetMgr(); 452 m_pAdapter->GetPopupPos(pWidget, fMinHeight, fMaxHeight, rtAnchor, rtPopup);
553 return pSDApapter->GetPopupPos(pWidget, fMinHeight, fMaxHeight, rtAnchor,
554 rtPopup);
555 }
556 CFWL_WidgetMgrDelegate::CFWL_WidgetMgrDelegate(CFWL_WidgetMgr* pWidgetMgr)
557 : m_pWidgetMgr(pWidgetMgr) {}
558 FWL_Error CFWL_WidgetMgrDelegate::OnSetCapability(uint32_t dwCapability) {
559 m_pWidgetMgr->m_dwCapability = dwCapability;
560 return FWL_Error::Succeeded;
561 } 453 }
562 454
563 void CFWL_WidgetMgrDelegate::OnProcessMessageToForm(CFWL_Message* pMessage) { 455 void CFWL_WidgetMgr::OnSetCapability(uint32_t dwCapability) {
456 m_dwCapability = dwCapability;
457 }
458
459 void CFWL_WidgetMgr::OnProcessMessageToForm(CFWL_Message* pMessage) {
564 if (!pMessage) 460 if (!pMessage)
565 return; 461 return;
566 if (!pMessage->m_pDstTarget) 462 if (!pMessage->m_pDstTarget)
567 return; 463 return;
568 464
569 IFWL_Widget* pDstWidget = pMessage->m_pDstTarget; 465 IFWL_Widget* pDstWidget = pMessage->m_pDstTarget;
570 const IFWL_App* pApp = pDstWidget->GetOwnerApp(); 466 const IFWL_App* pApp = pDstWidget->GetOwnerApp();
571 if (!pApp) 467 if (!pApp)
572 return; 468 return;
573 469
574 CFWL_NoteDriver* pNoteDriver = 470 CFWL_NoteDriver* pNoteDriver =
575 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver()); 471 static_cast<CFWL_NoteDriver*>(pApp->GetNoteDriver());
576 if (!pNoteDriver) 472 if (!pNoteDriver)
577 return; 473 return;
578 474
579 if (m_pWidgetMgr->IsThreadEnabled()) 475 if (IsThreadEnabled())
580 pMessage = static_cast<CFWL_Message*>(pMessage->Clone()); 476 pMessage = static_cast<CFWL_Message*>(pMessage->Clone());
581 if (m_pWidgetMgr->IsFormDisabled()) 477 if (IsFormDisabled())
582 pNoteDriver->ProcessMessage(pMessage); 478 pNoteDriver->ProcessMessage(pMessage);
583 else 479 else
584 pNoteDriver->QueueMessage(pMessage); 480 pNoteDriver->QueueMessage(pMessage);
585 481
586 #if (_FX_OS_ == _FX_MACOSX_) 482 #if (_FX_OS_ == _FX_MACOSX_)
587 CFWL_NoteLoop* pTopLoop = pNoteDriver->GetTopLoop(); 483 CFWL_NoteLoop* pTopLoop = pNoteDriver->GetTopLoop();
588 if (pTopLoop) 484 if (pTopLoop)
589 pNoteDriver->UnqueueMessage(pTopLoop); 485 pNoteDriver->UnqueueMessage(pTopLoop);
590 #endif 486 #endif
591 487
592 if (m_pWidgetMgr->IsThreadEnabled()) 488 if (IsThreadEnabled())
593 pMessage->Release(); 489 pMessage->Release();
594 490
595 return; 491 return;
596 } 492 }
597 493
598 void CFWL_WidgetMgrDelegate::OnDrawWidget(IFWL_Widget* pWidget, 494 void CFWL_WidgetMgr::OnDrawWidget(IFWL_Widget* pWidget,
599 CFX_Graphics* pGraphics, 495 CFX_Graphics* pGraphics,
600 const CFX_Matrix* pMatrix) { 496 const CFX_Matrix* pMatrix) {
601 if (!pWidget || !pGraphics) 497 if (!pWidget || !pGraphics)
602 return; 498 return;
603 499
604 CFX_Graphics* pTemp = DrawWidgetBefore(pWidget, pGraphics, pMatrix); 500 CFX_Graphics* pTemp = DrawWidgetBefore(pWidget, pGraphics, pMatrix);
605 CFX_RectF clipCopy; 501 CFX_RectF clipCopy;
606 pWidget->GetWidgetRect(clipCopy); 502 pWidget->GetWidgetRect(clipCopy);
607 clipCopy.left = clipCopy.top = 0; 503 clipCopy.left = clipCopy.top = 0;
608 if (bUseOffscreenDirect(pWidget)) { 504 if (UseOffscreenDirect(pWidget)) {
609 DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); 505 DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix);
610 return; 506 return;
611 } 507 }
612 CFX_RectF clipBounds; 508 CFX_RectF clipBounds;
613 509
614 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ || \ 510 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_ || \
615 _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_ 511 _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_ANDROID_
616 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix); 512 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix);
617 pGraphics->GetClipRect(clipBounds); 513 pGraphics->GetClipRect(clipBounds);
618 clipCopy = clipBounds; 514 clipCopy = clipBounds;
619 #elif _FX_OS_ == _FX_MACOSX_ 515 #elif _FX_OS_ == _FX_MACOSX_
620 if (m_pWidgetMgr->IsFormDisabled()) { 516 if (IsFormDisabled()) {
621 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix); 517 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix);
622 pGraphics->GetClipRect(clipBounds); 518 pGraphics->GetClipRect(clipBounds);
623 clipCopy = clipBounds; 519 clipCopy = clipBounds;
624 } else { 520 } else {
625 clipBounds.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d); 521 clipBounds.Set(pMatrix->a, pMatrix->b, pMatrix->c, pMatrix->d);
626 const_cast<CFX_Matrix*>(pMatrix)->SetIdentity(); // FIXME: const cast. 522 const_cast<CFX_Matrix*>(pMatrix)->SetIdentity(); // FIXME: const cast.
627 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix); 523 pWidget->GetDelegate()->OnDrawWidget(pTemp, pMatrix);
628 } 524 }
629 #endif // _FX_OS_ == _FX_MACOSX_ 525 #endif // _FX_OS_ == _FX_MACOSX_
630 526
631 if (!m_pWidgetMgr->IsFormDisabled()) { 527 if (!IsFormDisabled()) {
632 CFX_RectF rtClient; 528 CFX_RectF rtClient;
633 pWidget->GetClientRect(rtClient); 529 pWidget->GetClientRect(rtClient);
634 clipBounds.Intersect(rtClient); 530 clipBounds.Intersect(rtClient);
635 } 531 }
636 if (!clipBounds.IsEmpty()) 532 if (!clipBounds.IsEmpty())
637 DrawChild(pWidget, clipBounds, pTemp, pMatrix); 533 DrawChild(pWidget, clipBounds, pTemp, pMatrix);
638 534
639 DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); 535 DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix);
640 m_pWidgetMgr->ResetRedrawCounts(pWidget); 536 ResetRedrawCounts(pWidget);
641 } 537 }
642 538
643 void CFWL_WidgetMgrDelegate::DrawChild(IFWL_Widget* parent, 539 void CFWL_WidgetMgr::DrawChild(IFWL_Widget* parent,
644 const CFX_RectF& rtClip, 540 const CFX_RectF& rtClip,
645 CFX_Graphics* pGraphics, 541 CFX_Graphics* pGraphics,
646 const CFX_Matrix* pMatrix) { 542 const CFX_Matrix* pMatrix) {
647 if (!parent) 543 if (!parent)
648 return; 544 return;
649 545
650 bool bFormDisable = m_pWidgetMgr->IsFormDisabled(); 546 bool bFormDisable = IsFormDisabled();
651 IFWL_Widget* pNextChild = m_pWidgetMgr->GetFirstChildWidget(parent); 547 IFWL_Widget* pNextChild = GetFirstChildWidget(parent);
652 while (pNextChild) { 548 while (pNextChild) {
653 IFWL_Widget* child = pNextChild; 549 IFWL_Widget* child = pNextChild;
654 pNextChild = m_pWidgetMgr->GetNextSiblingWidget(child); 550 pNextChild = GetNextSiblingWidget(child);
655 if (child->GetStates() & FWL_WGTSTATE_Invisible) 551 if (child->GetStates() & FWL_WGTSTATE_Invisible)
656 continue; 552 continue;
657 553
658 CFX_RectF rtWidget; 554 CFX_RectF rtWidget;
659 child->GetWidgetRect(rtWidget); 555 child->GetWidgetRect(rtWidget);
660 if (rtWidget.IsEmpty()) 556 if (rtWidget.IsEmpty())
661 continue; 557 continue;
662 558
663 CFX_Matrix widgetMatrix; 559 CFX_Matrix widgetMatrix;
664 CFX_RectF clipBounds(rtWidget); 560 CFX_RectF clipBounds(rtWidget);
665 if (!bFormDisable) 561 if (!bFormDisable)
666 child->GetMatrix(widgetMatrix, true); 562 child->GetMatrix(widgetMatrix, true);
667 if (pMatrix) 563 if (pMatrix)
668 widgetMatrix.Concat(*pMatrix); 564 widgetMatrix.Concat(*pMatrix);
669 565
670 if (!bFormDisable) { 566 if (!bFormDisable) {
671 widgetMatrix.TransformPoint(clipBounds.left, clipBounds.top); 567 widgetMatrix.TransformPoint(clipBounds.left, clipBounds.top);
672 clipBounds.Intersect(rtClip); 568 clipBounds.Intersect(rtClip);
673 if (clipBounds.IsEmpty()) 569 if (clipBounds.IsEmpty())
674 continue; 570 continue;
675 571
676 pGraphics->SaveGraphState(); 572 pGraphics->SaveGraphState();
677 pGraphics->SetClipRect(clipBounds); 573 pGraphics->SetClipRect(clipBounds);
678 } 574 }
679 widgetMatrix.Translate(rtWidget.left, rtWidget.top, true); 575 widgetMatrix.Translate(rtWidget.left, rtWidget.top, true);
680 576
681 if (IFWL_WidgetDelegate* pDelegate = child->GetDelegate()) { 577 if (IFWL_WidgetDelegate* pDelegate = child->GetDelegate()) {
682 if (m_pWidgetMgr->IsFormDisabled() || 578 if (IsFormDisabled() || IsNeedRepaint(child, &widgetMatrix, rtClip)) {
683 IsNeedRepaint(child, &widgetMatrix, rtClip)) {
684 pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); 579 pDelegate->OnDrawWidget(pGraphics, &widgetMatrix);
685 } 580 }
686 } 581 }
687 if (!bFormDisable) 582 if (!bFormDisable)
688 pGraphics->RestoreGraphState(); 583 pGraphics->RestoreGraphState();
689 584
690 DrawChild(child, clipBounds, pGraphics, 585 DrawChild(child, clipBounds, pGraphics,
691 bFormDisable ? &widgetMatrix : pMatrix); 586 bFormDisable ? &widgetMatrix : pMatrix);
692 child = m_pWidgetMgr->GetNextSiblingWidget(child); 587 child = GetNextSiblingWidget(child);
693 } 588 }
694 } 589 }
695 590
696 CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( 591 CFX_Graphics* CFWL_WidgetMgr::DrawWidgetBefore(IFWL_Widget* pWidget,
697 IFWL_Widget* pWidget, 592 CFX_Graphics* pGraphics,
698 CFX_Graphics* pGraphics, 593 const CFX_Matrix* pMatrix) {
699 const CFX_Matrix* pMatrix) {
700 if (!FWL_UseOffscreen(pWidget)) 594 if (!FWL_UseOffscreen(pWidget))
701 return pGraphics; 595 return pGraphics;
702 596
703 CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); 597 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
704 if (!pItem->pOffscreen) { 598 if (!pItem->pOffscreen) {
705 pItem->pOffscreen.reset(new CFX_Graphics); 599 pItem->pOffscreen.reset(new CFX_Graphics);
706 CFX_RectF rect; 600 CFX_RectF rect;
707 pWidget->GetWidgetRect(rect); 601 pWidget->GetWidgetRect(rect);
708 pItem->pOffscreen->Create((int32_t)rect.width, (int32_t)rect.height, 602 pItem->pOffscreen->Create((int32_t)rect.width, (int32_t)rect.height,
709 FXDIB_Argb); 603 FXDIB_Argb);
710 } 604 }
711 CFX_RectF rect; 605 CFX_RectF rect;
712 pGraphics->GetClipRect(rect); 606 pGraphics->GetClipRect(rect);
713 pItem->pOffscreen->SetClipRect(rect); 607 pItem->pOffscreen->SetClipRect(rect);
714 return pItem->pOffscreen.get(); 608 return pItem->pOffscreen.get();
715 } 609 }
716 610
717 void CFWL_WidgetMgrDelegate::DrawWidgetAfter(IFWL_Widget* pWidget, 611 void CFWL_WidgetMgr::DrawWidgetAfter(IFWL_Widget* pWidget,
718 CFX_Graphics* pGraphics, 612 CFX_Graphics* pGraphics,
719 CFX_RectF& rtClip, 613 CFX_RectF& rtClip,
720 const CFX_Matrix* pMatrix) { 614 const CFX_Matrix* pMatrix) {
721 if (FWL_UseOffscreen(pWidget)) { 615 if (FWL_UseOffscreen(pWidget)) {
722 CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); 616 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
723 pGraphics->Transfer(pItem->pOffscreen.get(), rtClip.left, rtClip.top, 617 pGraphics->Transfer(pItem->pOffscreen.get(), rtClip.left, rtClip.top,
724 rtClip, pMatrix); 618 rtClip, pMatrix);
725 #ifdef _WIN32 619 #ifdef _WIN32
726 pItem->pOffscreen->ClearClip(); 620 pItem->pOffscreen->ClearClip();
727 #endif 621 #endif
728 } 622 }
729 CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); 623 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
730 pItem->iRedrawCounter = 0; 624 pItem->iRedrawCounter = 0;
731 } 625 }
732 626
733 bool CFWL_WidgetMgrDelegate::IsNeedRepaint(IFWL_Widget* pWidget, 627 bool CFWL_WidgetMgr::IsNeedRepaint(IFWL_Widget* pWidget,
734 CFX_Matrix* pMatrix, 628 CFX_Matrix* pMatrix,
735 const CFX_RectF& rtDirty) { 629 const CFX_RectF& rtDirty) {
736 CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); 630 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
737 if (pItem && pItem->iRedrawCounter > 0) { 631 if (pItem && pItem->iRedrawCounter > 0) {
738 pItem->iRedrawCounter = 0; 632 pItem->iRedrawCounter = 0;
739 return true; 633 return true;
740 } 634 }
741 CFX_RectF rtWidget; 635 CFX_RectF rtWidget;
742 pWidget->GetWidgetRect(rtWidget); 636 pWidget->GetWidgetRect(rtWidget);
743 rtWidget.left = rtWidget.top = 0; 637 rtWidget.left = rtWidget.top = 0;
744 pMatrix->TransformRect(rtWidget); 638 pMatrix->TransformRect(rtWidget);
745 if (!rtWidget.IntersectWith(rtDirty)) 639 if (!rtWidget.IntersectWith(rtDirty))
746 return false; 640 return false;
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 } 716 }
823 if (repaintPoint > 0) 717 if (repaintPoint > 0)
824 return true; 718 return true;
825 719
826 pMatrix->TransformRect(rtChilds); 720 pMatrix->TransformRect(rtChilds);
827 if (rtChilds.Contains(rtDirty) || rtChilds.Contains(rtWidget)) 721 if (rtChilds.Contains(rtDirty) || rtChilds.Contains(rtWidget))
828 return false; 722 return false;
829 return true; 723 return true;
830 } 724 }
831 725
832 bool CFWL_WidgetMgrDelegate::bUseOffscreenDirect(IFWL_Widget* pWidget) { 726 bool CFWL_WidgetMgr::UseOffscreenDirect(IFWL_Widget* pWidget) const {
833 CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); 727 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget);
834 if (!FWL_UseOffscreen(pWidget) || !(pItem->pOffscreen)) 728 if (!FWL_UseOffscreen(pWidget) || !(pItem->pOffscreen))
835 return false; 729 return false;
836 730
837 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) 731 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
838 if (pItem->bOutsideChanged) { 732 if (pItem->bOutsideChanged) {
839 CFX_RectF r; 733 CFX_RectF r;
840 pWidget->GetWidgetRect(r); 734 pWidget->GetWidgetRect(r);
841 CFX_RectF temp(m_pWidgetMgr->m_rtScreen); 735 CFX_RectF temp(m_rtScreen);
842 temp.Deflate(50, 50); 736 temp.Deflate(50, 50);
843 if (!temp.Contains(r)) 737 if (!temp.Contains(r))
844 return false; 738 return false;
845 739
846 pItem->bOutsideChanged = false; 740 pItem->bOutsideChanged = false;
847 } 741 }
848 #endif 742 #endif
849 743
850 return pItem->iRedrawCounter == 0; 744 return pItem->iRedrawCounter == 0;
851 } 745 }
852 746
853 CFWL_WidgetMgrItem::CFWL_WidgetMgrItem() : CFWL_WidgetMgrItem(nullptr) {} 747 CFWL_WidgetMgrItem::CFWL_WidgetMgrItem() : CFWL_WidgetMgrItem(nullptr) {}
854 748
855 CFWL_WidgetMgrItem::CFWL_WidgetMgrItem(IFWL_Widget* widget) 749 CFWL_WidgetMgrItem::CFWL_WidgetMgrItem(IFWL_Widget* widget)
856 : pParent(nullptr), 750 : pParent(nullptr),
857 pOwner(nullptr), 751 pOwner(nullptr),
858 pChild(nullptr), 752 pChild(nullptr),
859 pPrevious(nullptr), 753 pPrevious(nullptr),
860 pNext(nullptr), 754 pNext(nullptr),
861 pWidget(widget), 755 pWidget(widget),
862 iRedrawCounter(0) 756 iRedrawCounter(0)
863 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) 757 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_)
864 , 758 ,
865 bOutsideChanged(false) 759 bOutsideChanged(false)
866 #endif 760 #endif
867 { 761 {
868 } 762 }
869 763
870 CFWL_WidgetMgrItem::~CFWL_WidgetMgrItem() {} 764 CFWL_WidgetMgrItem::~CFWL_WidgetMgrItem() {}
OLDNEW
« no previous file with comments | « xfa/fwl/core/cfwl_widgetmgr.h ('k') | xfa/fwl/core/fwl_noteimp.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698