| 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 IFWL_WidgetMgr* IFWL_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(); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, | 408 void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, |
| 410 FX_FLOAT fx, | 409 FX_FLOAT fx, |
| 411 FX_FLOAT fy) { | 410 FX_FLOAT fy) { |
| 412 if (FWL_UseOffscreen(pForm)) | 411 if (FWL_UseOffscreen(pForm)) |
| 413 GetWidgetMgrItem(pForm)->pOffscreen.reset(); | 412 GetWidgetMgrItem(pForm)->pOffscreen.reset(); |
| 414 } | 413 } |
| 415 | 414 |
| 416 IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, | 415 IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, |
| 417 IFWL_Widget* focus, | 416 IFWL_Widget* focus, |
| 418 FX_BOOL& bFind) { | 417 FX_BOOL& bFind) { |
| 419 IFWL_Widget* child = | 418 IFWL_Widget* child = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 420 FWL_GetWidgetMgr()->GetWidget(parent, FWL_WGTRELATION_FirstChild); | 419 parent, FWL_WGTRELATION_FirstChild); |
| 421 while (child) { | 420 while (child) { |
| 422 if (focus == child) { | 421 if (focus == child) { |
| 423 bFind = TRUE; | 422 bFind = TRUE; |
| 424 } | 423 } |
| 425 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && | 424 if ((child->GetStyles() & FWL_WGTSTYLE_TabStop) && |
| 426 (!focus || (focus != child && bFind))) { | 425 (!focus || (focus != child && bFind))) { |
| 427 return child; | 426 return child; |
| 428 } | 427 } |
| 429 IFWL_Widget* bRet = nextTab(child, focus, bFind); | 428 IFWL_Widget* bRet = nextTab(child, focus, bFind); |
| 430 if (bRet) { | 429 if (bRet) { |
| 431 return bRet; | 430 return bRet; |
| 432 } | 431 } |
| 433 child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); | 432 child = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 433 child, FWL_WGTRELATION_NextSibling); |
| 434 } | 434 } |
| 435 return NULL; | 435 return NULL; |
| 436 } | 436 } |
| 437 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { | 437 int32_t CFWL_WidgetMgr::CountRadioButtonGroup(IFWL_Widget* pFirst) { |
| 438 int32_t iRet = 0; | 438 int32_t iRet = 0; |
| 439 IFWL_Widget* pChild = pFirst; | 439 IFWL_Widget* pChild = pFirst; |
| 440 while (pChild) | 440 while (pChild) |
| 441 pChild = GetWidget(pChild, FWL_WGTRELATION_NextSibling); | 441 pChild = GetWidget(pChild, FWL_WGTRELATION_NextSibling); |
| 442 return iRet; | 442 return iRet; |
| 443 } | 443 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 pNext = GetSiblingRadioButton(pNext, TRUE); | 483 pNext = GetSiblingRadioButton(pNext, TRUE); |
| 484 if (!pNext) | 484 if (!pNext) |
| 485 pNext = GetSiblingRadioButton(pFirst, TRUE); | 485 pNext = GetSiblingRadioButton(pFirst, TRUE); |
| 486 } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); | 486 } while (pNext && ((pNext->GetStyles() & FWL_WGTSTYLE_Group) == 0)); |
| 487 } | 487 } |
| 488 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { | 488 IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) { |
| 489 if ((pParent->GetClassID() == FWL_Type::PushButton) && | 489 if ((pParent->GetClassID() == FWL_Type::PushButton) && |
| 490 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { | 490 (pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
| 491 return pParent; | 491 return pParent; |
| 492 } | 492 } |
| 493 IFWL_Widget* child = | 493 IFWL_Widget* child = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 494 FWL_GetWidgetMgr()->GetWidget(pParent, FWL_WGTRELATION_FirstChild); | 494 pParent, FWL_WGTRELATION_FirstChild); |
| 495 while (child) { | 495 while (child) { |
| 496 if ((child->GetClassID() == FWL_Type::PushButton) && | 496 if ((child->GetClassID() == FWL_Type::PushButton) && |
| 497 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { | 497 (child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
| 498 return child; | 498 return child; |
| 499 } | 499 } |
| 500 IFWL_Widget* find = GetDefaultButton(child); | 500 IFWL_Widget* find = GetDefaultButton(child); |
| 501 if (find) { | 501 if (find) { |
| 502 return find; | 502 return find; |
| 503 } | 503 } |
| 504 child = FWL_GetWidgetMgr()->GetWidget(child, FWL_WGTRELATION_NextSibling); | 504 child = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 505 child, FWL_WGTRELATION_NextSibling); |
| 505 } | 506 } |
| 506 return NULL; | 507 return NULL; |
| 507 } | 508 } |
| 508 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { | 509 void CFWL_WidgetMgr::AddRedrawCounts(IFWL_Widget* pWidget) { |
| 509 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 510 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 510 (pItem->iRedrawCounter)++; | 511 (pItem->iRedrawCounter)++; |
| 511 } | 512 } |
| 512 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { | 513 void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { |
| 513 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); | 514 CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
| 514 pItem->iRedrawCounter = 0; | 515 pItem->iRedrawCounter = 0; |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 768 pItem->iRedrawCounter = 0; | 769 pItem->iRedrawCounter = 0; |
| 769 return TRUE; | 770 return TRUE; |
| 770 } | 771 } |
| 771 CFX_RectF rtWidget; | 772 CFX_RectF rtWidget; |
| 772 pWidget->GetWidgetRect(rtWidget); | 773 pWidget->GetWidgetRect(rtWidget); |
| 773 rtWidget.left = rtWidget.top = 0; | 774 rtWidget.left = rtWidget.top = 0; |
| 774 pMatrix->TransformRect(rtWidget); | 775 pMatrix->TransformRect(rtWidget); |
| 775 if (!rtWidget.IntersectWith(rtDirty)) | 776 if (!rtWidget.IntersectWith(rtDirty)) |
| 776 return FALSE; | 777 return FALSE; |
| 777 | 778 |
| 778 IFWL_Widget* pChild = | 779 IFWL_Widget* pChild = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 779 FWL_GetWidgetMgr()->GetWidget(pWidget, FWL_WGTRELATION_FirstChild); | 780 pWidget, FWL_WGTRELATION_FirstChild); |
| 780 if (!pChild) | 781 if (!pChild) |
| 781 return TRUE; | 782 return TRUE; |
| 782 | 783 |
| 783 CFX_RectF rtChilds; | 784 CFX_RectF rtChilds; |
| 784 rtChilds.Empty(); | 785 rtChilds.Empty(); |
| 785 FX_BOOL bChildIntersectWithDirty = FALSE; | 786 FX_BOOL bChildIntersectWithDirty = FALSE; |
| 786 FX_BOOL bOrginPtIntersectWidthChild = FALSE; | 787 FX_BOOL bOrginPtIntersectWidthChild = FALSE; |
| 787 FX_BOOL bOrginPtIntersectWidthDirty = | 788 FX_BOOL bOrginPtIntersectWidthDirty = |
| 788 rtDirty.Contains(rtWidget.left, rtWidget.top); | 789 rtDirty.Contains(rtWidget.left, rtWidget.top); |
| 789 static FWL_NEEDREPAINTHITDATA hitPoint[kNeedRepaintHitPoints]; | 790 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++) { | 829 for (int32_t i = 0; i < kNeedRepaintHitPoints; i++) { |
| 829 if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) | 830 if (hitPoint[i].bNotContainByDirty || hitPoint[i].bNotNeedRepaint) |
| 830 continue; | 831 continue; |
| 831 if (!rtDirty.Contains(hitPoint[i].hitPoint)) { | 832 if (!rtDirty.Contains(hitPoint[i].hitPoint)) { |
| 832 hitPoint[i].bNotContainByDirty = true; | 833 hitPoint[i].bNotContainByDirty = true; |
| 833 continue; | 834 continue; |
| 834 } | 835 } |
| 835 if (r.Contains(hitPoint[i].hitPoint)) | 836 if (r.Contains(hitPoint[i].hitPoint)) |
| 836 hitPoint[i].bNotNeedRepaint = true; | 837 hitPoint[i].bNotNeedRepaint = true; |
| 837 } | 838 } |
| 838 } while ((pChild = FWL_GetWidgetMgr()->GetWidget( | 839 } while ((pChild = IFWL_WidgetMgr::GetInstance()->GetWidget( |
| 839 pChild, FWL_WGTRELATION_NextSibling)) != NULL); | 840 pChild, FWL_WGTRELATION_NextSibling)) != NULL); |
| 840 | 841 |
| 841 if (!bChildIntersectWithDirty) | 842 if (!bChildIntersectWithDirty) |
| 842 return TRUE; | 843 return TRUE; |
| 843 if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) | 844 if (bOrginPtIntersectWidthDirty && !bOrginPtIntersectWidthChild) |
| 844 return TRUE; | 845 return TRUE; |
| 845 if (rtChilds.IsEmpty()) | 846 if (rtChilds.IsEmpty()) |
| 846 return TRUE; | 847 return TRUE; |
| 847 | 848 |
| 848 int32_t repaintPoint = kNeedRepaintHitPoints; | 849 int32_t repaintPoint = kNeedRepaintHitPoints; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 872 temp.Deflate(50, 50); | 873 temp.Deflate(50, 50); |
| 873 if (!temp.Contains(r)) | 874 if (!temp.Contains(r)) |
| 874 return FALSE; | 875 return FALSE; |
| 875 | 876 |
| 876 pItem->bOutsideChanged = FALSE; | 877 pItem->bOutsideChanged = FALSE; |
| 877 } | 878 } |
| 878 #endif | 879 #endif |
| 879 | 880 |
| 880 return pItem->iRedrawCounter == 0; | 881 return pItem->iRedrawCounter == 0; |
| 881 } | 882 } |
| OLD | NEW |