Added ability to set vertical origin to Ui::PopupMenu.

This commit is contained in:
23rd 2022-03-16 09:25:20 +03:00
parent d98c3d539b
commit bf65a06735
2 changed files with 21 additions and 6 deletions

View file

@ -601,6 +601,10 @@ void PopupMenu::setForcedOrigin(PanelAnimation::Origin origin) {
_forcedOrigin = origin; _forcedOrigin = origin;
} }
void PopupMenu::setForcedVerticalOrigin(VerticalOrigin origin) {
_forcedVerticalOrigin = origin;
}
void PopupMenu::showAnimated(PanelAnimation::Origin origin) { void PopupMenu::showAnimated(PanelAnimation::Origin origin) {
setOrigin(origin); setOrigin(origin);
showStarted(); showStarted();
@ -760,15 +764,19 @@ void PopupMenu::showMenu(const QPoint &p, PopupMenu *parent, TriggeredSource sou
const auto forceLeft = _forcedOrigin const auto forceLeft = _forcedOrigin
&& (*_forcedOrigin == Origin::TopLeft && (*_forcedOrigin == Origin::TopLeft
|| *_forcedOrigin == Origin::BottomLeft); || *_forcedOrigin == Origin::BottomLeft);
const auto forceTop = _forcedOrigin const auto forceTop = (_forcedVerticalOrigin
&& (*_forcedOrigin == Origin::TopLeft && (*_forcedVerticalOrigin == VerticalOrigin::Top))
|| *_forcedOrigin == Origin::TopRight); || (_forcedOrigin
&& (*_forcedOrigin == Origin::TopLeft
|| *_forcedOrigin == Origin::TopRight));
const auto forceRight = _forcedOrigin const auto forceRight = _forcedOrigin
&& (*_forcedOrigin == Origin::TopRight && (*_forcedOrigin == Origin::TopRight
|| *_forcedOrigin == Origin::BottomRight); || *_forcedOrigin == Origin::BottomRight);
const auto forceBottom = _forcedOrigin const auto forceBottom = (_forcedVerticalOrigin
&& (*_forcedOrigin == Origin::BottomLeft && (*_forcedVerticalOrigin == VerticalOrigin::Bottom))
|| *_forcedOrigin == Origin::BottomRight); || (_forcedOrigin
&& (*_forcedOrigin == Origin::BottomLeft
|| *_forcedOrigin == Origin::BottomRight));
auto w = p - QPoint(0, _padding.top()); auto w = p - QPoint(0, _padding.top());
auto r = screen->availableGeometry(); auto r = screen->availableGeometry();
_useTransparency = Platform::TranslucentWindowsSupported(p); _useTransparency = Platform::TranslucentWindowsSupported(p);

View file

@ -21,6 +21,11 @@ class ScrollArea;
class PopupMenu : public RpWidget { class PopupMenu : public RpWidget {
public: public:
enum class VerticalOrigin {
Top,
Bottom,
};
PopupMenu(QWidget *parent, const style::PopupMenu &st = st::defaultPopupMenu); PopupMenu(QWidget *parent, const style::PopupMenu &st = st::defaultPopupMenu);
PopupMenu(QWidget *parent, QMenu *menu, 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 popup(const QPoint &p);
void hideMenu(bool fast = false); void hideMenu(bool fast = false);
void setForcedOrigin(PanelAnimation::Origin origin); void setForcedOrigin(PanelAnimation::Origin origin);
void setForcedVerticalOrigin(VerticalOrigin origin);
void setDestroyedCallback(Fn<void()> callback) { void setDestroyedCallback(Fn<void()> callback) {
_destroyedCallback = std::move(callback); _destroyedCallback = std::move(callback);
@ -143,6 +149,7 @@ private:
QPointer<PopupMenu> _activeSubmenu; QPointer<PopupMenu> _activeSubmenu;
std::optional<VerticalOrigin> _forcedVerticalOrigin;
PanelAnimation::Origin _origin = PanelAnimation::Origin::TopLeft; PanelAnimation::Origin _origin = PanelAnimation::Origin::TopLeft;
std::optional<PanelAnimation::Origin> _forcedOrigin; std::optional<PanelAnimation::Origin> _forcedOrigin;
std::unique_ptr<PanelAnimation> _showAnimation; std::unique_ptr<PanelAnimation> _showAnimation;