Index: xfa/fwl/core/cfwl_widgetmgr.cpp |
diff --git a/xfa/fwl/core/cfwl_widgetmgr.cpp b/xfa/fwl/core/cfwl_widgetmgr.cpp |
index 310577c1f5b99ff50708be9f2f1ae3348f625f1f..5ef17907aab00506df676ed49438fb69a431b65a 100644 |
--- a/xfa/fwl/core/cfwl_widgetmgr.cpp |
+++ b/xfa/fwl/core/cfwl_widgetmgr.cpp |
@@ -57,10 +57,12 @@ IFWL_Widget* CFWL_WidgetMgr::GetOwnerWidget(IFWL_Widget* pWidget) const { |
IFWL_Widget* CFWL_WidgetMgr::GetFirstSiblingWidget(IFWL_Widget* pWidget) const { |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
- pItem = pItem ? pItem->pPrevious : nullptr; // Not self. |
+ if (!pItem) |
+ return nullptr; |
+ |
+ pItem = pItem->pPrevious; |
while (pItem && pItem->pPrevious) |
pItem = pItem->pPrevious; |
- |
return pItem ? pItem->pWidget : nullptr; |
} |
@@ -81,10 +83,12 @@ IFWL_Widget* CFWL_WidgetMgr::GetFirstChildWidget(IFWL_Widget* pWidget) const { |
IFWL_Widget* CFWL_WidgetMgr::GetLastChildWidget(IFWL_Widget* pWidget) const { |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
- pItem = pItem ? pItem->pChild : nullptr; |
+ if (!pItem) |
+ return nullptr; |
+ |
+ pItem = pItem->pChild; |
while (pItem && pItem->pNext) |
pItem = pItem->pNext; |
- |
return pItem ? pItem->pWidget : nullptr; |
} |
@@ -104,42 +108,43 @@ void CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { |
return; |
if (!pItem->pParent) |
return; |
+ |
CFWL_WidgetMgrItem* pChild = pItem->pParent->pChild; |
int32_t i = 0; |
while (pChild) { |
if (pChild == pItem) { |
if (i == nIndex) |
return; |
- if (pChild->pPrevious) { |
+ if (pChild->pPrevious) |
pChild->pPrevious->pNext = pChild->pNext; |
- } |
- if (pChild->pNext) { |
+ if (pChild->pNext) |
pChild->pNext->pPrevious = pChild->pPrevious; |
- } |
- if (pItem->pParent->pChild == pItem) { |
+ if (pItem->pParent->pChild == pItem) |
pItem->pParent->pChild = pItem->pNext; |
- } |
+ |
pItem->pNext = nullptr; |
pItem->pPrevious = nullptr; |
break; |
} |
- if (!pChild->pNext) { |
+ if (!pChild->pNext) |
break; |
- } |
+ |
pChild = pChild->pNext; |
++i; |
} |
+ |
pChild = pItem->pParent->pChild; |
if (pChild) { |
if (nIndex < 0) { |
- while (pChild->pNext) { |
+ while (pChild->pNext) |
pChild = pChild->pNext; |
- } |
+ |
pChild->pNext = pItem; |
pItem->pPrevious = pChild; |
pItem->pNext = nullptr; |
return; |
} |
+ |
i = 0; |
while (i < nIndex && pChild->pNext) { |
pChild = pChild->pNext; |
@@ -157,9 +162,8 @@ void CFWL_WidgetMgr::SetWidgetIndex(IFWL_Widget* pWidget, int32_t nIndex) { |
} |
pChild->pPrevious = pItem; |
pItem->pNext = pChild; |
- if (pItem->pParent->pChild == pChild) { |
+ if (pItem->pParent->pChild == pChild) |
pItem->pParent->pChild = pItem; |
- } |
} else { |
pItem->pParent->pChild = pItem; |
pItem->pPrevious = nullptr; |
@@ -205,39 +209,35 @@ void CFWL_WidgetMgr::InsertWidget(IFWL_Widget* pParent, |
pParentItem->pParent = GetWidgetMgrItem(nullptr); |
SetWidgetIndex(pParent, -1); |
} |
+ |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pChild); |
if (!pItem) { |
pItem = new CFWL_WidgetMgrItem(pChild); |
m_mapWidgetItem[pChild].reset(pItem); |
} |
if (pItem->pParent && pItem->pParent != pParentItem) { |
- if (pItem->pPrevious) { |
+ if (pItem->pPrevious) |
pItem->pPrevious->pNext = pItem->pNext; |
- } |
- if (pItem->pNext) { |
+ if (pItem->pNext) |
pItem->pNext->pPrevious = pItem->pPrevious; |
- } |
- if (pItem->pParent->pChild == pItem) { |
+ if (pItem->pParent->pChild == pItem) |
pItem->pParent->pChild = pItem->pNext; |
- } |
} |
pItem->pParent = pParentItem; |
SetWidgetIndex(pChild, nIndex); |
} |
+ |
void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) { |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
- if (!pItem) { |
+ if (!pItem) |
return; |
- } |
- if (pItem->pPrevious) { |
+ if (pItem->pPrevious) |
pItem->pPrevious->pNext = pItem->pNext; |
- } |
- if (pItem->pNext) { |
+ if (pItem->pNext) |
pItem->pNext->pPrevious = pItem->pPrevious; |
- } |
- if (pItem->pParent && pItem->pParent->pChild == pItem) { |
+ if (pItem->pParent && pItem->pParent->pChild == pItem) |
pItem->pParent->pChild = pItem->pNext; |
- } |
+ |
CFWL_WidgetMgrItem* pChild = pItem->pChild; |
while (pChild) { |
CFWL_WidgetMgrItem* pNext = pChild->pNext; |
@@ -246,6 +246,7 @@ void CFWL_WidgetMgr::RemoveWidget(IFWL_Widget* pWidget) { |
} |
m_mapWidgetItem.erase(pWidget); |
} |
+ |
void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) { |
CFWL_WidgetMgrItem* pParentItem = GetWidgetMgrItem(pOwner); |
if (!pParentItem) { |
@@ -254,6 +255,7 @@ void CFWL_WidgetMgr::SetOwner(IFWL_Widget* pOwner, IFWL_Widget* pOwned) { |
pParentItem->pParent = GetWidgetMgrItem(nullptr); |
SetWidgetIndex(pOwner, -1); |
} |
+ |
CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pOwned); |
if (!pItem) { |
pItem = new CFWL_WidgetMgrItem(pOwned); |
@@ -267,15 +269,13 @@ void CFWL_WidgetMgr::SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild) { |
if (!pItem) |
return; |
if (pItem->pParent && pItem->pParent != pParentItem) { |
- if (pItem->pPrevious) { |
+ if (pItem->pPrevious) |
pItem->pPrevious->pNext = pItem->pNext; |
- } |
- if (pItem->pNext) { |
+ if (pItem->pNext) |
pItem->pNext->pPrevious = pItem->pPrevious; |
- } |
- if (pItem->pParent->pChild == pItem) { |
+ if (pItem->pParent->pChild == pItem) |
pItem->pParent->pChild = pItem->pNext; |
- } |
+ |
pItem->pNext = nullptr; |
pItem->pPrevious = nullptr; |
} |
@@ -285,23 +285,24 @@ void CFWL_WidgetMgr::SetParent(IFWL_Widget* pParent, IFWL_Widget* pChild) { |
void CFWL_WidgetMgr::SetWidgetRect_Native(IFWL_Widget* pWidget, |
const CFX_RectF& rect) { |
- if (FWL_UseOffscreen(pWidget)) { |
- CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
- pItem->iRedrawCounter++; |
- if (pItem->pOffscreen) { |
- CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice(); |
- if (pDevice && pDevice->GetBitmap()) { |
- CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); |
- if (pBitmap->GetWidth() - rect.width > 1 || |
- pBitmap->GetHeight() - rect.height > 1) { |
- pItem->pOffscreen.reset(); |
- } |
+ if (!FWL_UseOffscreen(pWidget)) |
+ return; |
+ |
+ CFWL_WidgetMgrItem* pItem = GetWidgetMgrItem(pWidget); |
+ pItem->iRedrawCounter++; |
+ if (pItem->pOffscreen) { |
+ CFX_RenderDevice* pDevice = pItem->pOffscreen->GetRenderDevice(); |
+ if (pDevice && pDevice->GetBitmap()) { |
+ CFX_DIBitmap* pBitmap = pDevice->GetBitmap(); |
+ if (pBitmap->GetWidth() - rect.width > 1 || |
+ pBitmap->GetHeight() - rect.height > 1) { |
+ pItem->pOffscreen.reset(); |
} |
} |
+ } |
#if (_FX_OS_ == _FX_WIN32_DESKTOP_) || (_FX_OS_ == _FX_WIN64_) |
- pItem->bOutsideChanged = !m_rtScreen.Contains(rect); |
+ pItem->bOutsideChanged = !m_rtScreen.Contains(rect); |
#endif |
- } |
} |
IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, |
@@ -309,6 +310,7 @@ IFWL_Widget* CFWL_WidgetMgr::GetWidgetAtPoint(IFWL_Widget* parent, |
FX_FLOAT y) { |
if (!parent) |
return nullptr; |
+ |
FX_FLOAT x1; |
FX_FLOAT y1; |
IFWL_Widget* child = GetLastChildWidget(parent); |
@@ -386,9 +388,9 @@ void CFWL_WidgetMgr::GetSameGroupRadioButton( |
IFWL_Widget* pRadioButton, |
CFX_ArrayTemplate<IFWL_Widget*>& group) const { |
IFWL_Widget* pFirst = GetFirstSiblingWidget(pRadioButton); |
- if (!pFirst) { |
+ if (!pFirst) |
pFirst = pRadioButton; |
- } |
+ |
int32_t iGroup = CountRadioButtonGroup(pFirst); |
if (iGroup < 2) |
return; |
@@ -400,6 +402,7 @@ IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) const { |
(pParent->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
return pParent; |
} |
+ |
IFWL_Widget* child = |
pParent->GetOwnerApp()->GetWidgetMgr()->GetFirstChildWidget(pParent); |
while (child) { |
@@ -407,10 +410,9 @@ IFWL_Widget* CFWL_WidgetMgr::GetDefaultButton(IFWL_Widget* pParent) const { |
(child->GetStates() & (1 << (FWL_WGTSTATE_MAX + 2)))) { |
return child; |
} |
- IFWL_Widget* find = GetDefaultButton(child); |
- if (find) { |
+ if (IFWL_Widget* find = GetDefaultButton(child)) |
return find; |
- } |
+ |
child = child->GetOwnerApp()->GetWidgetMgr()->GetNextSiblingWidget(child); |
} |
return nullptr; |
@@ -435,9 +437,9 @@ CFWL_WidgetMgrItem* CFWL_WidgetMgr::GetWidgetMgrItem( |
bool CFWL_WidgetMgr::IsAbleNative(IFWL_Widget* pWidget) const { |
if (!pWidget) |
return false; |
- if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) { |
+ if (!pWidget->IsInstance(FX_WSTRC(FWL_CLASS_Form))) |
return false; |
- } |
+ |
uint32_t dwStyles = pWidget->GetStyles(); |
return ((dwStyles & FWL_WGTSTYLE_WindowTypeMask) == |
FWL_WGTSTYLE_OverLapper) || |
@@ -501,6 +503,7 @@ void CFWL_WidgetMgr::OnDrawWidget(IFWL_Widget* pWidget, |
CFX_RectF clipCopy; |
pWidget->GetWidgetRect(clipCopy); |
clipCopy.left = clipCopy.top = 0; |
+ |
if (UseOffscreenDirect(pWidget)) { |
DrawWidgetAfter(pWidget, pGraphics, clipCopy, pMatrix); |
return; |
@@ -575,9 +578,8 @@ void CFWL_WidgetMgr::DrawChild(IFWL_Widget* parent, |
widgetMatrix.Translate(rtWidget.left, rtWidget.top, true); |
if (IFWL_WidgetDelegate* pDelegate = child->GetDelegate()) { |
- if (IsFormDisabled() || IsNeedRepaint(child, &widgetMatrix, rtClip)) { |
+ if (IsFormDisabled() || IsNeedRepaint(child, &widgetMatrix, rtClip)) |
pDelegate->OnDrawWidget(pGraphics, &widgetMatrix); |
- } |
} |
if (!bFormDisable) |
pGraphics->RestoreGraphState(); |
@@ -632,6 +634,7 @@ bool CFWL_WidgetMgr::IsNeedRepaint(IFWL_Widget* pWidget, |
pItem->iRedrawCounter = 0; |
return true; |
} |
+ |
CFX_RectF rtWidget; |
pWidget->GetWidgetRect(rtWidget); |
rtWidget.left = rtWidget.top = 0; |