diff options
Diffstat (limited to 'xfa/fwl/core/ifwl_widget.cpp')
-rw-r--r-- | xfa/fwl/core/ifwl_widget.cpp | 228 |
1 files changed, 41 insertions, 187 deletions
diff --git a/xfa/fwl/core/ifwl_widget.cpp b/xfa/fwl/core/ifwl_widget.cpp index a041f4e2d0..1399799668 100644 --- a/xfa/fwl/core/ifwl_widget.cpp +++ b/xfa/fwl/core/ifwl_widget.cpp @@ -23,6 +23,9 @@ #include "xfa/fxfa/xfa_ffapp.h" #define FWL_STYLEEXT_MNU_Vert (1L << 0) +#define FWL_WGT_CalcHeight 2048 +#define FWL_WGT_CalcWidth 2048 +#define FWL_WGT_CalcMultiLineDefWidth 120.0f IFWL_Widget::IFWL_Widget(const IFWL_App* app, std::unique_ptr<CFWL_WidgetProperties> properties, @@ -31,9 +34,9 @@ IFWL_Widget::IFWL_Widget(const IFWL_App* app, m_pWidgetMgr(app->GetWidgetMgr()), m_pProperties(std::move(properties)), m_pOuter(pOuter), + m_iLock(0), m_pLayoutItem(nullptr), m_pAssociate(nullptr), - m_iLock(0), m_nEventKey(0), m_pDelegate(nullptr) { ASSERT(m_pWidgetMgr); @@ -57,7 +60,7 @@ bool IFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const { return false; } -FWL_Error IFWL_Widget::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { +void IFWL_Widget::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { if (bAutoSize) { if (HasEdge()) { FX_FLOAT fEdge = GetEdgeWidth(); @@ -70,23 +73,22 @@ FWL_Error IFWL_Widget::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { } else { rect = m_pProperties->m_rtWidget; } - return FWL_Error::Succeeded; } -FWL_Error IFWL_Widget::GetGlobalRect(CFX_RectF& rect) { +void IFWL_Widget::GetGlobalRect(CFX_RectF& rect) { IFWL_Widget* pForm = m_pWidgetMgr->GetSystemFormWidget(this); if (!pForm) - return FWL_Error::Indefinite; + return; rect.Set(0, 0, m_pProperties->m_rtWidget.width, m_pProperties->m_rtWidget.height); if (pForm == this) - return FWL_Error::Succeeded; + return; - return TransformTo(pForm, rect); + TransformTo(pForm, rect.left, rect.top); } -FWL_Error IFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { +void IFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { CFX_RectF rtOld = m_pProperties->m_rtWidget; m_pProperties->m_rtWidget = rect; if (IsChild()) { @@ -100,69 +102,34 @@ FWL_Error IFWL_Widget::SetWidgetRect(const CFX_RectF& rect) { if (IFWL_WidgetDelegate* pDelegate = GetDelegate()) pDelegate->OnProcessEvent(&ev); } - return FWL_Error::Succeeded; + return; } m_pWidgetMgr->SetWidgetRect_Native(this, rect); - return FWL_Error::Succeeded; } -FWL_Error IFWL_Widget::GetClientRect(CFX_RectF& rect) { +void IFWL_Widget::GetClientRect(CFX_RectF& rect) { GetEdgeRect(rect); if (HasEdge()) { FX_FLOAT fEdge = GetEdgeWidth(); rect.Deflate(fEdge, fEdge); } - return FWL_Error::Succeeded; } -IFWL_Widget* IFWL_Widget::GetParent() { - return m_pWidgetMgr->GetParentWidget(this); -} - -FWL_Error IFWL_Widget::SetParent(IFWL_Widget* pParent) { +void IFWL_Widget::SetParent(IFWL_Widget* pParent) { m_pProperties->m_pParent = pParent; m_pWidgetMgr->SetParent(pParent, this); - return FWL_Error::Succeeded; } -IFWL_Widget* IFWL_Widget::GetOwner() { - return m_pWidgetMgr->GetOwnerWidget(this); -} - -FWL_Error IFWL_Widget::SetOwner(IFWL_Widget* pOwner) { - m_pProperties->m_pOwner = pOwner; - m_pWidgetMgr->SetOwner(pOwner, this); - return FWL_Error::Succeeded; -} - -IFWL_Widget* IFWL_Widget::GetOuter() { - return m_pOuter; -} - -uint32_t IFWL_Widget::GetStyles() { - return m_pProperties->m_dwStyles; -} - -FWL_Error IFWL_Widget::ModifyStyles(uint32_t dwStylesAdded, - uint32_t dwStylesRemoved) { +void IFWL_Widget::ModifyStyles(uint32_t dwStylesAdded, + uint32_t dwStylesRemoved) { m_pProperties->m_dwStyles = (m_pProperties->m_dwStyles & ~dwStylesRemoved) | dwStylesAdded; - return FWL_Error::Succeeded; } -uint32_t IFWL_Widget::GetStylesEx() { - return m_pProperties->m_dwStyleExes; -} - -FWL_Error IFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded, - uint32_t dwStylesExRemoved) { +void IFWL_Widget::ModifyStylesEx(uint32_t dwStylesExAdded, + uint32_t dwStylesExRemoved) { m_pProperties->m_dwStyleExes = (m_pProperties->m_dwStyleExes & ~dwStylesExRemoved) | dwStylesExAdded; - return FWL_Error::Succeeded; -} - -uint32_t IFWL_Widget::GetStates() { - return m_pProperties->m_dwStates; } static void NotifyHideChildWidget(CFWL_WidgetMgr* widgetMgr, @@ -195,21 +162,7 @@ void IFWL_Widget::SetStates(uint32_t dwStates, bool bSet) { return; } -FWL_Error IFWL_Widget::Update() { - return FWL_Error::Succeeded; -} - -FWL_Error IFWL_Widget::LockUpdate() { - m_iLock++; - return FWL_Error::Succeeded; -} - -FWL_Error IFWL_Widget::UnlockUpdate() { - if (IsLocked()) { - m_iLock--; - } - return FWL_Error::Succeeded; -} +void IFWL_Widget::Update() {} FWL_WidgetHit IFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { CFX_RectF rtClient; @@ -231,9 +184,9 @@ FWL_WidgetHit IFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { return FWL_WidgetHit::Unknown; } -FWL_Error IFWL_Widget::TransformTo(IFWL_Widget* pWidget, - FX_FLOAT& fx, - FX_FLOAT& fy) { +void IFWL_Widget::TransformTo(IFWL_Widget* pWidget, + FX_FLOAT& fx, + FX_FLOAT& fy) { if (m_pWidgetMgr->IsFormDisabled()) { CFX_SizeF szOffset; if (IsParent(pWidget)) { @@ -245,7 +198,7 @@ FWL_Error IFWL_Widget::TransformTo(IFWL_Widget* pWidget, } fx += szOffset.x; fy += szOffset.y; - return FWL_Error::Succeeded; + return; } CFX_RectF r; CFX_Matrix m; @@ -259,16 +212,16 @@ FWL_Error IFWL_Widget::TransformTo(IFWL_Widget* pWidget, } IFWL_Widget* form1 = m_pWidgetMgr->GetSystemFormWidget(this); if (!form1) - return FWL_Error::Indefinite; + return; if (!pWidget) { form1->GetWidgetRect(r); fx += r.left; fy += r.top; - return FWL_Error::Succeeded; + return; } IFWL_Widget* form2 = m_pWidgetMgr->GetSystemFormWidget(pWidget); if (!form2) - return FWL_Error::Indefinite; + return; if (form1 != form2) { form1->GetWidgetRect(r); fx += r.left; @@ -288,16 +241,11 @@ FWL_Error IFWL_Widget::TransformTo(IFWL_Widget* pWidget, fx -= r.left; fy -= r.top; } - return FWL_Error::Succeeded; } -FWL_Error IFWL_Widget::TransformTo(IFWL_Widget* pWidget, CFX_RectF& rt) { - return TransformTo(pWidget, rt.left, rt.top); -} - -FWL_Error IFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { +void IFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { if (!m_pProperties) - return FWL_Error::Indefinite; + return; if (bGlobal) { IFWL_Widget* parent = GetParent(); CFX_ArrayTemplate<IFWL_Widget*> parents; @@ -316,100 +264,20 @@ FWL_Error IFWL_Widget::GetMatrix(CFX_Matrix& matrix, bool bGlobal) { matrix.Concat(ctmOnParent, true); matrix.Translate(rect.left, rect.top, true); } - matrix.Concat(m_pProperties->m_ctmOnParent, true); + CFX_Matrix m; + m.SetIdentity(); + matrix.Concat(m, true); parents.RemoveAll(); } else { - matrix = m_pProperties->m_ctmOnParent; - } - return FWL_Error::Succeeded; -} - -FWL_Error IFWL_Widget::SetMatrix(const CFX_Matrix& matrix) { - if (!m_pProperties) - return FWL_Error::Indefinite; - IFWL_Widget* parent = GetParent(); - if (!parent) { - return FWL_Error::Indefinite; + matrix.SetIdentity(); } - m_pProperties->m_ctmOnParent = matrix; - return FWL_Error::Succeeded; } -FWL_Error IFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, - const CFX_Matrix* pMatrix) { - return FWL_Error::Indefinite; -} +void IFWL_Widget::DrawWidget(CFX_Graphics* pGraphics, + const CFX_Matrix* pMatrix) {} -IFWL_ThemeProvider* IFWL_Widget::GetThemeProvider() { - return m_pProperties->m_pThemeProvider; -} -FWL_Error IFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { +void IFWL_Widget::SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) { m_pProperties->m_pThemeProvider = pThemeProvider; - return FWL_Error::Succeeded; -} - -const IFWL_App* IFWL_Widget::GetOwnerApp() const { - return m_pOwnerApp; -} - -uint32_t IFWL_Widget::GetEventKey() const { - return m_nEventKey; -} - -void IFWL_Widget::SetEventKey(uint32_t key) { - m_nEventKey = key; -} - -void* IFWL_Widget::GetLayoutItem() const { - return m_pLayoutItem; -} - -void IFWL_Widget::SetLayoutItem(void* pItem) { - m_pLayoutItem = pItem; -} - -void IFWL_Widget::SetAssociateWidget(CFWL_Widget* pAssociate) { - m_pAssociate = pAssociate; -} -bool IFWL_Widget::IsEnabled() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == 0; -} - -bool IFWL_Widget::IsVisible() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Invisible) == 0; -} - -bool IFWL_Widget::IsActive() const { - return (m_pProperties->m_dwStates & FWL_WGTSTATE_Deactivated) == 0; -} - -bool IFWL_Widget::IsOverLapper() const { - return (m_pProperties->m_dwStyles & FWL_WGTSTYLE_WindowTypeMask) == - FWL_WGTSTYLE_OverLapper; -} - -bool IFWL_Widget::IsPopup() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Popup); -} - -bool IFWL_Widget::IsChild() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Child); -} - -bool IFWL_Widget::IsLocked() const { - return m_iLock > 0; -} - -bool IFWL_Widget::IsOffscreen() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Offscreen); -} - -bool IFWL_Widget::HasBorder() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_Border); -} - -bool IFWL_Widget::HasEdge() const { - return !!(m_pProperties->m_dwStyles & FWL_WGTSTYLE_EdgeMask); } void IFWL_Widget::GetEdgeRect(CFX_RectF& rtEdge) { @@ -495,10 +363,6 @@ IFWL_Widget* IFWL_Widget::GetRootOuter() { return pRet; } -#define FWL_WGT_CalcHeight 2048 -#define FWL_WGT_CalcWidth 2048 -#define FWL_WGT_CalcMultiLineDefWidth 120.0f - CFX_SizeF IFWL_Widget::CalcTextSize(const CFX_WideString& wsText, IFWL_ThemeProvider* pTheme, bool bMultiLine, @@ -590,14 +454,12 @@ bool IFWL_Widget::GetPopupPosMenu(FX_FLOAT fMinHeight, CFX_RectF& rtPopup) { FX_FLOAT fx = 0; FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); + if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { bool bLeft = m_pProperties->m_rtWidget.left < 0; FX_FLOAT fRight = rtAnchor.right() + rtPopup.width; TransformTo(nullptr, fx, fy); - if (fRight + fx > fScreenWidth || bLeft) { + if (fRight + fx > 0.0f || bLeft) { rtPopup.Set(rtAnchor.left - rtPopup.width, rtAnchor.top, rtPopup.width, rtPopup.height); } else { @@ -607,7 +469,7 @@ bool IFWL_Widget::GetPopupPosMenu(FX_FLOAT fMinHeight, } else { FX_FLOAT fBottom = rtAnchor.bottom() + rtPopup.height; TransformTo(nullptr, fx, fy); - if (fBottom + fy > fScreenHeight) { + if (fBottom + fy > 0.0f) { rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, rtPopup.height); } else { @@ -625,9 +487,7 @@ bool IFWL_Widget::GetPopupPosComboBox(FX_FLOAT fMinHeight, CFX_RectF& rtPopup) { FX_FLOAT fx = 0; FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); + FX_FLOAT fPopHeight = rtPopup.height; if (rtPopup.height > fMaxHeight) { fPopHeight = fMaxHeight; @@ -637,7 +497,7 @@ bool IFWL_Widget::GetPopupPosComboBox(FX_FLOAT fMinHeight, FX_FLOAT fWidth = std::max(rtAnchor.width, rtPopup.width); FX_FLOAT fBottom = rtAnchor.bottom() + fPopHeight; TransformTo(nullptr, fx, fy); - if (fBottom + fy > fScreenHeight) { + if (fBottom + fy > 0.0f) { rtPopup.Set(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); } else { rtPopup.Set(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); @@ -652,11 +512,9 @@ bool IFWL_Widget::GetPopupPosGeneral(FX_FLOAT fMinHeight, CFX_RectF& rtPopup) { FX_FLOAT fx = 0; FX_FLOAT fy = 0; - FX_FLOAT fScreenWidth = 0; - FX_FLOAT fScreenHeight = 0; - GetScreenSize(fScreenWidth, fScreenHeight); + TransformTo(nullptr, fx, fy); - if (rtAnchor.bottom() + fy > fScreenHeight) { + if (rtAnchor.bottom() + fy > 0.0f) { rtPopup.Set(rtAnchor.left, rtAnchor.top - rtPopup.height, rtPopup.width, rtPopup.height); } else { @@ -667,10 +525,6 @@ bool IFWL_Widget::GetPopupPosGeneral(FX_FLOAT fMinHeight, return true; } -bool IFWL_Widget::GetScreenSize(FX_FLOAT& fx, FX_FLOAT& fy) { - return false; -} - void IFWL_Widget::RegisterEventTarget(IFWL_Widget* pEventSource, uint32_t dwFilter) { const IFWL_App* pApp = GetOwnerApp(); |