Show More
Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
References:
File last commit:
Show/Diff file:
Action:
FNA/src/FNAPlatform/FNAWindow.cs
183 lines | 3.5 KiB | text/x-csharp | CSharpLexer
183 lines | 3.5 KiB | text/x-csharp | CSharpLexer
r0 | #region License | |||
/* FNA - XNA4 Reimplementation for Desktop Platforms | ||||
* Copyright 2009-2020 Ethan Lee and the MonoGame Team | ||||
* | ||||
* Released under the Microsoft Public License. | ||||
* See LICENSE for details. | ||||
*/ | ||||
#endregion | ||||
#region Using Statements | ||||
using System; | ||||
using System.ComponentModel; | ||||
#endregion | ||||
namespace Microsoft.Xna.Framework | ||||
{ | ||||
/* This class exists because the XNA window handle is an abstract class. | ||||
* | ||||
* The idea is that each platform would host its own GameWindow type, | ||||
* but a lot of this can be handled with static functions and a native | ||||
* window pointer, rather than messy things like a C# Form. | ||||
* | ||||
* So, when implementing new FNAPlatforms, just use this to store your | ||||
* window pointer and the functions will allow you to do your work. | ||||
* | ||||
* -flibit | ||||
*/ | ||||
internal class FNAWindow : GameWindow | ||||
{ | ||||
#region Public GameWindow Properties | ||||
[DefaultValue(false)] | ||||
public override bool AllowUserResizing | ||||
{ | ||||
get | ||||
{ | ||||
return FNAPlatform.GetWindowResizable(window); | ||||
} | ||||
set | ||||
{ | ||||
FNAPlatform.SetWindowResizable(window, value); | ||||
} | ||||
} | ||||
public override Rectangle ClientBounds | ||||
{ | ||||
get | ||||
{ | ||||
return FNAPlatform.GetWindowBounds(window); | ||||
} | ||||
} | ||||
public override DisplayOrientation CurrentOrientation | ||||
{ | ||||
get; | ||||
internal set; | ||||
} | ||||
public override IntPtr Handle | ||||
{ | ||||
get | ||||
{ | ||||
return window; | ||||
} | ||||
} | ||||
public override bool IsBorderlessEXT | ||||
{ | ||||
get | ||||
{ | ||||
return FNAPlatform.GetWindowBorderless(window); | ||||
} | ||||
set | ||||
{ | ||||
FNAPlatform.SetWindowBorderless(window, value); | ||||
} | ||||
} | ||||
public override string ScreenDeviceName | ||||
{ | ||||
get | ||||
{ | ||||
return deviceName; | ||||
} | ||||
} | ||||
#endregion | ||||
#region Private Variables | ||||
private IntPtr window; | ||||
private string deviceName; | ||||
private bool wantsFullscreen; | ||||
#endregion | ||||
#region Internal Constructor | ||||
internal FNAWindow(IntPtr nativeWindow, string display) | ||||
{ | ||||
window = nativeWindow; | ||||
deviceName = display; | ||||
wantsFullscreen = false; | ||||
} | ||||
#endregion | ||||
#region Public GameWindow Methods | ||||
public override void BeginScreenDeviceChange(bool willBeFullScreen) | ||||
{ | ||||
wantsFullscreen = willBeFullScreen; | ||||
} | ||||
public override void EndScreenDeviceChange( | ||||
string screenDeviceName, | ||||
int clientWidth, | ||||
int clientHeight | ||||
) { | ||||
string prevName = deviceName; | ||||
FNAPlatform.ApplyWindowChanges( | ||||
window, | ||||
clientWidth, | ||||
clientHeight, | ||||
wantsFullscreen, | ||||
screenDeviceName, | ||||
ref deviceName | ||||
); | ||||
if (deviceName != prevName) | ||||
{ | ||||
OnScreenDeviceNameChanged(); | ||||
} | ||||
} | ||||
#endregion | ||||
#region Internal Methods | ||||
internal void INTERNAL_ClientSizeChanged() | ||||
{ | ||||
OnClientSizeChanged(); | ||||
} | ||||
internal void INTERNAL_ScreenDeviceNameChanged() | ||||
{ | ||||
OnScreenDeviceNameChanged(); | ||||
} | ||||
internal void INTERNAL_OnOrientationChanged() | ||||
{ | ||||
OnOrientationChanged(); | ||||
} | ||||
#endregion | ||||
#region Protected GameWindow Methods | ||||
protected internal override void SetSupportedOrientations(DisplayOrientation orientations) | ||||
{ | ||||
/* XNA on Windows Phone had the ability to change | ||||
* the list of supported device orientations at runtime. | ||||
* Unfortunately, we can't support that reliably across | ||||
* multiple mobile platforms. Therefore this method is | ||||
* essentially a no-op. | ||||
* | ||||
* Instead, you should set your supported orientations | ||||
* in Info.plist (iOS) or AndroidManifest.xml (Android). | ||||
* | ||||
* -caleb | ||||
*/ | ||||
FNALoggerEXT.LogWarn("Setting SupportedOrientations has no effect!"); | ||||
} | ||||
protected override void SetTitle(string title) | ||||
{ | ||||
FNAPlatform.SetWindowTitle(window, title); | ||||
} | ||||
#endregion | ||||
} | ||||
} | ||||