diff options
-rw-r--r-- | xfa/fwl/cfwl_combobox.cpp | 29 | ||||
-rw-r--r-- | xfa/fwl/cfwl_combobox.h | 5 | ||||
-rw-r--r-- | xfa/fwl/cfwl_datetimepicker.cpp | 21 | ||||
-rw-r--r-- | xfa/fwl/cfwl_datetimepicker.h | 4 | ||||
-rw-r--r-- | xfa/fwl/cfwl_widget.cpp | 94 | ||||
-rw-r--r-- | xfa/fwl/cfwl_widget.h | 16 |
6 files changed, 59 insertions, 110 deletions
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp index 143d797fbd..0a5ccd0e7c 100644 --- a/xfa/fwl/cfwl_combobox.cpp +++ b/xfa/fwl/cfwl_combobox.cpp @@ -1014,3 +1014,32 @@ void CFWL_ComboBox::DisForm_OnKey(CFWL_MessageKey* pMsg) { if (m_pEdit) m_pEdit->GetDelegate()->OnProcessMessage(pMsg); } + +void CFWL_ComboBox::GetPopupPos(float fMinHeight, + float fMaxHeight, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup) { + if (m_pWidgetMgr->IsFormDisabled()) { + m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, + rtPopup); + return; + } + + float fPopHeight = rtPopup.height; + if (rtPopup.height > fMaxHeight) + fPopHeight = fMaxHeight; + else if (rtPopup.height < fMinHeight) + fPopHeight = fMinHeight; + + float fWidth = std::max(rtAnchor.width, rtPopup.width); + float fBottom = rtAnchor.bottom() + fPopHeight; + CFX_PointF point = TransformTo(nullptr, CFX_PointF()); + if (fBottom + point.y > 0.0f) { + rtPopup = + CFX_RectF(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); + } else { + rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); + } + + rtPopup.Offset(point.x, point.y); +} diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h index a9dc635373..6dbd05df78 100644 --- a/xfa/fwl/cfwl_combobox.h +++ b/xfa/fwl/cfwl_combobox.h @@ -116,6 +116,11 @@ class CFWL_ComboBox : public CFWL_Widget { void ResetEditAlignment(); void ResetListItemAlignment(); void InitProxyForm(); + void GetPopupPos(float fMinHeight, + float fMaxHeight, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup); + void OnFocusChanged(CFWL_Message* pMsg, bool bSet); void OnLButtonDown(CFWL_MessageMouse* pMsg); void OnLButtonUp(CFWL_MessageMouse* pMsg); diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp index f3da454354..101540ffc0 100644 --- a/xfa/fwl/cfwl_datetimepicker.cpp +++ b/xfa/fwl/cfwl_datetimepicker.cpp @@ -604,3 +604,24 @@ void CFWL_DateTimePicker::DisForm_OnFocusChanged(CFWL_Message* pMsg, rtInvalidate.Inflate(2, 2); RepaintRect(rtInvalidate); } + +void CFWL_DateTimePicker::GetPopupPos(float fMinHeight, + float fMaxHeight, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup) { + if (m_pWidgetMgr->IsFormDisabled()) { + m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, + rtPopup); + return; + } + + CFX_PointF point = TransformTo(nullptr, CFX_PointF()); + if (rtAnchor.bottom() + point.y > 0.0f) { + rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, + rtPopup.width, rtPopup.height); + } else { + rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, + rtPopup.height); + } + rtPopup.Offset(point.x, point.y); +} diff --git a/xfa/fwl/cfwl_datetimepicker.h b/xfa/fwl/cfwl_datetimepicker.h index 6d536016dd..d20df084be 100644 --- a/xfa/fwl/cfwl_datetimepicker.h +++ b/xfa/fwl/cfwl_datetimepicker.h @@ -75,6 +75,10 @@ class CFWL_DateTimePicker : public CFWL_Widget { WideString FormatDateString(int32_t iYear, int32_t iMonth, int32_t iDay); void ResetEditAlignment(); void InitProxyForm(); + void GetPopupPos(float fMinHeight, + float fMaxHeight, + const CFX_RectF& rtAnchor, + CFX_RectF& rtPopup); void OnFocusChanged(CFWL_Message* pMsg, bool bSet); void OnLButtonDown(CFWL_MessageMouse* pMsg); void OnLButtonUp(CFWL_MessageMouse* pMsg); diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp index b9b04cf1f4..c8d0db682a 100644 --- a/xfa/fwl/cfwl_widget.cpp +++ b/xfa/fwl/cfwl_widget.cpp @@ -379,100 +379,6 @@ void CFWL_Widget::SetGrab(bool bSet) { pDriver->SetGrab(this, bSet); } -void CFWL_Widget::GetPopupPos(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - if (GetClassID() == FWL_Type::ComboBox) { - if (m_pWidgetMgr->IsFormDisabled()) { - m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, - rtPopup); - return; - } - GetPopupPosComboBox(fMinHeight, fMaxHeight, rtAnchor, rtPopup); - return; - } - if (GetClassID() == FWL_Type::DateTimePicker && - m_pWidgetMgr->IsFormDisabled()) { - m_pWidgetMgr->GetAdapterPopupPos(this, fMinHeight, fMaxHeight, rtAnchor, - rtPopup); - return; - } - GetPopupPosGeneral(fMinHeight, fMaxHeight, rtAnchor, rtPopup); -} - -bool CFWL_Widget::GetPopupPosMenu(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - if (GetStylesEx() & FWL_STYLEEXT_MNU_Vert) { - bool bLeft = m_pProperties->m_rtWidget.left < 0; - float fRight = rtAnchor.right() + rtPopup.width; - CFX_PointF point = TransformTo(nullptr, CFX_PointF()); - if (fRight + point.x > 0.0f || bLeft) { - rtPopup = CFX_RectF(rtAnchor.left - rtPopup.width, rtAnchor.top, - rtPopup.width, rtPopup.height); - } else { - rtPopup = CFX_RectF(rtAnchor.right(), rtAnchor.top, rtPopup.width, - rtPopup.height); - } - rtPopup.Offset(point.x, point.y); - return true; - } - - float fBottom = rtAnchor.bottom() + rtPopup.height; - CFX_PointF point = TransformTo(nullptr, point); - if (fBottom + point.y > 0.0f) { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, - rtPopup.width, rtPopup.height); - } else { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - rtPopup.Offset(point.x, point.y); - return true; -} - -bool CFWL_Widget::GetPopupPosComboBox(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - float fPopHeight = rtPopup.height; - if (rtPopup.height > fMaxHeight) - fPopHeight = fMaxHeight; - else if (rtPopup.height < fMinHeight) - fPopHeight = fMinHeight; - - float fWidth = std::max(rtAnchor.width, rtPopup.width); - float fBottom = rtAnchor.bottom() + fPopHeight; - CFX_PointF point = TransformTo(nullptr, CFX_PointF()); - if (fBottom + point.y > 0.0f) { - rtPopup = - CFX_RectF(rtAnchor.left, rtAnchor.top - fPopHeight, fWidth, fPopHeight); - } else { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), fWidth, fPopHeight); - } - - rtPopup.Offset(point.x, point.y); - return true; -} - -bool CFWL_Widget::GetPopupPosGeneral(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup) { - CFX_PointF point = TransformTo(nullptr, CFX_PointF()); - if (rtAnchor.bottom() + point.y > 0.0f) { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.top - rtPopup.height, - rtPopup.width, rtPopup.height); - } else { - rtPopup = CFX_RectF(rtAnchor.left, rtAnchor.bottom(), rtPopup.width, - rtPopup.height); - } - rtPopup.Offset(point.x, point.y); - return true; -} - void CFWL_Widget::RegisterEventTarget(CFWL_Widget* pEventSource) { const CFWL_App* pApp = GetOwnerApp(); if (!pApp) diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h index 27cb458b9e..66ec0e170c 100644 --- a/xfa/fwl/cfwl_widget.h +++ b/xfa/fwl/cfwl_widget.h @@ -136,10 +136,6 @@ class CFWL_Widget : public IFWL_WidgetDelegate { FDE_TextAlignment iTTOAlign, CFX_RectF& rect); void SetGrab(bool bSet); - void GetPopupPos(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); void RegisterEventTarget(CFWL_Widget* pEventSource); void UnregisterEventTarget(); void DispatchEvent(CFWL_Event* pEvent); @@ -163,18 +159,6 @@ class CFWL_Widget : public IFWL_WidgetDelegate { bool IsPopup() const; bool IsChild() const; CFWL_Widget* GetRootOuter(); - bool GetPopupPosMenu(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - bool GetPopupPosComboBox(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); - bool GetPopupPosGeneral(float fMinHeight, - float fMaxHeight, - const CFX_RectF& rtAnchor, - CFX_RectF& rtPopup); void DrawBackground(CXFA_Graphics* pGraphics, CFWL_Part iPartBk, IFWL_ThemeProvider* pTheme, |