You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.6 KiB
C#

using System;
using AOT;
using System.Runtime.InteropServices; // for DllImport
using UnityEngine;
namespace WebGLSupport
{
static class WebGLWindowPlugin
{
#if UNITY_WEBGL && !UNITY_EDITOR
[DllImport("__Internal")]
public static extern void WebGLWindowInit();
[DllImport("__Internal")]
public static extern void WebGLWindowOnFocus(Action cb);
[DllImport("__Internal")]
public static extern void WebGLWindowOnBlur(Action cb);
[DllImport("__Internal")]
public static extern void WebGLWindowOnResize(Action cb);
[DllImport("__Internal")]
public static extern void WebGLWindowInjectFullscreen();
[DllImport("__Internal")]
public static extern string WebGLWindowGetCanvasName();
[DllImport("__Internal")]
public static extern void MakeFullscreen(string str);
[DllImport("__Internal")]
public static extern void ExitFullscreen();
[DllImport("__Internal")]
public static extern bool IsFullscreen();
#else
public static void WebGLWindowInit() { }
public static void WebGLWindowOnFocus(Action cb) { }
public static void WebGLWindowOnBlur(Action cb) { }
public static void WebGLWindowOnResize(Action cb) { }
public static void WebGLWindowInjectFullscreen() { }
public static string WebGLWindowGetCanvasName() { return ""; }
public static void MakeFullscreen(string str) { }
public static void ExitFullscreen() { }
public static bool IsFullscreen() { return false; }
#endif
}
public static class WebGLWindow
{
static WebGLWindow()
{
WebGLWindowPlugin.WebGLWindowInit();
}
public static bool Focus { get; private set; }
public static event Action OnFocusEvent = () => { };
public static event Action OnBlurEvent = () => { };
public static event Action OnResizeEvent = () => { };
static string ViewportContent;
static void Init()
{
Focus = true;
WebGLWindowPlugin.WebGLWindowOnFocus(OnWindowFocus);
WebGLWindowPlugin.WebGLWindowOnBlur(OnWindowBlur);
WebGLWindowPlugin.WebGLWindowOnResize(OnWindowResize);
WebGLWindowPlugin.WebGLWindowInjectFullscreen();
}
[MonoPInvokeCallback(typeof(Action))]
static void OnWindowFocus()
{
Focus = true;
OnFocusEvent();
}
[MonoPInvokeCallback(typeof(Action))]
static void OnWindowBlur()
{
Focus = false;
OnBlurEvent();
}
[MonoPInvokeCallback(typeof(Action))]
static void OnWindowResize()
{
OnResizeEvent();
}
[RuntimeInitializeOnLoadMethod]
static void RuntimeInitializeOnLoadMethod()
{
Init();
}
public static string GetCanvasName()
{
return WebGLWindowPlugin.WebGLWindowGetCanvasName();
}
public static void MakeFullscreen(string fullscreenElementName = null)
{
WebGLWindowPlugin.MakeFullscreen(fullscreenElementName ?? GetCanvasName());
}
public static void ExitFullscreen()
{
WebGLWindowPlugin.ExitFullscreen();
}
public static bool IsFullscreen()
{
return WebGLWindowPlugin.IsFullscreen();
}
public static void SwitchFullscreen()
{
if (IsFullscreen())
{
ExitFullscreen();
}
else
{
MakeFullscreen();
}
}
}
}