예제 #1
0
        /// <summary> Toggle fullscreen for a window state, on the screen at position </summary>
        private static bool ToggleFullscreen(WindowFullscreenState windowState, bool createNewWindow, Vector2 atPosition)
        {
            if (windowState == null)
            {
                throw new NullReferenceException("windowState is null. Cannot continue.");
            }

            if (!loadedInitialState)
            {
                windowState.CloseOnExitFullscreen = createNewWindow;
                windowState.FullscreenAtPosition  = atPosition;
                queuedStatesToToggleOnLoad.Add(windowState);

                if (LogNonFatalErrors)
                {
                    throw new TypeLoadException("The fullscreen state hasn't been loaded yet. Fullscreen toggle has been queued.");
                }
                else
                {
                    return(false);
                }
            }
            if (windowState.WindowType == mainWindowType)
            {
                return(EditorMainWindow.ToggleFullscreen(windowState.ShowTopToolbar, atPosition));
            }

            if (windowState.EditorWin == null || (!windowState.IsFullscreen && createNewWindow))
            {
                if (windowState.ActualType == typeof(SceneView))
                {
                    windowState.ActualType = typeof(CustomSceneView);
                }                                                                                                      //Always create CustomSceneView for SceneView
                var win = EditorWindowExtensions.CreateWindow(windowState.ActualType);
                windowState.SetEditorWin(win);

                if (windowState.ActualType == typeof(CustomSceneView) || win.GetWindowType() == gameViewType)
                {
                    win.SetWindowTitle(windowState.WindowName, true); //Reset title content on custom Scene and Game views to prevent icon not found error.
                }
                windowState.CloseOnExitFullscreen = true;             //Since we are creating a new window, this window should close when fullscreen is exited

                bool setFullscreen = win.ToggleFullscreen(atPosition);
                return(setFullscreen);
            }
            else
            {
                return(windowState.EditorWin.ToggleFullscreen(atPosition));
            }
        }
예제 #2
0
        public static bool ToggleFullscreen(bool showTopToolbar, Vector2 fullscreenAtPosition)
        {
            var fullscreenState = GetWindowFullscreenState();

            var currentScreenBounds = EditorDisplay.ClosestToPoint(position.center).Bounds;
            var newFullscreenBounds = EditorDisplay.ClosestToPoint(fullscreenAtPosition).Bounds;

            bool setFullscreen = !fullscreenState.IsFullscreen || currentScreenBounds != newFullscreenBounds;

            if (EditorWindowExtensions.ExitFullscreenForOtherWindowsOnScreen(fullscreenState.EditorWin, fullscreenAtPosition))
            {
                setFullscreen = true;
            }

            SetFullscreen(setFullscreen, showTopToolbar, fullscreenAtPosition);
            return(setFullscreen);
        }
예제 #3
0
        private static float GetPixelsPerPointAtPosition(Vector2 atPosition)
        {
            var screenBounds = EditorDisplay.ClosestToPoint(atPosition).Bounds;

            //Use a dummy scene view to get the real pixels per point (Because EditorGUIUtility.pixelsPerPoint is inconsistent).
            var dummySceneView = EditorWindowExtensions.CreateWindow(typeof(SceneView));

            dummySceneView.SetFullscreen(true, atPosition, false);
            var pixelsPerPoint = screenBounds.width / dummySceneView.position.width;

            dummySceneView.SetFullscreen(false);
            if (dummySceneView != null)
            {
                dummySceneView.Close();
            }
            if (dummySceneView != null)
            {
                UnityEngine.Object.DestroyImmediate(dummySceneView);
            }
            return(pixelsPerPoint);
        }