Enlarge padded title controls hit area.

This commit is contained in:
John Preston 2022-02-28 19:12:26 +03:00
parent 73ec29fa06
commit 5d475f54f0
3 changed files with 16 additions and 9 deletions

View file

@ -218,15 +218,18 @@ void TitleControls::raise() {
_close->raise(); _close->raise();
} }
HitTestResult TitleControls::hitTest(QPoint point) const { HitTestResult TitleControls::hitTest(QPoint point, int padding) const {
const auto test = [&](const object_ptr<Button> &button) { const auto parent = _close->parentWidget()->geometry();
return button && button->geometry().contains(point); const auto test = [&](const object_ptr<Button> &button, bool close) {
return button && button->geometry().marginsAdded(
{ close ? padding : 0, padding, close ? padding : 0, 0 }
).contains(point);
}; };
if (test(_minimize)) { if (test(_minimize, false)) {
return HitTestResult::Minimize; return HitTestResult::Minimize;
} else if (test(_maximizeRestore)) { } else if (test(_maximizeRestore, false)) {
return HitTestResult::MaximizeRestore; return HitTestResult::MaximizeRestore;
} else if (test(_close)) { } else if (test(_close, true)) {
return HitTestResult::Close; return HitTestResult::Close;
} }
return HitTestResult::None; return HitTestResult::None;
@ -502,7 +505,8 @@ std::unique_ptr<SeparateTitleControls> SetupSeparateTitleControls(
) | rpl::start_with_next([=](not_null<HitTestRequest*> request) { ) | rpl::start_with_next([=](not_null<HitTestRequest*> request) {
const auto origin = raw->wrap.pos(); const auto origin = raw->wrap.pos();
const auto relative = request->point - origin; const auto relative = request->point - origin;
const auto controlsResult = raw->controls.hitTest(relative); const auto padding = window->additionalContentPadding();
const auto controlsResult = raw->controls.hitTest(relative, padding);
if (controlsResult != HitTestResult::None) { if (controlsResult != HitTestResult::None) {
request->result = controlsResult; request->result = controlsResult;
} }

View file

@ -68,7 +68,7 @@ public:
void setResizeEnabled(bool enabled); void setResizeEnabled(bool enabled);
void raise(); void raise();
[[nodiscard]] HitTestResult hitTest(QPoint point) const; [[nodiscard]] HitTestResult hitTest(QPoint point, int padding) const;
void buttonOver(HitTestResult testResult); void buttonOver(HitTestResult testResult);
void buttonDown(HitTestResult testResult); void buttonDown(HitTestResult testResult);

View file

@ -130,7 +130,10 @@ HitTestResult TitleWidget::hitTest(QPoint point) const {
const auto origin = _paddingHelper const auto origin = _paddingHelper
? _paddingHelper->controlsParent.pos() ? _paddingHelper->controlsParent.pos()
: QPoint(); : QPoint();
const auto controlsResult = _controls.hitTest(point - origin); const auto padding = _paddingHelper
? _paddingHelper->padding.current()
: 0;
const auto controlsResult = _controls.hitTest(point - origin, padding);
return (controlsResult != HitTestResult::None) return (controlsResult != HitTestResult::None)
? controlsResult ? controlsResult
: HitTestResult::Caption; : HitTestResult::Caption;