From 079f66edf94232d1713f6947ad650627735f3ab5 Mon Sep 17 00:00:00 2001 From: omigamedev Date: Wed, 7 Aug 2019 10:58:17 +0200 Subject: [PATCH] implement window position save and restore in OSX --- PanoPainter-OSX/main.cpp | 15 ++++++++++++++- PanoPainter-OSX/main.h | 1 + PanoPainter.xcodeproj/project.pbxproj | 2 +- PanoPainter/GameViewController.m | 4 +++- src/app_layout.cpp | 2 ++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/PanoPainter-OSX/main.cpp b/PanoPainter-OSX/main.cpp index 2082c22..e0ad17d 100644 --- a/PanoPainter-OSX/main.cpp +++ b/PanoPainter-OSX/main.cpp @@ -7,6 +7,7 @@ #include "app.h" #include "keymap.h" #include "main.h" +#include "settings.h" #include #include #include @@ -454,11 +455,18 @@ App::I->initLog(); App::I->create(); NSRect r = NSMakeRect(0, 0, App::I->width, App::I->height); + if (Settings::has("window-rect")) + { + glm::ivec4 wr = Settings::value("window-rect"); + r.origin = CGPointMake(wr.x, wr.y); + r.size = CGSizeMake(wr.z, wr.w); + } view = [[View alloc] initWithFrame:r]; controller = [[Controller alloc] initWithWindow:window]; App::I->osx_view = view; - + App::I->zoom = Settings::value_or("ui-scale", (float)view.layer.contentsScale); + auto style = NSTitledWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask|NSClosableWindowMask; window = [[Window alloc] initWithContentRect:r styleMask:style backing:NSBackingStoreBuffered defer:NO]; [window setDelegate:controller]; @@ -486,6 +494,11 @@ LOG("app launched"); App::I->ui_thread_start(); } +- (void)save_ui_state +{ + Settings::set("window-rect", Serializer::IVec4({window.frame.origin.x, + window.frame.origin.y, window.frame.size.width, window.frame.size.height})); +} - (void)init_dirs { NSArray* paths = NSSearchPathForDirectoriesInDomains(NSPicturesDirectory, NSUserDomainMask, YES); diff --git a/PanoPainter-OSX/main.h b/PanoPainter-OSX/main.h index 61ddc51..3b5f87c 100644 --- a/PanoPainter-OSX/main.h +++ b/PanoPainter-OSX/main.h @@ -39,4 +39,5 @@ View* view; } - (void)init_dirs; +- (void)save_ui_state; @end diff --git a/PanoPainter.xcodeproj/project.pbxproj b/PanoPainter.xcodeproj/project.pbxproj index f9bb2df..7baf9ac 100644 --- a/PanoPainter.xcodeproj/project.pbxproj +++ b/PanoPainter.xcodeproj/project.pbxproj @@ -315,7 +315,7 @@ AD06989620CC6C350010825F /* ZipArchive.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZipArchive.framework; path = libs/ZipArchive/iOS/ZipArchive.framework; sourceTree = ""; }; AD06989920CC6C4C0010825F /* ZipArchive.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ZipArchive.framework; path = libs/ZipArchive/Mac/ZipArchive.framework; sourceTree = ""; }; AD0E11921ECA20F200CDA6BB /* app_events.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp.preprocessed; fileEncoding = 4; path = app_events.cpp; sourceTree = ""; }; - AD0E11931ECA20F200CDA6BB /* app_layout.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app_layout.cpp; sourceTree = ""; }; + AD0E11931ECA20F200CDA6BB /* app_layout.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = app_layout.cpp; sourceTree = ""; }; AD0E11941ECA20F200CDA6BB /* app_shaders.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = app_shaders.cpp; sourceTree = ""; }; AD0E11951ECA20F200CDA6BB /* node_scroll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = node_scroll.cpp; sourceTree = ""; }; AD0E11961ECA20F200CDA6BB /* node_scroll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_scroll.h; sourceTree = ""; }; diff --git a/PanoPainter/GameViewController.m b/PanoPainter/GameViewController.m index 23dc1ee..210ddaa 100644 --- a/PanoPainter/GameViewController.m +++ b/PanoPainter/GameViewController.m @@ -10,6 +10,7 @@ #import "GameViewController.h" #import #include "app.h" +#include "settings.h" #import "objc_utils.h" std::mutex render_mutex; @@ -433,7 +434,8 @@ std::set ignored_touch; App::I->width = view.frame.size.width * view.contentScaleFactor; App::I->height = view.frame.size.height * view.contentScaleFactor; - + App::I->zoom = Settings::value_or("ui-scale", (float)view.contentScaleFactor); + App::I->render_thread_start(); App::I->ui_thread_start(); } diff --git a/src/app_layout.cpp b/src/app_layout.cpp index 24c7bac..8e502f9 100644 --- a/src/app_layout.cpp +++ b/src/app_layout.cpp @@ -1482,6 +1482,8 @@ void App::ui_save() #if _WIN32 extern void win32_save_window_state(); win32_save_window_state(); +#elif __OSX__ + [osx_app save_ui_state]; #endif Settings::save();