Browse Source

Center window if it's outside of desktop resolution

rsredsq 10 years ago
parent
commit
101bbe3f2e

+ 6 - 0
Source/Atomic/Graphics/Direct3D11/D3D11Graphics.cpp

@@ -2807,6 +2807,12 @@ bool Graphics::GetMaximized()
 
     return SDL_GetWindowFlags(impl_->window_) & SDL_WINDOW_MAXIMIZED;
 }
+IntVector2 Graphics::GetMonitorResolution(int monitorId) const
+{
+    SDL_DisplayMode mode;
+    SDL_GetDesktopDisplayMode(monitorId, &mode);
+    return IntVector2(mode.w, mode.h);
+}
 // ATOMIC END
 
 }

+ 2 - 0
Source/Atomic/Graphics/Direct3D11/D3D11Graphics.h

@@ -506,6 +506,8 @@ public:
     int GetMonitorsNumber();
     /// Return true if window is maximized
     bool GetMaximized();
+    /// Return monitor resolution
+    IntVector2 GetMonitorResolution(int monitorId) const;
     // ATOMIC END
 
 private:

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

@@ -2788,6 +2788,13 @@ bool Graphics::GetMaximized()
 
     return SDL_GetWindowFlags(impl_->window_) & SDL_WINDOW_MAXIMIZED;
 }
+
+IntVector2 Graphics::GetMonitorResolution(int monitorId) const
+{
+    SDL_DisplayMode mode;
+    SDL_GetDesktopDisplayMode(monitorId, &mode);
+    return IntVector2(mode.w, mode.h);
+}
 // ATOMIC END
 
 }

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

@@ -499,6 +499,8 @@ public:
     int GetMonitorsNumber();
     /// Return true if window is maximized
     bool GetMaximized();
+    /// Return monitor resolution
+    IntVector2 GetMonitorResolution(int monitorId) const;
     // ATOMIC END
 
 private:

+ 6 - 0
Source/Atomic/Graphics/OpenGL/OGLGraphics.cpp

@@ -3326,6 +3326,12 @@ bool Graphics::GetMaximized()
 
     return SDL_GetWindowFlags(impl_->window_) & SDL_WINDOW_MAXIMIZED;
 }
+IntVector2 Graphics::GetMonitorResolution(int monitorId) const
+{
+    SDL_DisplayMode mode;
+    SDL_GetDesktopDisplayMode(monitorId, &mode);
+    return IntVector2(mode.w, mode.h);
+}
 // ATOMIC END
 
 }

+ 2 - 0
Source/Atomic/Graphics/OpenGL/OGLGraphics.h

@@ -531,6 +531,8 @@ public:
     int GetMonitorsNumber();
     /// Return true if window is maximized
     bool GetMaximized();
+    /// Return monitor resolution
+    IntVector2 GetMonitorResolution(int monitorId) const;
     // ATOMIC END
 
 private:

+ 20 - 0
Source/AtomicEditor/Application/AEEditorCommon.cpp

@@ -7,6 +7,7 @@
 
 #include <Atomic/Engine/Engine.h>
 #include <Atomic/Input/Input.h>
+#include <Atomic/Graphics/Graphics.h>
 
 #include <Atomic/IPC/IPC.h>
 
@@ -55,6 +56,8 @@ AEEditorCommon::AEEditorCommon(Context* context) :
 
 void AEEditorCommon::Start()
 {
+    ValidateWindow();
+
     Input* input = GetSubsystem<Input>();
     input->SetMouseVisible(true);
 
@@ -255,4 +258,21 @@ bool AEEditorCommon::ReadPreferences()
     return true;
 }
 
+void AEEditorCommon::ValidateWindow()
+{
+    Graphics* graphics = GetSubsystem<Graphics>();
+    IntVector2 windowPosition = graphics->GetWindowPosition();
+    int monitors = graphics->GetMonitorsNumber();
+    IntVector2 maxResolution;
+    for (int i = 0; i < monitors; i++)
+    {
+        IntVector2 monitorResolution = graphics->GetMonitorResolution(i);
+        maxResolution += monitorResolution;
+    }
+    if (windowPosition.x_ > maxResolution.x_ || windowPosition.y_ > maxResolution.y_ || windowPosition.x_ < maxResolution.x_ || windowPosition.y_ < maxResolution.y_)
+    {
+        graphics->CenterWindow();
+    }
+}
+
 }

+ 2 - 1
Source/AtomicEditor/Application/AEEditorCommon.h

@@ -39,7 +39,8 @@ protected:
 
     bool CreateDefaultPreferences(String& path, JSONValue& prefs);
     bool ReadPreferences();
-    
+    void ValidateWindow();
+
     SharedPtr<JSVM> vm_;
 
 private: