From 11aa7bcd4e8a374dcd389e9a5633fa432fc57e91 Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 30 Sep 2019 11:58:45 +0300 Subject: [PATCH] Support title-aware Window::setGeometry. --- ui/platform/mac/ui_window_mac.h | 1 + ui/platform/mac/ui_window_mac.mm | 17 ++++++++++++----- ui/platform/ui_platform_window.h | 1 + ui/platform/win/ui_window_win.cpp | 4 ++++ ui/platform/win/ui_window_win.h | 1 + ui/widgets/window.cpp | 8 ++++++++ ui/widgets/window.h | 1 + 7 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ui/platform/mac/ui_window_mac.h b/ui/platform/mac/ui_window_mac.h index 0190360..d79c5b2 100644 --- a/ui/platform/mac/ui_window_mac.h +++ b/ui/platform/mac/ui_window_mac.h @@ -21,6 +21,7 @@ public: not_null body() override; void setTitle(const QString &title) override; void setSizeMin(QSize size) override; + void setGeometry(QRect rect) override; private: class Private; diff --git a/ui/platform/mac/ui_window_mac.mm b/ui/platform/mac/ui_window_mac.mm index 3cc031e..a0499b8 100644 --- a/ui/platform/mac/ui_window_mac.mm +++ b/ui/platform/mac/ui_window_mac.mm @@ -75,9 +75,9 @@ private: class WindowHelper::Private final { public: explicit Private(not_null owner); - + [[nodiscard]] int customTitleHeight() const; - + private: void init(); void initOpenGL(); @@ -91,9 +91,9 @@ private: NSWindow * __weak _nativeWindow = nil; NSView * __weak _nativeView = nil; - + std::unique_ptr _layerCreationChecker; - + int _customTitleHeight = 0; }; @@ -205,7 +205,14 @@ void WindowHelper::toggleCustomTitle(bool visible) { } void WindowHelper::setSizeMin(QSize size) { - _window->setMinimumSize(size.width(), _title->height() + size.height()); + _window->setMinimumSize( + size.width(), + (_title ? _title->height() : 0) + size.height()); +} + +void WindowHelper::setGeometry(QRect rect) { + _window->setGeometry( + rect.marginsAdded({ 0, (_title ? _title->height() : 0), 0, 0 })); } void WindowHelper::init() { diff --git a/ui/platform/ui_platform_window.h b/ui/platform/ui_platform_window.h index 3069163..3710c3f 100644 --- a/ui/platform/ui_platform_window.h +++ b/ui/platform/ui_platform_window.h @@ -17,6 +17,7 @@ public: [[nodiscard]] virtual not_null body() = 0; virtual void setTitle(const QString &title) = 0; virtual void setSizeMin(QSize size) = 0; + virtual void setGeometry(QRect rect) = 0; virtual ~BasicWindowHelper() = default; }; diff --git a/ui/platform/win/ui_window_win.cpp b/ui/platform/win/ui_window_win.cpp index 134ecb3..758b043 100644 --- a/ui/platform/win/ui_window_win.cpp +++ b/ui/platform/win/ui_window_win.cpp @@ -103,6 +103,10 @@ void WindowHelper::setSizeMin(QSize size) { _window->setMinimumSize(size.width(), _title->height() + size.height()); } +void WindowHelper::setGeometry(QRect rect) { + _window->setGeometry(rect.marginsAdded({ 0, _title->height(), 0, 0 })); +} + void WindowHelper::init() { style::PaletteChanged( ) | rpl::start_with_next([=] { diff --git a/ui/platform/win/ui_window_win.h b/ui/platform/win/ui_window_win.h index d51298b..2781d84 100644 --- a/ui/platform/win/ui_window_win.h +++ b/ui/platform/win/ui_window_win.h @@ -24,6 +24,7 @@ public: not_null body() override; void setTitle(const QString &title) override; void setSizeMin(QSize size) override; + void setGeometry(QRect rect) override; private: class NativeFilter; diff --git a/ui/widgets/window.cpp b/ui/widgets/window.cpp index 6edd99c..959a967 100644 --- a/ui/widgets/window.cpp +++ b/ui/widgets/window.cpp @@ -42,4 +42,12 @@ void Window::setSizeMin(QSize size) { } } +void Window::setGeometry(QRect rect) { + if (_helper) { + _helper->setGeometry(rect); + } else { + RpWidget::setGeometry(rect); + } +} + } // namespace Ui diff --git a/ui/widgets/window.h b/ui/widgets/window.h index 3e180eb..16f0bf6 100644 --- a/ui/widgets/window.h +++ b/ui/widgets/window.h @@ -23,6 +23,7 @@ public: void setTitle(const QString &title); void setSizeMin(QSize size); + void setGeometry(QRect rect); private: const std::unique_ptr _helper;