Procházet zdrojové kódy

Save window size if it was maximized

rsredsq před 10 roky
rodič
revize
7a468d9dbc

+ 26 - 2
Script/AtomicEditor/editor/Editor.ts

@@ -54,9 +54,11 @@ class Editor extends Atomic.ScriptObject {
         });
 
         this.subscribeToEvent("IPCPlayerWindowChanged", (data) => {
-            Preferences.getInstance().savePlayerWindowData(data.posX, data.posY, data.width, data.height, data.monitor);
+            Preferences.getInstance().savePlayerWindowData({x: data.posX, y: data.posY, width: data.width, height: data.height, monitor: data.monitor, maximized: data.maximized});
         });
 
+        this.subscribeToEvent("ScreenMode", (data:Atomic.ScreenModeEvent) => this.saveWindowPreferences(data));
+
         this.subscribeToEvent("ExitRequested", (data) => this.handleExitRequested(data));
 
         this.subscribeToEvent("ProjectLoaded", (data) => {
@@ -85,6 +87,28 @@ class Editor extends Atomic.ScriptObject {
 
     }
 
+    saveWindowPreferences(data: Atomic.ScreenModeEvent): boolean {
+        var graphics = Atomic.getGraphics();
+        if (!graphics) return false;
+
+        var pos = graphics.getWindowPosition();
+        var width = graphics.getWidth();
+        var height = graphics.getHeight();
+        var monitor = graphics.getCurrentMonitor();
+
+        var editorWindowData = Preferences.getInstance().editorWindow;
+
+        if (graphics.getMaximized()) {
+            editorWindowData.maximized = true;
+        } else {
+            editorWindowData = {x: pos[0], y: pos[1], width: width, height: height, monitor: monitor, maximized: false}
+        }
+
+        Preferences.getInstance().saveEditorWindowData(editorWindowData);
+
+        return true;
+    }
+
     handleEditorLoadProject(event: EditorEvents.LoadProjectEvent): boolean {
 
         var system = ToolCore.getToolSystem();
@@ -170,7 +194,7 @@ class Editor extends Atomic.ScriptObject {
     }
 
     exit() {
-        Preferences.getInstance().write();
+        //Preferences.getInstance().write();
         EditorUI.shutdown();
         Atomic.getEngine().exit();
     }

+ 12 - 12
Script/AtomicEditor/editor/Preferences.ts

@@ -83,27 +83,26 @@ class Preferences {
 
     }
 
-    write(): void {
+    write(): boolean {
         var filePath = this.getPreferencesFullPath();
         var jsonFile = new Atomic.File(filePath, Atomic.FILE_WRITE);
-        if (!jsonFile.isOpen()) return;
-        var graphics = Atomic.getGraphics();
-        var pos, width, height;
-        if (graphics && !graphics.getFullscreen()) {
-            pos = graphics.getWindowPosition();
-            width = graphics.getWidth();
-            height = graphics.getHeight();
-        }
-        this._prefs.editorWindow = { x: pos[0], y: pos[1], width: width, height: height, monitor: graphics.getCurrentMonitor() };
+        if (!jsonFile.isOpen()) return false;
         jsonFile.writeString(JSON.stringify(this._prefs, null, 2));
     }
 
-    savePlayerWindowData(x, y, width, height, monitor) {
-        this._prefs.playerWindow = { x: x, y: y, width: width, height: height, monitor: monitor };
+    saveEditorWindowData(windowData:WindowData) {
+        this._prefs.editorWindow = windowData;
+        this.write();
+    }
+
+    savePlayerWindowData(windowData:WindowData) {
+        this._prefs.playerWindow = windowData;
+        this.write();
     }
 
     useDefaultConfig():void {
         this._prefs = new PreferencesFormat();
+        if (!this._prefs.recentProjects) this._prefs.recentProjects = [""];
     }
 
     get editorWindow():WindowData {
@@ -129,6 +128,7 @@ interface WindowData {
     width: number;
     height: number;
     monitor: number;
+    maximized: boolean;
 }
 
 class PreferencesFormat {

+ 1 - 0
Script/TypeScript/AtomicWork.d.ts

@@ -43,6 +43,7 @@ declare module Atomic {
         fullscreen: boolean;
         resizable: boolean;
         borderless: boolean;
+        maximized: boolean;
 
     }
 

+ 3 - 0
Source/Atomic/Engine/Engine.cpp

@@ -379,6 +379,9 @@ bool Engine::Initialize(const VariantMap& parameters)
         ))
             return false;
 
+        if (GetParameter(parameters, "WindowMaximized", false) == true)
+            graphics->Maximize();
+
         if (HasParameter(parameters, "DumpShaders"))
             graphics->BeginDumpShaders(GetParameter(parameters, "DumpShaders", String::EMPTY).GetString());
         if (HasParameter(parameters, "RenderPath"))

+ 8 - 0
Source/Atomic/Graphics/Direct3D9/D3D9Graphics.cpp

@@ -2771,6 +2771,14 @@ int Graphics::GetMonitorsNumber()
 {
     return SDL_GetNumVideoDisplays();
 }
+
+bool Graphics::GetMaximized()
+{
+    if (!impl_->window_)
+        return false;
+
+    return SDL_GetWindowFlags(impl_->window_) & SDL_WINDOW_MAXIMIZED;
+}
 // ATOMIC END
 
 }

+ 2 - 0
Source/Atomic/Graphics/Direct3D9/D3D9Graphics.h

@@ -498,6 +498,8 @@ public:
     int GetCurrentMonitor();
     /// Return the available monitors number
     int GetMonitorsNumber();
+    /// Return true if window is maximized
+    bool GetMaximized();
     // ATOMIC END
 
 private:

+ 1 - 0
Source/AtomicEditor/Application/AEEditorApp.cpp

@@ -122,6 +122,7 @@ void AEEditorApp::Setup()
             engineParameters_["WindowPositionY"] = editorWindow.Get("y").GetUInt();
             engineParameters_["WindowWidth"] = editorWindow.Get("width").GetUInt();
             engineParameters_["WindowHeight"] = editorWindow.Get("height").GetUInt();
+            engineParameters_["WindowMaximized"] = editorWindow.Get("maximized").GetBool();
         }
     }
 }

+ 1 - 0
Source/AtomicEditor/PlayerMode/AEPlayerEvents.h

@@ -26,6 +26,7 @@ EVENT(E_IPCPLAYERWINDOWCHANGED, IPCPlayerWindowChanged)
     PARAM(P_WIDTH, Width);
     PARAM(P_HEIGHT, Height);
     PARAM(P_MONITOR, Monitor);
+    PARAM(P_MAXIMIZED, Maximized);
 }
 
 EVENT(E_PLAYERQUIT, PlayerQuit)

+ 1 - 0
Source/AtomicEditor/PlayerMode/AEPlayerMode.cpp

@@ -249,6 +249,7 @@ void PlayerMode::HandleExitRequest(StringHash eventType, VariantMap& eventData)
     data[P_WIDTH] = graphics->GetWidth();
     data[P_HEIGHT] = graphics->GetHeight();
     data[P_MONITOR] = graphics->GetCurrentMonitor();
+    data[P_MAXIMIZED] = graphics->GetMaximized();
     ipc_->SendEventToBroker(E_IPCPLAYERWINDOWCHANGED, data);
     SendEvent(E_PLAYERQUIT);
 }