|
|
#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
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|