From bf65a06735d98d883d3b00ddfea3dafa0c5daebf Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 16 Mar 2022 09:25:20 +0300 Subject: [PATCH] Added ability to set vertical origin to Ui::PopupMenu. --- ui/widgets/popup_menu.cpp | 20 ++++++++++++++------ ui/widgets/popup_menu.h | 7 +++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/ui/widgets/popup_menu.cpp b/ui/widgets/popup_menu.cpp index 308fed7..039659c 100644 --- a/ui/widgets/popup_menu.cpp +++ b/ui/widgets/popup_menu.cpp @@ -601,6 +601,10 @@ void PopupMenu::setForcedOrigin(PanelAnimation::Origin origin) { _forcedOrigin = origin; } +void PopupMenu::setForcedVerticalOrigin(VerticalOrigin origin) { + _forcedVerticalOrigin = origin; +} + void PopupMenu::showAnimated(PanelAnimation::Origin origin) { setOrigin(origin); showStarted(); @@ -760,15 +764,19 @@ void PopupMenu::showMenu(const QPoint &p, PopupMenu *parent, TriggeredSource sou const auto forceLeft = _forcedOrigin && (*_forcedOrigin == Origin::TopLeft || *_forcedOrigin == Origin::BottomLeft); - const auto forceTop = _forcedOrigin - && (*_forcedOrigin == Origin::TopLeft - || *_forcedOrigin == Origin::TopRight); + const auto forceTop = (_forcedVerticalOrigin + && (*_forcedVerticalOrigin == VerticalOrigin::Top)) + || (_forcedOrigin + && (*_forcedOrigin == Origin::TopLeft + || *_forcedOrigin == Origin::TopRight)); const auto forceRight = _forcedOrigin && (*_forcedOrigin == Origin::TopRight || *_forcedOrigin == Origin::BottomRight); - const auto forceBottom = _forcedOrigin - && (*_forcedOrigin == Origin::BottomLeft - || *_forcedOrigin == Origin::BottomRight); + const auto forceBottom = (_forcedVerticalOrigin + && (*_forcedVerticalOrigin == VerticalOrigin::Bottom)) + || (_forcedOrigin + && (*_forcedOrigin == Origin::BottomLeft + || *_forcedOrigin == Origin::BottomRight)); auto w = p - QPoint(0, _padding.top()); auto r = screen->availableGeometry(); _useTransparency = Platform::TranslucentWindowsSupported(p); diff --git a/ui/widgets/popup_menu.h b/ui/widgets/popup_menu.h index 26937dd..1cfe9e7 100644 --- a/ui/widgets/popup_menu.h +++ b/ui/widgets/popup_menu.h @@ -21,6 +21,11 @@ class ScrollArea; class PopupMenu : public RpWidget { public: + enum class VerticalOrigin { + Top, + Bottom, + }; + PopupMenu(QWidget *parent, const style::PopupMenu &st = st::defaultPopupMenu); PopupMenu(QWidget *parent, QMenu *menu, const style::PopupMenu &st = st::defaultPopupMenu); @@ -53,6 +58,7 @@ public: void popup(const QPoint &p); void hideMenu(bool fast = false); void setForcedOrigin(PanelAnimation::Origin origin); + void setForcedVerticalOrigin(VerticalOrigin origin); void setDestroyedCallback(Fn callback) { _destroyedCallback = std::move(callback); @@ -143,6 +149,7 @@ private: QPointer _activeSubmenu; + std::optional _forcedVerticalOrigin; PanelAnimation::Origin _origin = PanelAnimation::Origin::TopLeft; std::optional _forcedOrigin; std::unique_ptr _showAnimation;