From 9c86755546223bbee3df516d0261a1bb87cf21e2 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Tue, 26 Jan 2021 03:57:50 +0400 Subject: [PATCH] Take custom scale in account when saving window geometry --- Telegram/SourceFiles/settings.h | 1 + .../details/storage_settings_scheme.cpp | 10 ++++++- Telegram/SourceFiles/storage/localstorage.cpp | 9 ++++++- Telegram/SourceFiles/window/main_window.cpp | 26 +++++++++++++++++-- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index ded46cddf6..82a73b0ada 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -73,6 +73,7 @@ struct TWindowPos { int32 moncrc = 0; int maximized = 0; + int scale = 0; int x = 0; int y = 0; int w = 0; diff --git a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp index 4efc521cf5..463c1026f5 100644 --- a/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp +++ b/Telegram/SourceFiles/storage/details/storage_settings_scheme.cpp @@ -725,9 +725,17 @@ bool ReadSetting( auto position = TWindowPos(); stream >> position.x >> position.y >> position.w >> position.h; stream >> position.moncrc >> position.maximized; + stream >> position.scale; if (!CheckStreamStatus(stream)) return false; - DEBUG_LOG(("Window Pos: Read from storage %1, %2, %3, %4 (maximized %5)").arg(position.x).arg(position.y).arg(position.w).arg(position.h).arg(Logs::b(position.maximized))); + DEBUG_LOG(("Window Pos: Read from storage %1, %2, %3, %4 (scale %5%, maximized %6)") + .arg(position.x) + .arg(position.y) + .arg(position.w) + .arg(position.h) + .arg(position.scale) + .arg(Logs::b(position.maximized))); + cSetWindowPos(position); } break; diff --git a/Telegram/SourceFiles/storage/localstorage.cpp b/Telegram/SourceFiles/storage/localstorage.cpp index 1d80e44c13..73a32f7b95 100644 --- a/Telegram/SourceFiles/storage/localstorage.cpp +++ b/Telegram/SourceFiles/storage/localstorage.cpp @@ -532,8 +532,15 @@ void writeSettings() { auto position = cWindowPos(); data.stream << quint32(dbiWindowPosition) << qint32(position.x) << qint32(position.y) << qint32(position.w) << qint32(position.h); data.stream << qint32(position.moncrc) << qint32(position.maximized); + data.stream << qint32(position.scale); - DEBUG_LOG(("Window Pos: Writing to storage %1, %2, %3, %4 (maximized %5)").arg(position.x).arg(position.y).arg(position.w).arg(position.h).arg(Logs::b(position.maximized))); + DEBUG_LOG(("Window Pos: Writing to storage %1, %2, %3, %4 (scale %5%, maximized %6)") + .arg(position.x) + .arg(position.y) + .arg(position.w) + .arg(position.h) + .arg(position.scale) + .arg(Logs::b(position.maximized))); settings.writeEncrypted(data, SettingsKey); } diff --git a/Telegram/SourceFiles/window/main_window.cpp b/Telegram/SourceFiles/window/main_window.cpp index 9bbbdadafc..7fa7460e89 100644 --- a/Telegram/SourceFiles/window/main_window.cpp +++ b/Telegram/SourceFiles/window/main_window.cpp @@ -425,7 +425,21 @@ void MainWindow::initSize() { } auto position = cWindowPos(); - DEBUG_LOG(("Window Pos: Initializing first %1, %2, %3, %4 (maximized %5)").arg(position.x).arg(position.y).arg(position.w).arg(position.h).arg(Logs::b(position.maximized))); + DEBUG_LOG(("Window Pos: Initializing first %1, %2, %3, %4 (scale %5%, maximized %6)") + .arg(position.x) + .arg(position.y) + .arg(position.w) + .arg(position.h) + .arg(position.scale) + .arg(Logs::b(position.maximized))); + + if (position.scale != 0) { + const auto scaleFactor = cScale() / float64(position.scale); + position.x *= scaleFactor; + position.y *= scaleFactor; + position.w *= scaleFactor; + position.h *= scaleFactor; + } const auto primaryScreen = QGuiApplication::primaryScreen(); auto geometryScreen = primaryScreen; @@ -593,6 +607,7 @@ void MainWindow::savePosition(Qt::WindowState state) { realPosition.y = r.y(); realPosition.w = r.width() - (_rightColumn ? _rightColumn->width() : 0); realPosition.h = r.height(); + realPosition.scale = cScale(); realPosition.maximized = 0; realPosition.moncrc = 0; @@ -623,9 +638,16 @@ void MainWindow::savePosition(Qt::WindowState state) { || realPosition.y != savedPosition.y || realPosition.w != savedPosition.w || realPosition.h != savedPosition.h + || realPosition.scale != savedPosition.scale || realPosition.moncrc != savedPosition.moncrc || realPosition.maximized != savedPosition.maximized) { - DEBUG_LOG(("Window Pos: Writing: %1, %2, %3, %4 (maximized %5)").arg(realPosition.x).arg(realPosition.y).arg(realPosition.w).arg(realPosition.h).arg(Logs::b(realPosition.maximized))); + DEBUG_LOG(("Window Pos: Writing: %1, %2, %3, %4 (scale %5%, maximized %6)") + .arg(realPosition.x) + .arg(realPosition.y) + .arg(realPosition.w) + .arg(realPosition.h) + .arg(realPosition.scale) + .arg(Logs::b(realPosition.maximized))); cSetWindowPos(realPosition); Local::writeSettings(); }