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();
}
HitTestResult TitleControls::hitTest(QPoint point) const {
const auto test = [&](const object_ptr<Button> &button) {
return button && button->geometry().contains(point);
HitTestResult TitleControls::hitTest(QPoint point, int padding) const {
const auto parent = _close->parentWidget()->geometry();
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;
} else if (test(_maximizeRestore)) {
} else if (test(_maximizeRestore, false)) {
return HitTestResult::MaximizeRestore;
} else if (test(_close)) {
} else if (test(_close, true)) {
return HitTestResult::Close;
}
return HitTestResult::None;
@ -502,7 +505,8 @@ std::unique_ptr<SeparateTitleControls> SetupSeparateTitleControls(
) | rpl::start_with_next([=](not_null<HitTestRequest*> request) {
const auto origin = raw->wrap.pos();
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) {
request->result = controlsResult;
}

View file

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

View file

@ -130,7 +130,10 @@ HitTestResult TitleWidget::hitTest(QPoint point) const {
const auto origin = _paddingHelper
? _paddingHelper->controlsParent.pos()
: 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)
? controlsResult
: HitTestResult::Caption;