summaryrefslogtreecommitdiff
path: root/xfa/fwl/core/fwl_widgetmgrimp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fwl/core/fwl_widgetmgrimp.cpp')
-rw-r--r--xfa/fwl/core/fwl_widgetmgrimp.cpp84
1 files changed, 32 insertions, 52 deletions
diff --git a/xfa/fwl/core/fwl_widgetmgrimp.cpp b/xfa/fwl/core/fwl_widgetmgrimp.cpp
index f4ceb78c48..ff379722e7 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