Index: xfa/fwl/core/fwl_widgetmgrimp.cpp |
diff --git a/xfa/fwl/core/fwl_widgetmgrimp.cpp b/xfa/fwl/core/fwl_widgetmgrimp.cpp |
index f4ceb78c48ae1bfc93709f5dc2fbf8813b0468f5..ff379722e7ec74d96677858bd84c7d3e0eb208bb 100644 |
--- a/xfa/fwl/core/fwl_widgetmgrimp.cpp |
+++ b/xfa/fwl/core/fwl_widgetmgrimp.cpp |
@@ -43,29 +43,18 @@ IFWL_WidgetMgr* FWL_GetWidgetMgr() { |
return pApp->GetWidgetMgr(); |
} |
-CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) : m_dwCapability(0) { |
- m_pDelegate = new CFWL_WidgetMgrDelegate(this); |
- m_pAdapter = pAdapterNative->GetWidgetMgr(m_pDelegate); |
+CFWL_WidgetMgr::CFWL_WidgetMgr(CXFA_FFApp* pAdapterNative) |
+ : m_dwCapability(0), |
+ m_pDelegate(new CFWL_WidgetMgrDelegate(this)), |
+ m_pAdapter(pAdapterNative->GetWidgetMgr(m_pDelegate.get())) { |
ASSERT(m_pAdapter); |
- CFWL_WidgetMgrItem* pRoot = new CFWL_WidgetMgrItem; |
- m_mapWidgetItem.SetAt(NULL, pRoot); |
- |
+ m_mapWidgetItem[nullptr].reset(new CFWL_WidgetMgrItem); |
#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) |
m_rtScreen.Reset(); |
#endif |
} |
-CFWL_WidgetMgr::~CFWL_WidgetMgr() { |
- FX_POSITION ps = m_mapWidgetItem.GetStartPosition(); |
- while (ps) { |
- void* pWidget; |
- CFWL_WidgetMgrItem* pItem; |
- m_mapWidgetItem.GetNextAssoc(ps, pWidget, (void*&)pItem); |
- delete pItem; |
- } |
- m_mapWidgetItem.RemoveAll(); |
- delete m_pDelegate; |
-} |
+CFWL_WidgetMgr::~CFWL_WidgetMgr() {} |
int32_t CFWL_WidgetMgr::CountWidgets(IFWL_Widget* pParent) { |
CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); |
@@ -248,9 +237,8 @@ void CFWL_WidgetMgr::AddWidget(IFWL_Widget* pWidget) { |
CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(NULL); |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
if (!pItem) { |
- pItem = new CFWL_WidgetMgrItem; |
- pItem->pWidget = pWidget; |
- m_mapWidgetItem.SetAt(pWidget, pItem); |
+ pItem = new CFWL_WidgetMgrItem(pWidget); |
+ m_mapWidgetItem[pWidget].reset(pItem); |
} |
if (pItem->pParent && pItem->pParent != pParentItem) { |
if (pItem->pPrevious) { |
@@ -271,18 +259,15 @@ void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent, |
int32_t nIndex) { |
CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pParent); |
if (!pParentItem) { |
- pParentItem = new CFWL_WidgetMgrItem; |
- pParentItem->pWidget = pParent; |
- m_mapWidgetItem.SetAt(pParent, pParentItem); |
- CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); |
- pParentItem->pParent = pRoot; |
+ pParentItem = new CFWL_WidgetMgrItem(pParent); |
+ m_mapWidgetItem[pParent].reset(pParentItem); |
+ pParentItem->pParent = GetWidgetMgrItem(nullptr); |
SetWidgetIndex(pParent, -1); |
} |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); |
if (!pItem) { |
- pItem = new CFWL_WidgetMgrItem; |
- pItem->pWidget = pChild; |
- m_mapWidgetItem.SetAt(pChild, pItem); |
+ pItem = new CFWL_WidgetMgrItem(pChild); |
+ m_mapWidgetItem[pChild].reset(pItem); |
} |
if (pItem->pParent && pItem->pParent != pParentItem) { |
if (pItem->pPrevious) { |
@@ -318,24 +303,20 @@ void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) { |
RemoveWidget(pChild->pWidget); |
pChild = pNext; |
} |
- m_mapWidgetItem.RemoveKey(pWidget); |
- delete pItem; |
+ m_mapWidgetItem.erase(pWidget); |
} |
void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) { |
CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pOwner); |
if (!pParentItem) { |
- pParentItem = new CFWL_WidgetMgrItem; |
- pParentItem->pWidget = pOwner; |
- m_mapWidgetItem.SetAt(pOwner, pParentItem); |
- CFWL_WidgetMgrItem* pRoot = GetWidgetMgrItem(NULL); |
- pParentItem->pParent = pRoot; |
+ pParentItem = new CFWL_WidgetMgrItem(pOwner); |
+ m_mapWidgetItem[pOwner].reset(pParentItem); |
+ pParentItem->pParent = GetWidgetMgrItem(nullptr); |
SetWidgetIndex(pOwner, -1); |
} |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pOwned); |
if (!pItem) { |
- pItem = new CFWL_WidgetMgrItem; |
- pItem->pWidget = pOwned; |
- m_mapWidgetItem.SetAt(pOwned, pItem); |
+ pItem = new CFWL_WidgetMgrItem(pOwned); |
+ m_mapWidgetItem[pOwned].reset(pItem); |
} |
pItem->pOwner = pParentItem; |
} |
@@ -383,8 +364,7 @@ FWL_Error CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, |
CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); |
if (pBitmap->GetWidth() - rect.width > 1 || |
pBitmap->GetHeight() - rect.height > 1) { |
- delete pItem->pOffscreen; |
- pItem->pOffscreen = NULL; |
+ pItem->pOffscreen.reset(); |
} |
} |
} |
@@ -429,12 +409,8 @@ IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, |
void CFWL_WidgetMgr::NotifySizeChanged(IFWL_Widget* pForm, |
FX_FLOAT fx, |
FX_FLOAT fy) { |
- if (!FWL_UseOffscreen(pForm)) |
- return; |
- |
- CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pForm); |
- delete pItem->pOffscreen; |
- pItem->pOffscreen = nullptr; |
+ if (FWL_UseOffscreen(pForm)) |
+ GetWidgetMgrItem(pForm)->pOffscreen.reset(); |
} |
IFWL_Widget* CFWL_WidgetMgr::nextTab(IFWL_Widget* parent, |
@@ -541,8 +517,12 @@ void CFWL_WidgetMgr::ResetRedrawCounts(IFWL_Widget* pWidget) { |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
pItem->iRedrawCounter = 0; |
} |
-CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem(IFWL_Widget* pWidget) { |
- return static_cast<CFWL_WidgetMgrItem*>(m_mapWidgetItem.GetValueAt(pWidget)); |
+CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem( |
+ IFWL_Widget* pWidget) const { |
+ auto it = m_mapWidgetItem.find(pWidget); |
+ return it != m_mapWidgetItem.end() |
+ ? static_cast<CFWL_WidgetMgrItem*>(it->second.get()) |
+ : nullptr; |
} |
int32_t CFWL_WidgetMgr::TravelWidgetMgr(CFWL_WidgetMgrItem* pParent, |
int32_t* pIndex, |
@@ -756,7 +736,7 @@ CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( |
CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); |
if (!pItem->pOffscreen) { |
- pItem->pOffscreen = new CFX_Graphics; |
+ pItem->pOffscreen.reset(new CFX_Graphics); |
CFX_RectF rect; |
pWidget->GetWidgetRect(rect); |
pItem->pOffscreen->Create((int32_t)rect.width, (int32_t)rect.height, |
@@ -765,7 +745,7 @@ CFX_Graphics* CFWL_WidgetMgrDelegate::DrawWidgetBefore( |
CFX_RectF rect; |
pGraphics->GetClipRect(rect); |
pItem->pOffscreen->SetClipRect(rect); |
- return pItem->pOffscreen; |
+ return pItem->pOffscreen.get(); |
} |
void CFWL_WidgetMgrDelegate::DrawWidgetAfter(IFWL_Widget* pWidget, |
@@ -774,8 +754,8 @@ void CFWL_WidgetMgrDelegate::DrawWidgetAfter(IFWL_Widget* pWidget, |
const CFX_Matrix* pMatrix) { |
if (FWL_UseOffscreen(pWidget)) { |
CFWL_WidgetMgrItem* pItem = m_pWidgetMgr->GetWidgetMgrItem(pWidget); |
- pGraphics->Transfer(pItem->pOffscreen, rtClip.left, rtClip.top, rtClip, |
- pMatrix); |
+ pGraphics->Transfer(pItem->pOffscreen.get(), rtClip.left, rtClip.top, |
+ rtClip, pMatrix); |
#ifdef _WIN32 |
pItem->pOffscreen->ClearClip(); |
#endif |