Fix Ui::RpWidget geometry constraints.
This commit is contained in:
parent
d452ae8ba6
commit
868f2671fa
4 changed files with 27 additions and 17 deletions
|
|
@ -146,6 +146,7 @@ DefaultWindowHelper::DefaultWindowHelper(not_null<RpWidget*> window)
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::init() {
|
void DefaultWindowHelper::init() {
|
||||||
|
_title->show(); // Be consistent with _nativeFrame == false.
|
||||||
window()->setWindowFlag(Qt::FramelessWindowHint);
|
window()->setWindowFlag(Qt::FramelessWindowHint);
|
||||||
|
|
||||||
if (WindowExtentsSupported()) {
|
if (WindowExtentsSupported()) {
|
||||||
|
|
@ -327,24 +328,18 @@ void DefaultWindowHelper::setNativeFrame(bool enabled) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::setMinimumSize(QSize size) {
|
void DefaultWindowHelper::setMinimumSize(QSize size) {
|
||||||
const auto sizeWithMargins = size
|
const auto sizeWithMargins = size.grownBy(bodyPadding());
|
||||||
.grownBy({ 0, _title->isVisible() ? _title->height() : 0, 0, 0 })
|
|
||||||
.grownBy(resizeArea());
|
|
||||||
window()->setMinimumSize(sizeWithMargins);
|
window()->setMinimumSize(sizeWithMargins);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::setFixedSize(QSize size) {
|
void DefaultWindowHelper::setFixedSize(QSize size) {
|
||||||
const auto sizeWithMargins = size
|
const auto sizeWithMargins = size.grownBy(bodyPadding());
|
||||||
.grownBy({ 0, _title->isVisible() ? _title->height() : 0, 0, 0 })
|
|
||||||
.grownBy(resizeArea());
|
|
||||||
window()->setFixedSize(sizeWithMargins);
|
window()->setFixedSize(sizeWithMargins);
|
||||||
_title->setResizeEnabled(false);
|
_title->setResizeEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::setGeometry(QRect rect) {
|
void DefaultWindowHelper::setGeometry(QRect rect) {
|
||||||
window()->setGeometry(rect
|
window()->setGeometry(rect.marginsAdded(bodyPadding()));
|
||||||
.marginsAdded({ 0, _title->isVisible() ? _title->height() : 0, 0, 0 })
|
|
||||||
.marginsAdded(resizeArea()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::paintBorders(QPainter &p) {
|
void DefaultWindowHelper::paintBorders(QPainter &p) {
|
||||||
|
|
@ -404,6 +399,14 @@ void DefaultWindowHelper::updateWindowExtents() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int DefaultWindowHelper::titleHeight() const {
|
||||||
|
return _title->isHidden() ? 0 : _title->height();
|
||||||
|
}
|
||||||
|
|
||||||
|
QMargins DefaultWindowHelper::bodyPadding() const {
|
||||||
|
return resizeArea() + QMargins{ 0, titleHeight(), 0, 0 };
|
||||||
|
}
|
||||||
|
|
||||||
void DefaultWindowHelper::updateCursor(Qt::Edges edges) {
|
void DefaultWindowHelper::updateCursor(Qt::Edges edges) {
|
||||||
if (((edges & Qt::LeftEdge) && (edges & Qt::TopEdge))
|
if (((edges & Qt::LeftEdge) && (edges & Qt::TopEdge))
|
||||||
|| ((edges & Qt::RightEdge) && (edges & Qt::BottomEdge))) {
|
|| ((edges & Qt::RightEdge) && (edges & Qt::BottomEdge))) {
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,8 @@ private:
|
||||||
void paintBorders(QPainter &p);
|
void paintBorders(QPainter &p);
|
||||||
void updateWindowExtents();
|
void updateWindowExtents();
|
||||||
void updateCursor(Qt::Edges edges);
|
void updateCursor(Qt::Edges edges);
|
||||||
|
[[nodiscard]] int titleHeight() const;
|
||||||
|
[[nodiscard]] QMargins bodyPadding() const;
|
||||||
|
|
||||||
const not_null<DefaultTitleWidget*> _title;
|
const not_null<DefaultTitleWidget*> _title;
|
||||||
const not_null<RpWidget*> _body;
|
const not_null<RpWidget*> _body;
|
||||||
|
|
|
||||||
|
|
@ -151,7 +151,6 @@ WindowHelper::WindowHelper(not_null<RpWidget*> window)
|
||||||
, _shadow(std::in_place, window, st::windowShadowFg->c) {
|
, _shadow(std::in_place, window, st::windowShadowFg->c) {
|
||||||
Expects(_handle != nullptr);
|
Expects(_handle != nullptr);
|
||||||
|
|
||||||
GetNativeFilter()->registerWindow(_handle, this);
|
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -186,13 +185,11 @@ void WindowHelper::setNativeFrame(bool enabled) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowHelper::setMinimumSize(QSize size) {
|
void WindowHelper::setMinimumSize(QSize size) {
|
||||||
const auto titleHeight = _title->isVisible() ? _title->height() : 0;
|
window()->setMinimumSize(size.width(), titleHeight() + size.height());
|
||||||
window()->setMinimumSize(size.width(), titleHeight + size.height());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowHelper::setFixedSize(QSize size) {
|
void WindowHelper::setFixedSize(QSize size) {
|
||||||
const auto titleHeight = _title->isVisible() ? _title->height() : 0;
|
window()->setFixedSize(size.width(), titleHeight() + size.height());
|
||||||
window()->setFixedSize(size.width(), titleHeight + size.height());
|
|
||||||
_title->setResizeEnabled(false);
|
_title->setResizeEnabled(false);
|
||||||
if (_shadow) {
|
if (_shadow) {
|
||||||
_shadow->setResizeEnabled(false);
|
_shadow->setResizeEnabled(false);
|
||||||
|
|
@ -200,8 +197,7 @@ void WindowHelper::setFixedSize(QSize size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowHelper::setGeometry(QRect rect) {
|
void WindowHelper::setGeometry(QRect rect) {
|
||||||
const auto titleHeight = _title->isVisible() ? _title->height() : 0;
|
window()->setGeometry(rect.marginsAdded({ 0, titleHeight(), 0, 0 }));
|
||||||
window()->setGeometry(rect.marginsAdded({ 0, titleHeight, 0, 0 }));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowHelper::showFullScreen() {
|
void WindowHelper::showFullScreen() {
|
||||||
|
|
@ -221,6 +217,9 @@ void WindowHelper::showNormal() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WindowHelper::init() {
|
void WindowHelper::init() {
|
||||||
|
_title->show(); // Be consistent with _nativeFrame == false.
|
||||||
|
GetNativeFilter()->registerWindow(_handle, this);
|
||||||
|
|
||||||
style::PaletteChanged(
|
style::PaletteChanged(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
if (_shadow) {
|
if (_shadow) {
|
||||||
|
|
@ -429,7 +428,8 @@ bool WindowHelper::handleNativeEvent(
|
||||||
p.y - r.top + _marginsDelta.top());
|
p.y - r.top + _marginsDelta.top());
|
||||||
if (!window()->rect().contains(mapped)) {
|
if (!window()->rect().contains(mapped)) {
|
||||||
*result = HTTRANSPARENT;
|
*result = HTTRANSPARENT;
|
||||||
} else if (!_title->isVisible() || !_title->geometry().contains(mapped)) {
|
} else if (_title->isHidden()
|
||||||
|
|| !_title->geometry().contains(mapped)) {
|
||||||
*result = HTCLIENT;
|
*result = HTCLIENT;
|
||||||
} else switch (_title->hitTest(_title->pos() + mapped)) {
|
} else switch (_title->hitTest(_title->pos() + mapped)) {
|
||||||
case HitTestResult::Client:
|
case HitTestResult::Client:
|
||||||
|
|
@ -502,6 +502,10 @@ bool WindowHelper::fixedSize() const {
|
||||||
return window()->minimumSize() == window()->maximumSize();
|
return window()->minimumSize() == window()->maximumSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WindowHelper::titleHeight() const {
|
||||||
|
return _title->isHidden() ? 0 : _title->height();
|
||||||
|
}
|
||||||
|
|
||||||
void WindowHelper::updateMargins() {
|
void WindowHelper::updateMargins() {
|
||||||
if (_updatingMargins) return;
|
if (_updatingMargins) return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ private:
|
||||||
LRESULT *result);
|
LRESULT *result);
|
||||||
[[nodiscard]] bool fixedSize() const;
|
[[nodiscard]] bool fixedSize() const;
|
||||||
|
|
||||||
|
[[nodiscard]] int titleHeight() const;
|
||||||
static not_null<NativeFilter*> GetNativeFilter();
|
static not_null<NativeFilter*> GetNativeFilter();
|
||||||
|
|
||||||
const HWND _handle = nullptr;
|
const HWND _handle = nullptr;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue