Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
File last commit:
Show/Diff file:
Action:
FNA/src/FNAPlatform/FNAWindow.cs
183 lines | 3.5 KiB | text/x-csharp | CSharpLexer
#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
}
}