113 lines
4.2 KiB
C#
113 lines
4.2 KiB
C#
using UnityEngine;
|
|
|
|
|
|
namespace SatorImaging.AppWindowUtility
|
|
{
|
|
public static class AppWindowUtility
|
|
{
|
|
public static IPlatformDependent platform;
|
|
|
|
|
|
public static bool AlwaysOnTopSupported { get => platform?.AlwaysOnTopSupported ?? false; }
|
|
public static bool AlwaysOnTop
|
|
{
|
|
get => platform?.GetAlwaysOnTop() ?? false;
|
|
set => platform?.SetAlwaysOnTop(value);
|
|
}
|
|
|
|
public static bool TransparentSupported { get => platform?.TransparentSupported ?? false; }
|
|
public static bool Transparent
|
|
{
|
|
get => platform?.GetTransparent() ?? false;
|
|
set => platform?.SetTransparent(value);
|
|
}
|
|
|
|
public static bool FrameVisiblitySupported { get => platform?.FrameVisibilitySupported ?? false; }
|
|
public static bool FrameVisibility
|
|
{
|
|
get => platform?.GetFrameVisibility() ?? true;
|
|
set => platform?.SetFrameVisibility(value);
|
|
}
|
|
|
|
public static bool ClickThroughSupported { get => platform?.ClickThroughSupported ?? false; }
|
|
public static bool ClickThrough
|
|
{
|
|
get => platform?.GetClickThrough() ?? false;
|
|
set => platform?.SetClickThrough(value);
|
|
}
|
|
|
|
public static bool AsWallpaperSupported { get => platform?.AsWallpaperSupported ?? false; }
|
|
public static bool AsWallpaper
|
|
{
|
|
get => platform?.GetAsWallpaper() ?? false;
|
|
set => platform?.SetAsWallpaper(value);
|
|
}
|
|
|
|
|
|
|
|
public static bool KeyingColorSupported { get => platform?.KeyingColorSupported ?? false; }
|
|
public static void SetKeyingColor(byte red, byte green, byte blue)
|
|
=> platform?.SetKeyingColor(red, green, blue);
|
|
|
|
public static bool WindowOpacitySupported { get => platform?.WindowOpacitySupported ?? false; }
|
|
public static void SetWindowOpacity(byte opacity)
|
|
=> platform?.SetWindowOpacity(opacity);
|
|
|
|
|
|
|
|
|
|
public static bool WindowPlacementSupported { get => platform?.WindowPlacementSupported ?? false; }
|
|
public static void MoveWindowRelative(int pixelX, int pixelY)
|
|
=> platform?.MoveWindowRelative(pixelX, pixelY);
|
|
|
|
public static void MoveWindow(int pixelX, int pixelY)
|
|
=> platform?.MoveWindow(pixelX, pixelY);
|
|
|
|
|
|
|
|
|
|
public static bool WindowResizeSupported { get => platform?.WindowResizeSupported ?? false; }
|
|
public static void ResizeWindow(int pixelX, int pixelY)
|
|
=> platform?.ResizeWindow(pixelX, pixelY);
|
|
|
|
public static void ResizeWindowRelative(float pixelX, float pixelY, Vector2 resizeDirection, float aspectRatio)
|
|
=> platform?.ResizeWindowRelative(pixelX, pixelY, resizeDirection, aspectRatio);
|
|
|
|
|
|
|
|
// fullscreen
|
|
private static int[] lastScreenSize = new int[] { 640, 480 };
|
|
private static bool isFullScreen = (Screen.width == Screen.currentResolution.width && Screen.height == Screen.currentResolution.height);
|
|
|
|
public static bool FullScreen
|
|
{
|
|
get { return isFullScreen; }
|
|
set
|
|
{
|
|
if (isFullScreen == value) return;
|
|
|
|
if (value)
|
|
{
|
|
// unity turns window frame visible when returned from fullscreen.
|
|
// so match the status BEFORE going to full screen.
|
|
FrameVisibility = true;
|
|
|
|
lastScreenSize = new int[] { Screen.width, Screen.height };
|
|
Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, true);// FullScreenMode.FullScreenWindow);
|
|
}
|
|
else
|
|
{
|
|
Screen.SetResolution(lastScreenSize[0], lastScreenSize[1], false);// FullScreenMode.Windowed);
|
|
}
|
|
|
|
isFullScreen = value;
|
|
|
|
// no way to control SetResolution update timing. it's done at next frame.
|
|
// so FrameVisibility done BEFORE full screen disabled no matter when it invoked in setter.
|
|
// to make it better, simply, reset transparent state.
|
|
if (!isFullScreen) Transparent = false;
|
|
|
|
}//set
|
|
}//
|
|
}//class
|
|
}//namespace
|