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(); } } } }