| 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/fwl/core/fwl_widgetmgrimp.h" | 7 #include "xfa/fwl/core/fwl_widgetmgrimp.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_appimp.h" | 10 #include "xfa/fwl/core/fwl_appimp.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 } // namespace | 29 } // namespace |
| 30 | 30 |
| 31 FX_BOOL FWL_UseOffscreen(IFWL_Widget* pWidget) { | 31 FX_BOOL FWL_UseOffscreen(IFWL_Widget* pWidget) { |
| 32 #if (_FX_OS_ == _FX_MACOSX_) | 32 #if (_FX_OS_ == _FX_MACOSX_) |
| 33 return FALSE; | 33 return FALSE; |
| 34 #else | 34 #else |
| 35 return pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen; | 35 return pWidget->GetStyles() & FWL_WGTSTYLE_Offscreen; |
| 36 #endif | 36 #endif |
| 37 } | 37 } |
| 38 | 38 |
| 39 IFWL_WidgetMgr* FWL_GetWidgetMgr() { | 39 // static |
| 40 CFWL_WidgetMgr* CFWL_WidgetMgr::GetInstance() { |
| 40 IFWL_App* pApp = FWL_GetApp(); | 41 IFWL_App* pApp = FWL_GetApp(); |
| 41 if (!pApp) | 42 return pApp ? pApp->GetWidgetMgr() : nullptr; |
| 42 return NULL; | |
| 43 return pApp->GetWidgetMgr(); | |
| 44 } | 43 } |
| 45 | 44 |
| 46 CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) | 45 CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) |
| 47 : m_dwCapability(0), | 46 : m_dwCapability(0), |
| 48 m_pDelegate(new CFWL_WidgetMgrDelegate(this)), | 47 m_pDelegate(new CFWL_WidgetMgrDelegate(this)), |
| 49 m_pAdapter(pAdapterNative->GetWidgetMgr(m_pDelegate.get())) { | 48 m_pAdapter(pAdapterNative->GetWidgetMgr(m_pDelegate.get())) { |
| 50 ASSERT(m_pAdapter); | 49 ASSERT(m_pAdapter); |
| 51 m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem); | 50 m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem); |
| 52 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) | 51 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) |
| 53 m_rtScreen.Reset(); | 52 m_rtScreen.Reset(); |
| 54 #endif | 53 #endif |
| 55 } | 54 } |
| 56 | 55 |
| 57 CFWL_WidgetMgr::~CFWL_WidgetMgr() {} | 56 CFWL_WidgetMgr::~CFWL_WidgetMgr() {} |
| 58 | 57 |
| 59 int32_t CFWL_WidgetMgr::CountWidgets(IFWL_Widget* pParent) { | 58 IFWL_Widget* CFWL_WidgetMgr::GetParentWidget(IFWL_Widget* pWidget) const { |
| 60 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); | 59 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 61 return TravelWidgetMgr(pParentItem, NULL, NULL); | 60 return pItem && pItem->pParent ? pItem->pParent->pWidget : nullptr; |
| 62 } | 61 } |
| 63 IFWL_Widget* CFWL_WidgetMgr::GetWidget(int32_t nIndex, IFWL_Widget* pParent) { | 62 |
| 64 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); | 63 IFWL_Widget* CFWL_WidgetMgr::GetOwnerWidget(IFWL_Widget* pWidget) const { |
| 65 IFWL_Widget* pWidget = NULL; | 64 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 66 TravelWidgetMgr(pParentItem, &nIndex, NULL, &pWidget); | 65 return pItem && pItem->pOwner ? pItem->pOwner->pWidget : nullptr; |
| 67 return pWidget; | |
| 68 } | 66 } |
| 69 IFWL_Widget* CFWL_WidgetMgr::GetWidget(IFWL_Widget* pWidget, | 67 |
| 70 FWL_WGTRELATION eRelation) { | 68 IFWL_Widget* CFWL_WidgetMgr::GetFirstSiblingWidget(IFWL_Widget* pWidget) const { |
| 71 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 69 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 72 if (!pItem) { | 70 pItem = pItem ? pItem->pPrevious : nullptr; // Not self. |
| 73 return NULL; | 71 while (pItem && pItem->pPrevious) |
| 72 pItem = pItem->pPrevious; |
| 73 |
| 74 return pItem ? pItem->pWidget : nullptr; |
| 75 } |
| 76 |
| 77 IFWL_Widget* CFWL_WidgetMgr::GetPriorSiblingWidget(IFWL_Widget* pWidget) const { |
| 78 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 79 return pItem && pItem->pPrevious ? pItem->pPrevious->pWidget : nullptr; |
| 80 } |
| 81 |
| 82 IFWL_Widget* CFWL_WidgetMgr::GetNextSiblingWidget(IFWL_Widget* pWidget) const { |
| 83 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 84 return pItem && pItem->pNext ? pItem->pNext->pWidget : nullptr; |
| 85 } |
| 86 |
| 87 IFWL_Widget* CFWL_WidgetMgr::GetLastSiblingWidget(IFWL_Widget* pWidget) const { |
| 88 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 89 pItem = pItem ? pItem->pNext : nullptr; // Not self. |
| 90 while (pItem && pItem->pNext) |
| 91 pItem = pItem->pNext; |
| 92 |
| 93 return pItem ? pItem->pWidget : nullptr; |
| 94 } |
| 95 |
| 96 IFWL_Widget* CFWL_WidgetMgr::GetFirstChildWidget(IFWL_Widget* pWidget) const { |
| 97 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 98 return pItem && pItem->pChild ? pItem->pChild->pWidget : nullptr; |
| 99 } |
| 100 |
| 101 IFWL_Widget* CFWL_WidgetMgr::GetLastChildWidget(IFWL_Widget* pWidget) const { |
| 102 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 103 pItem = pItem ? pItem->pChild : nullptr; |
| 104 while (pItem && pItem->pNext) |
| 105 pItem = pItem->pNext; |
| 106 |
| 107 return pItem ? pItem->pWidget : nullptr; |
| 108 } |
| 109 |
| 110 IFWL_Widget* CFWL_WidgetMgr::GetSystemFormWidget(IFWL_Widget* pWidget) const { |
| 111 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 112 while (pItem) { |
| 113 if (IsAbleNative(pItem->pWidget)) |
| 114 return pItem->pWidget; |
| 115 pItem = pItem->pParent; |
| 74 } | 116 } |
| 75 IFWL_Widget* pRet = NULL; | 117 return nullptr; |
| 76 switch (eRelation) { | |
| 77 case FWL_WGTRELATION_Parent: { | |
| 78 pRet = pItem->pParent ? pItem->pParent->pWidget : NULL; | |
| 79 break; | |
| 80 } | |
| 81 case FWL_WGTRELATION_Owner: { | |
| 82 pRet = pItem->pOwner ? pItem->pOwner->pWidget : NULL; | |
| 83 break; | |
| 84 } | |
| 85 case FWL_WGTRELATION_FirstSibling: { | |
| 86 pItem = pItem->pPrevious; | |
| 87 while (pItem && pItem->pPrevious) { | |
| 88 pItem = pItem->pPrevious; | |
| 89 } | |
| 90 pRet = pItem ? pItem->pWidget : NULL; | |
| 91 break; | |
| 92 } | |
| 93 case FWL_WGTRELATION_PriorSibling: { | |
| 94 pRet = pItem->pPrevious ? pItem->pPrevious->pWidget : NULL; | |
| 95 break; | |
| 96 } | |
| 97 case FWL_WGTRELATION_NextSibling: { | |
| 98 pRet = pItem->pNext ? pItem->pNext->pWidget : NULL; | |
| 99 break; | |
| 100 } | |
| 101 case FWL_WGTRELATION_LastSibling: { | |
| 102 pItem = pItem->pNext; | |
| 103 while (pItem && pItem->pNext) { | |
| 104 pItem = pItem->pNext; | |
| 105 } | |
| 106 pRet = pItem ? pItem->pWidget : NULL; | |
| 107 break; | |
| 108 } | |
| 109 case FWL_WGTRELATION_FirstChild: { | |
| 110 pRet = pItem->pChild ? pItem->pChild->pWidget : NULL; | |
| 111 break; | |
| 112 } | |
| 113 case FWL_WGTRELATION_LastChild: { | |
| 114 pItem = pItem->pChild; | |
| 115 while (pItem && pItem->pNext) { | |
| 116 pItem = pItem->pNext; | |
| 117 } | |
| 118 pRet = pItem ? pItem->pWidget : NULL; | |
| 119 break; | |
| 120 } | |
| 121 case FWL_WGTRELATION_SystemForm: { | |
| 122 while (pItem) { | |
| 123 if (IsAbleNative(pItem->pWidget)) { | |
| 124 pRet = pItem->pWidget; | |
| 125 break; | |
| 126 } | |
| 127 pItem = pItem->pParent; | |
| 128 } | |
| 129 break; | |
| 130 } | |
| 131 default: {} | |
| 132 } | |
| 133 return pRet; | |
| 134 } | 118 } |
| 135 int32_t CFWL_WidgetMgr::GetWidgetIndex(IFWL_Widget* pWidget) { | 119 |
| 136 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | |
| 137 if (!pItem) | |
| 138 return -1; | |
| 139 return TravelWidgetMgr(pItem->pParent, NULL, pItem); | |
| 140 } | |
| 141 FX_BOOL CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { | 120 FX_BOOL CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { |
| 142 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 121 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 143 if (!pItem) | 122 if (!pItem) |
| 144 return FALSE; | 123 return FALSE; |
| 145 if (!pItem->pParent) | 124 if (!pItem->pParent) |
| 146 return FALSE; | 125 return FALSE; |
| 147 CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; | 126 CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; |
| 148 int32_t i = 0; | 127 int32_t i = 0; |
| 149 while (pChild) { | 128 while (pChild) { |
| 150 if (pChild == pItem) { | 129 if (pChild == pItem) { |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 IFWL_Widget* pOuter = pWidget->GetOuter(); | 197 IFWL_Widget* pOuter = pWidget->GetOuter(); |
| 219 while (pOuter) { | 198 while (pOuter) { |
| 220 CFX_RectF rtTemp; | 199 CFX_RectF rtTemp; |
| 221 pNative->GetWidgetRect(rtTemp); | 200 pNative->GetWidgetRect(rtTemp); |
| 222 rect.left += rtTemp.left; | 201 rect.left += rtTemp.left; |
| 223 rect.top += rtTemp.top; | 202 rect.top += rtTemp.top; |
| 224 pNative = pOuter; | 203 pNative = pOuter; |
| 225 pOuter = pOuter->GetOuter(); | 204 pOuter = pOuter->GetOuter(); |
| 226 } | 205 } |
| 227 } else if (!IsAbleNative(pWidget)) { | 206 } else if (!IsAbleNative(pWidget)) { |
| 228 pNative = GetWidget(pWidget, FWL_WGTRELATION_SystemForm); | 207 pNative = GetSystemFormWidget(pWidget); |
| 229 if (!pNative) | 208 if (!pNative) |
| 230 return FWL_Error::Indefinite; | 209 return FWL_Error::Indefinite; |
| 231 pWidget->TransformTo(pNative, rect.left, rect.top); | 210 pWidget->TransformTo(pNative, rect.left, rect.top); |
| 232 } | 211 } |
| 233 AddRedrawCounts(pNative); | 212 AddRedrawCounts(pNative); |
| 234 return m_pAdapter->RepaintWidget(pNative, &rect); | 213 return m_pAdapter->RepaintWidget(pNative, &rect); |
| 235 } | 214 } |
| 236 void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { | 215 void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { |
| 237 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(NULL); | 216 CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(NULL); |
| 238 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 217 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 pItem->pNext = NULL; | 317 pItem->pNext = NULL; |
| 339 pItem->pPrevious = NULL; | 318 pItem->pPrevious = NULL; |
| 340 } | 319 } |
| 341 pItem->pParent = pParentItem; | 320 pItem->pParent = pParentItem; |
| 342 SetWidgetIndex(pChild, -1); | 321 SetWidgetIndex(pChild, -1); |
| 343 } | 322 } |
| 344 | 323 |
| 345 FX_BOOL CFWL_WidgetMgr::IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent) { | 324 FX_BOOL CFWL_WidgetMgr::IsChild(IFWL_Widget* pChild, IFWL_Widget* pParent) { |
| 346 IFWL_Widget* pTemp = pChild; | 325 IFWL_Widget* pTemp = pChild; |
| 347 do { | 326 do { |
| 348 if (pTemp == pParent) { | 327 if (pTemp == pParent) |
| 349 return TRUE; | 328 return TRUE; |
| 350 } | 329 pTemp = GetParentWidget(pTemp); |
| 351 pTemp = GetWidget(pTemp, FWL_WGTRELATION_Parent); | |
| 352 } while (pTemp); | 330 } while (pTemp); |
| 353 return FALSE; | 331 return FALSE; |
| 354 } | 332 } |
| 355 | 333 |
| 356 FWL_Error CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, | 334 FWL_Error CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, |
| 357 const CFX_RectF& rect) { | 335 const CFX_RectF& rect) { |
| 358 if (FWL_UseOffscreen(pWidget)) { | 336 if (FWL_UseOffscreen(pWidget)) { |
| 359 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 337 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 360 pItem->iRedrawCounter++; | 338 pItem->iRedrawCounter++; |
| 361 if (pItem->pOffscreen) { | 339 if (pItem->pOffscreen) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 375 return FWL_Error::Succeeded; | 353 return FWL_Error::Succeeded; |
| 376 } | 354 } |
| 377 | 355 |
| 378 IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, | 356 IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, |
| 379 FX_FLOAT x, | 357 FX_FLOAT x, |
| 380 FX_FLOAT y) { | 358 FX_FLOAT y) { |
| 381 if (!parent) | 359 if (!parent) |
| 382 return NULL; | 360 return NULL; |
| 383 FX_FLOAT x1; | 361 FX_FLOAT x1; |
| 384 FX_FLOAT y1; | 362 FX_FLOAT y1; |
| 385 IFWL_Widget* child = GetWidget(parent, FWL_WGTRELATION_LastChild); | 363 IFWL_Widget* child = GetLastChildWidget(parent); |
| 386 while (child) { | 364 while (child) { |
| 387 if ((child->GetStates() & FWL_WGTSTATE_Invisible) == 0) { | 365 if ((child->GetStates() & FWL_WGTSTATE_Invisible) == 0) { |
| 388 x1 = x; | 366 x1 = x; |
| 389 y1 = y; | 367 y1 = y; |
| 390 CFX_Matrix matrixOnParent; | 368 CFX_Matrix matrixOnParent; |
| 391 child->GetMatrix(matrixOnParent); | 369 child->GetMatrix(matrixOnParent); |
| 392 CFX_Matrix m; | 370 CFX_Matrix m; |
| 393 m.SetIdentity(); | 371 m.SetIdentity(); |
| 394 m.SetReverse(matrixOnParent); | 372 m.SetReverse(matrixOnParent); |
| 395 m.TransformPoint(x1, y1); | 373 m.TransformPoint(x1, y1); |
| 396 CFX_RectF bounds; | 374 CFX_RectF bounds; |
| 397 child->GetWidgetRect(bounds); | 375 child->GetWidgetRect(bounds); |
| 398 if (bounds.Contains(x1, y1)) { | 376 if (bounds.Contains(x1, y1)) { |
| 399 x1 -= bounds.left; | 377 x1 -= bounds.left; |
| 400 y1 -= bounds.top; | 378 y1 -= bounds.top; |
| 401 return GetWidgetAtPoint(child, x1, y1); | 379 return GetWidgetAtPoint(child, x1, y1); |
| 402 } | 380 } |
| 403 } | 381 } |
| 404 child = GetWidget(child, FWL_WGTRELATION_PriorSibling); | 382 child = GetPriorSiblingWidget(child); |
| 405 } | 383 } |
| 406 return parent; | 384 return parent; |
| 407 } | 385 } |
| 408 | 386 |
| 409 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, | 387 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, |
| 410 FX_FLOAT fx, | 388 FX_FLOAT fx, |
| 411 FX_FLOAT fy) { | 389 FX_FLOAT fy) { |
| 412 if (FWL_UseOffscreen(pForm)) | 390 if (FWL_UseOffscreen(pForm)) |
| 413 GetWidgetMgrItem(pForm)->pOffscreen.reset(); | 391 GetWidgetMgrItem(pForm)->pOffscreen.reset(); |
| 414 } | 392 } |
| 415 | 393 |
| 416 IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, | 394 IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, |
| 417 IFWL_Widget* focus, | 395 IFWL_Widget* focus, |
| 418 FX_BOOL& bFind) { | 396 FX_BOOL& bFind) { |
| 419 IFWL_Widget* child = | 397 CFWL_WidgetMgr* pMgr = CFWL_WidgetMgr::GetInstance(); |
| 420 FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); | 398 IFWL_Widget* child = pMgr->GetFirstChildWidget(parent); |
| 421 while (child) { | 399 while (child) { |
| 422 if (focus == child) { | 400 if (focus == child) |
| 423 bFind = TRUE; | 401 bFind = TRUE; |
| 424 } | 402 |
| 425 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && | 403 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && |
| 426 (!focus || (focus != child && bFind))) { | 404 (!focus || (focus != child && bFind))) { |
| 427 return child; | 405 return child; |
| 428 } | 406 } |
| 429 IFWL_Widget* bRet = nextTab(child, focus, bFind); | 407 IFWL_Widget* bRet = nextTab(child, focus, bFind); |
| 430 if (bRet) { | 408 if (bRet) |
| 431 return bRet; | 409 return bRet; |
| 432 } | 410 |
| 433 child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); | 411 child = pMgr->GetNextSiblingWidget(child); |
| 434 } | 412 } |
| 435 return NULL; | 413 return nullptr; |
| 436 } | 414 } |
| 415 |
| 437 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { | 416 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { |
| 438 int32_t iRet = 0; | 417 int32_t iRet = 0; |
| 439 IFWL_Widget* pChild = pFirst; | 418 IFWL_Widget* pChild = pFirst; |
| 440 while (pChild) | 419 while (pChild) { |
| 441 pChild = GetWidget(pChild, FWL_WGTRELATION_NextSibling); | 420 pChild = GetNextSiblingWidget(pChild); |
| 421 ++iRet; |
| 422 } |
| 442 return iRet; | 423 return iRet; |
| 443 } | 424 } |
| 444 IFWL_Widget* CFWL_WidgetMgr::GetSiblingRadioButton(IFWL_Widget* pWidget, | 425 IFWL_Widget* CFWL_WidgetMgr::GetSiblingRadioButton(IFWL_Widget* pWidget, |
| 445 FX_BOOL bNext) { | 426 FX_BOOL bNext) { |
| 446 return nullptr; | 427 return nullptr; |
| 447 } | 428 } |
| 448 IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader( | 429 IFWL_Widget* CFWL_WidgetMgr::GetRadioButtonGroupHeader( |
| 449 IFWL_Widget* pRadioButton) { | 430 IFWL_Widget* pRadioButton) { |
| 450 IFWL_Widget* pNext = pRadioButton; | 431 IFWL_Widget* pNext = pRadioButton; |
| 451 while (pNext) { | 432 while (pNext) { |
| 452 if (pNext->GetStyles() & FWL_WGTSTYLE_Group) | 433 if (pNext->GetStyles() & FWL_WGTSTYLE_Group) |
| 453 return pNext; | 434 return pNext; |
| 454 pNext = GetSiblingRadioButton(pNext, FALSE); | 435 pNext = GetSiblingRadioButton(pNext, FALSE); |
| 455 } | 436 } |
| 456 pNext = GetWidget(pRadioButton, FWL_WGTRELATION_LastSibling); | 437 pNext = GetLastSiblingWidget(pRadioButton); |
| 457 while ((pNext = GetSiblingRadioButton(pNext, FALSE)) != nullptr && | 438 while ((pNext = GetSiblingRadioButton(pNext, FALSE)) != nullptr && |
| 458 pNext != pRadioButton) { | 439 pNext != pRadioButton) { |
| 459 if (pNext->GetStyles() & FWL_WGTSTYLE_Group) | 440 if (pNext->GetStyles() & FWL_WGTSTYLE_Group) |
| 460 return pNext; | 441 return pNext; |
| 461 } | 442 } |
| 462 pNext = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); | 443 pNext = GetFirstSiblingWidget(pRadioButton); |
| 463 return GetSiblingRadioButton(pNext, TRUE); | 444 return GetSiblingRadioButton(pNext, TRUE); |
| 464 } | 445 } |
| 465 void CFWL_WidgetMgr::GetSameGroupRadioButton( | 446 void CFWL_WidgetMgr::GetSameGroupRadioButton( |
| 466 IFWL_Widget* pRadioButton, | 447 IFWL_Widget* pRadioButton, |
| 467 CFX_ArrayTemplate<IFWL_Widget*>& group) { | 448 CFX_ArrayTemplate<IFWL_Widget*>& group) { |
| 468 IFWL_Widget* pFirst = GetWidget(pRadioButton, FWL_WGTRELATION_FirstSibling); | 449 IFWL_Widget* pFirst = GetFirstSiblingWidget(pRadioButton); |
| 469 if (!pFirst) { | 450 if (!pFirst) { |
| 470 pFirst = pRadioButton; | 451 pFirst = pRadioButton; |
| 471 } | 452 } |
| 472 int32_t iGroup = CountRadioButtonGroup(pFirst); | 453 int32_t iGroup = CountRadioButtonGroup(pFirst); |
| 473 if (iGroup < 2) { | 454 if (iGroup < 2) { |
| 474 IFWL_Widget* pNext = pFirst; | 455 IFWL_Widget* pNext = pFirst; |
| 475 while ((pNext = GetSiblingRadioButton(pNext, TRUE)) != NULL) { | 456 while ((pNext = GetSiblingRadioButton(pNext, TRUE)) != NULL) { |
| 476 group.Add(pNext); | 457 group.Add(pNext); |
| 477 } | 458 } |
| 478 return; | 459 return; |
| 479 } | 460 } |
| 480 IFWL_Widget* pNext = GetRadioButtonGroupHeader(pRadioButton); | 461 IFWL_Widget* pNext = GetRadioButtonGroupHeader(pRadioButton); |
| 481 do { | 462 do { |
| 482 group.Add(pNext); | 463 group.Add(pNext); |
| 483 pNext = GetSiblingRadioButton(pNext, TRUE); | 464 pNext = GetSiblingRadioButton(pNext, TRUE); |
| 484 if (!pNext) | 465 if (!pNext) |
| 485 pNext = GetSiblingRadioButton(pFirst, TRUE); | 466 pNext = GetSiblingRadioButton(pFirst, TRUE); |
| 486 } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); | 467 } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); |
| 487 } | 468 } |
| 488 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { | 469 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { |
| 489 if ((pParent->GetClassID() == FWL_Type::PushButton) && | 470 if ((pParent->GetClassID() == FWL_Type::PushButton) && |
| 490 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { | 471 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
| 491 return pParent; | 472 return pParent; |
| 492 } | 473 } |
| 493 IFWL_Widget* child = | 474 IFWL_Widget* child = |
| 494 FWL_GetWidgetMgr()->GetWidget(pParent, FWL_WGTRELATION_FirstChild); | 475 CFWL_WidgetMgr::GetInstance()->GetFirstChildWidget(pParent); |
| 495 while (child) { | 476 while (child) { |
| 496 if ((child->GetClassID() == FWL_Type::PushButton) && | 477 if ((child->GetClassID() == FWL_Type::PushButton) && |
| 497 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { | 478 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
| 498 return child; | 479 return child; |
| 499 } | 480 } |
| 500 IFWL_Widget* find = GetDefaultButton(child); | 481 IFWL_Widget* find = GetDefaultButton(child); |
| 501 if (find) { | 482 if (find) { |
| 502 return find; | 483 return find; |
| 503 } | 484 } |
| 504 child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); | 485 child = CFWL_WidgetMgr::GetInstance()->GetNextSiblingWidget(child); |
| 505 } | 486 } |
| 506 return NULL; | 487 return NULL; |
| 507 } | 488 } |
| 508 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { | 489 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { |
| 509 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 490 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 510 (pItem->iRedrawCounter)++; | 491 (pItem->iRedrawCounter)++; |
| 511 } | 492 } |
| 512 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { | 493 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { |
| 513 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 494 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 514 pItem->iRedrawCounter = 0; | 495 pItem->iRedrawCounter = 0; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 543 } | 524 } |
| 544 pChild = pChild->pNext; | 525 pChild = pChild->pNext; |
| 545 } | 526 } |
| 546 if (pIndex) { | 527 if (pIndex) { |
| 547 return 0; | 528 return 0; |
| 548 } else if (pItem) { | 529 } else if (pItem) { |
| 549 return -1; | 530 return -1; |
| 550 } | 531 } |
| 551 return iCount - 1; | 532 return iCount - 1; |
| 552 } | 533 } |
| 553 FX_BOOL CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) { | 534 |
| 535 FX_BOOL CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) const { |
| 554 if (!pWidget) | 536 if (!pWidget) |
| 555 return FALSE; | 537 return FALSE; |
| 556 if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { | 538 if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { |
| 557 return FALSE; | 539 return FALSE; |
| 558 } | 540 } |
| 559 uint32_t dwStyles = pWidget->GetStyles(); | 541 uint32_t dwStyles = pWidget->GetStyles(); |
| 560 return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == | 542 return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == |
| 561 FWL_WGTSTYLE_OverLapper) || | 543 FWL_WGTSTYLE_OverLapper) || |
| 562 (dwStyles & FWL_WGTSTYLE_Popup); | 544 (dwStyles & FWL_WGTSTYLE_Popup); |
| 563 } | 545 } |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 670 } | 652 } |
| 671 | 653 |
| 672 void CFWL_WidgetMgrDelegate::DrawChild(IFWL_Widget* parent, | 654 void CFWL_WidgetMgrDelegate::DrawChild(IFWL_Widget* parent, |
| 673 const CFX_RectF& rtClip, | 655 const CFX_RectF& rtClip, |
| 674 CFX_Graphics* pGraphics, | 656 CFX_Graphics* pGraphics, |
| 675 const CFX_Matrix* pMatrix) { | 657 const CFX_Matrix* pMatrix) { |
| 676 if (!parent) | 658 if (!parent) |
| 677 return; | 659 return; |
| 678 | 660 |
| 679 FX_BOOL bFormDisable = m_pWidgetMgr->IsFormDisabled(); | 661 FX_BOOL bFormDisable = m_pWidgetMgr->IsFormDisabled(); |
| 680 IFWL_Widget* pNextChild = | 662 IFWL_Widget* pNextChild = m_pWidgetMgr->GetFirstChildWidget(parent); |
| 681 m_pWidgetMgr->GetWidget(parent, FWL_WGTRELATION_FirstChild); | |
| 682 while (pNextChild) { | 663 while (pNextChild) { |
| 683 IFWL_Widget* child = pNextChild; | 664 IFWL_Widget* child = pNextChild; |
| 684 pNextChild = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); | 665 pNextChild = m_pWidgetMgr->GetNextSiblingWidget(child); |
| 685 if (child->GetStates() & FWL_WGTSTATE_Invisible) | 666 if (child->GetStates() & FWL_WGTSTATE_Invisible) |
| 686 continue; | 667 continue; |
| 687 | 668 |
| 688 CFX_RectF rtWidget; | 669 CFX_RectF rtWidget; |
| 689 child->GetWidgetRect(rtWidget); | 670 child->GetWidgetRect(rtWidget); |
| 690 if (rtWidget.IsEmpty()) | 671 if (rtWidget.IsEmpty()) |
| 691 continue; | 672 continue; |
| 692 | 673 |
| 693 CFX_Matrix widgetMatrix; | 674 CFX_Matrix widgetMatrix; |
| 694 CFX_RectF clipBounds(rtWidget); | 675 CFX_RectF clipBounds(rtWidget); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 712 if (m_pWidgetMgr->IsFormDisabled() || | 693 if (m_pWidgetMgr->IsFormDisabled() || |
| 713 IsNeedRepaint(child, &widgetMatrix, rtClip)) { | 694 IsNeedRepaint(child, &widgetMatrix, rtClip)) { |
| 714 pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); | 695 pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); |
| 715 } | 696 } |
| 716 } | 697 } |
| 717 if (!bFormDisable) | 698 if (!bFormDisable) |
| 718 pGraphics->RestoreGraphState(); | 699 pGraphics->RestoreGraphState(); |
| 719 | 700 |
| 720 DrawChild(child, clipBounds, pGraphics, | 701 DrawChild(child, clipBounds, pGraphics, |
| 721 bFormDisable ? &widgetMatrix : pMatrix); | 702 bFormDisable ? &widgetMatrix : pMatrix); |
| 722 child = m_pWidgetMgr->GetWidget(child, FWL_WGTRELATION_NextSibling); | 703 child = m_pWidgetMgr->GetNextSiblingWidget(child); |
| 723 } | 704 } |
| 724 } | 705 } |
| 725 | 706 |
| 726 CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( | 707 CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( |
| 727 IFWL_Widget* pWidget, | 708 IFWL_Widget* pWidget, |
| 728 CFX_Graphics* pGraphics, | 709 CFX_Graphics* pGraphics, |
| 729 const CFX_Matrix* pMatrix) { | 710 const CFX_Matrix* pMatrix) { |
| 730 if (!FWL_UseOffscreen(pWidget)) | 711 if (!FWL_UseOffscreen(pWidget)) |
| 731 return pGraphics; | 712 return pGraphics; |
| 732 | 713 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 769 return TRUE; | 750 return TRUE; |
| 770 } | 751 } |
| 771 CFX_RectF rtWidget; | 752 CFX_RectF rtWidget; |
| 772 pWidget->GetWidgetRect(rtWidget); | 753 pWidget->GetWidgetRect(rtWidget); |
| 773 rtWidget.left = rtWidget.top = 0; | 754 rtWidget.left = rtWidget.top = 0; |
| 774 pMatrix->TransformRect(rtWidget); | 755 pMatrix->TransformRect(rtWidget); |
| 775 if (!rtWidget.IntersectWith(rtDirty)) | 756 if (!rtWidget.IntersectWith(rtDirty)) |
| 776 return FALSE; | 757 return FALSE; |
| 777 | 758 |
| 778 IFWL_Widget* pChild = | 759 IFWL_Widget* pChild = |
| 779 FWL_GetWidgetMgr()->GetWidget(pWidget, FWL_WGTRELATION_FirstChild); | 760 CFWL_WidgetMgr::GetInstance()->GetFirstChildWidget(pWidget); |
| 780 if (!pChild) | 761 if (!pChild) |
| 781 return TRUE; | 762 return TRUE; |
| 782 | 763 |
| 783 CFX_RectF rtChilds; | 764 CFX_RectF rtChilds; |
| 784 rtChilds.Empty(); | 765 rtChilds.Empty(); |
| 785 FX_BOOL bChildIntersectWithDirty = FALSE; | 766 FX_BOOL bChildIntersectWithDirty = FALSE; |
| 786 FX_BOOL bOrginPtIntersectWidthChild = FALSE; | 767 FX_BOOL bOrginPtIntersectWidthChild = FALSE; |
| 787 FX_BOOL bOrginPtIntersectWidthDirty = | 768 FX_BOOL bOrginPtIntersectWidthDirty = |
| 788 rtDirty.Contains(rtWidget.left, rtWidget.top); | 769 rtDirty.Contains(rtWidget.left, rtWidget.top); |
| 789 static FWL_NEEDREPAINTHITDATA hitPoint[kNeedRepaintHitPoints]; | 770 static FWL_NEEDREPAINTHITDATA hitPoint[kNeedRepaintHitPoints]; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 for (int32_t i = 0; i < kNeedRepaintHitPoints; i++) { | 809 for (int32_t i = 0; i < kNeedRepaintHitPoints; i++) { |
| 829 if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) | 810 if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) |
| 830 continue; | 811 continue; |
| 831 if (!rtDirty.Contains(hitPoint[i].hitPoint)) { | 812 if (!rtDirty.Contains(hitPoint[i].hitPoint)) { |
| 832 hitPoint[i].bNotContainByDirty = true; | 813 hitPoint[i].bNotContainByDirty = true; |
| 833 continue; | 814 continue; |
| 834 } | 815 } |
| 835 if (r.Contains(hitPoint[i].hitPoint)) | 816 if (r.Contains(hitPoint[i].hitPoint)) |
| 836 hitPoint[i].bNotNeedRepaint = true; | 817 hitPoint[i].bNotNeedRepaint = true; |
| 837 } | 818 } |
| 838 } while ((pChild = FWL_GetWidgetMgr()->GetWidget( | 819 } while ( |
| 839 pChild, FWL_WGTRELATION_NextSibling)) != NULL); | 820 (pChild = CFWL_WidgetMgr::GetInstance()->GetNextSiblingWidget(pChild))); |
| 840 | 821 |
| 841 if (!bChildIntersectWithDirty) | 822 if (!bChildIntersectWithDirty) |
| 842 return TRUE; | 823 return TRUE; |
| 843 if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) | 824 if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) |
| 844 return TRUE; | 825 return TRUE; |
| 845 if (rtChilds.IsEmpty()) | 826 if (rtChilds.IsEmpty()) |
| 846 return TRUE; | 827 return TRUE; |
| 847 | 828 |
| 848 int32_t repaintPoint = kNeedRepaintHitPoints; | 829 int32_t repaintPoint = kNeedRepaintHitPoints; |
| 849 for (int32_t i = 0; i < kNeedRepaintHitPoints; i++) { | 830 for (int32_t i = 0; i < kNeedRepaintHitPoints; i++) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 872 temp.Deflate(50, 50); | 853 temp.Deflate(50, 50); |
| 873 if (!temp.Contains(r)) | 854 if (!temp.Contains(r)) |
| 874 return FALSE; | 855 return FALSE; |
| 875 | 856 |
| 876 pItem->bOutsideChanged = FALSE; | 857 pItem->bOutsideChanged = FALSE; |
| 877 } | 858 } |
| 878 #endif | 859 #endif |
| 879 | 860 |
| 880 return pItem->iRedrawCounter == 0; | 861 return pItem->iRedrawCounter == 0; |
| 881 } | 862 } |
| OLD | NEW |