summaryrefslogtreecommitdiff
path: root/xfa/fwl/cfwl_combobox.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fwl/cfwl_combobox.cpp')
-rw-r--r--xfa/fwl/cfwl_combobox.cpp29
1 files changed, 29 insertions, 0 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);
+}