Take custom scale in account when saving window geometry

This commit is contained in:
Ilya Fedin 2021-01-26 03:57:50 +04:00 committed by John Preston
parent 0b5213a9cb
commit 9c86755546
4 changed files with 42 additions and 4 deletions

View File

@ -73,6 +73,7 @@ struct TWindowPos {
int32 moncrc = 0;
int maximized = 0;
int scale = 0;
int x = 0;
int y = 0;
int w = 0;

View File

@ -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;

View File

@ -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);
}

View File

@ -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();
}