Add a private method to get control widget by enum to TitleWidgetQt

This commit is contained in:
Ilya Fedin 2021-02-06 18:16:44 +04:00 committed by John Preston
parent 3a659b4b54
commit e109da037e
2 changed files with 30 additions and 34 deletions

View File

@ -110,6 +110,16 @@ bool TitleWidgetQt::hasShadow() const {
&& Ui::Platform::TranslucentWindowsSupported(center);
}
Ui::IconButton *TitleWidgetQt::controlWidget(Control control) const {
switch (control) {
case Control::Minimize: return _minimize;
case Control::Maximize: return _maximizeRestore;
case Control::Close: return _close;
}
return nullptr;
}
void TitleWidgetQt::paintEvent(QPaintEvent *e) {
auto active = isActiveWindow();
if (_activeState != active) {
@ -141,22 +151,24 @@ void TitleWidgetQt::updateControlsPosition() {
const auto controlsLeft = controlsLayout.left;
const auto controlsRight = controlsLayout.right;
if (ranges::contains(controlsLeft, Control::Minimize)
|| ranges::contains(controlsRight, Control::Minimize)) {
const auto controlPresent = [&](Control control) {
return ranges::contains(controlsLeft, control)
|| ranges::contains(controlsRight, control);
};
if (controlPresent(Control::Minimize)) {
_minimize->show();
} else {
_minimize->hide();
}
if (ranges::contains(controlsLeft, Control::Maximize)
|| ranges::contains(controlsRight, Control::Maximize)) {
if (controlPresent(Control::Maximize)) {
_maximizeRestore->show();
} else {
_maximizeRestore->hide();
}
if (ranges::contains(controlsLeft, Control::Close)
|| ranges::contains(controlsRight, Control::Close)) {
if (controlPresent(Control::Close)) {
_close->show();
} else {
_close->hide();
@ -175,35 +187,18 @@ void TitleWidgetQt::updateControlsPositionBySide(
auto position = 0;
for (const auto &control : preparedControls) {
switch (control) {
case Control::Minimize:
if (right) {
_minimize->moveToRight(position, 0);
} else {
_minimize->moveToLeft(position, 0);
}
position += _minimize->width();
break;
case Control::Maximize:
if (right) {
_maximizeRestore->moveToRight(position, 0);
} else {
_maximizeRestore->moveToLeft(position, 0);
}
position += _maximizeRestore->width();
break;
case Control::Close:
if (right) {
_close->moveToRight(position, 0);
} else {
_close->moveToLeft(position, 0);
}
position += _close->width();
break;
const auto widget = controlWidget(control);
if (!widget) {
continue;
}
if (right) {
widget->moveToRight(position, 0);
} else {
widget->moveToLeft(position, 0);
}
position += widget->width();
}
}

View File

@ -51,6 +51,7 @@ private:
void toggleFramelessWindow(bool enabled);
bool hasShadow() const;
Ui::IconButton *controlWidget(Control control) const;
QMargins resizeArea() const;
Qt::Edges edgesFromPos(const QPoint &pos) const;
void updateCursor(Qt::Edges edges);