internal static void OnSceneGUI(SceneView sceneView)
        {
            if (!PeekPlugin.Configuration.enableQuickSceneMaximize)
            {
                return;
            }

            if (SceneViewIntegration.used)
            {
                return;
            }

            var position = sceneView.GetInnerGuiPosition();

            Handles.BeginGUI();

            if (!SceneViewIntegration.used &&
                e.type == EventType.MouseDown &&
                e.clickCount == 2 &&
                e.button == (int)MouseButton.Left &&
                position.Contains(e.mousePosition))
            {
                GUIUtility.hotControl = 0;
                sceneView.maximized   = !sceneView.maximized;
                GUIUtility.hotControl = 0;
                e.Use();
                SceneViewIntegration.Use();
            }

            Handles.EndGUI();
        }
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (SceneViewIntegration.used)
            {
                return;
            }

            var position = sceneView.GetInnerGuiPosition();

            Handles.BeginGUI();

            if (PeekPlugin.Configuration.maximizeShortcut.Check(e) &&
                position.Contains(e.mousePosition))
            {
                GUIUtility.hotControl = 0;
                sceneView.maximized   = !sceneView.maximized;
                GUIUtility.hotControl = 0;
                e.Use();
                SceneViewIntegration.Use();
            }

            Handles.EndGUI();
        }
Пример #3
0
        internal static void OnSceneGUI(SceneView sceneView)
        {
            if (!PeekPlugin.Configuration.enableTabs.Display(sceneView.maximized))
            {
                // TODO: Generalize, make faster, and also call the Move event when moving the window.
                toolbarControl?.CloseAllTools();
                return;
            }

            Profiler.BeginSample("Peek." + nameof(Tabs));

            if (toolbarControl == null || !toolbarControl.toolbar.isValid)
            {
                return;
            }

            toolbarControl.toolbar.Update();

            var position = sceneView.GetInnerGuiPosition();

            Handles.BeginGUI();

            var toolbarSize = toolbarControl.GetSceneViewSize();

            if (!toolbarControl.isDragging)
            {
                toolbarControl.guiPosition = new Rect
                                             (
                    PeekPlugin.Configuration.tabsOrigin.x,
                    PeekPlugin.Configuration.tabsOrigin.y,
                    toolbarSize.x,
                    toolbarSize.y
                                             );
            }

            toolbarControl.DrawInSceneView();

            if (!reopenedTabs)
            {
                // Wait until we drew once to set the GUI positions
                // ReopenTabs(); // Calling in delayCall to avoid occasional dWindow.parent crash in TabTool.SaveWindowPosition
                EditorApplication.delayCall += ReopenTabs;
                reopenedTabs = true;
            }

            if (e.type == EventType.Repaint)
            {
                var origin = toolbarControl.guiPosition.position;

                var margin = PeekStyles.tabsScreenMargin;

                origin.x = Mathf.Clamp
                           (
                    origin.x,
                    margin.x,
                    position.width - toolbarSize.x - margin.x
                           );

                origin.y = Mathf.Clamp
                           (
                    origin.y,
                    margin.y,
                    position.height - toolbarSize.y - margin.y
                           );

                PeekPlugin.Configuration.tabsOrigin = origin;

                if (toolbarControl.isDragging)
                {
                    PeekPlugin.Configuration.Save(nameof(PeekConfiguration.tabsOrigin));
                }
            }

            if (toolbarControl.guiPosition.Contains(e.mousePosition))
            {
                sceneView.Repaint();
                SceneViewIntegration.Use();
            }

            Handles.EndGUI();

            Profiler.EndSample();
        }
Пример #4
0
        private static void DrawToolbar(SceneView sceneView, ToolbarControl toolbarControl, GameObject[] targets)
        {
            if (toolbarControl == null || !toolbarControl.toolbar.isValid)
            {
                return;
            }

            toolbarControl.toolbar.Update();

            var stripSize = toolbarControl.GetSceneViewSize();

            float stripX, stripY;

            var position = sceneView.GetInnerGuiPosition();

            sceneView.CalculateGuiBounds(targets, out var guiBounds, out var guiCenter);

            if (guiBounds != null)
            {
                stripX = guiBounds.Value.center.x;
                stripY = guiBounds.Value.yMax + Styles.toolbarBoundsMargin;

                // LudiqGUI.DrawEmptyRect(guiBounds.Value, Color.red);
            }
            else if (guiCenter != null)
            {
                stripX = guiCenter.Value.x;
                stripY = guiCenter.Value.y + Styles.toolbarCenterMargin;
            }
            else
            {
                // Object is behind camera
                // We can't return because we might get a layout mismatch error.
                // And we can't do a safe check in Update because we only have a GUI callback.
                // So we just hide the toolbar later.
                stripX = 0;
                stripY = 0;
            }

            stripX -= stripSize.x / 2;

            stripX = Mathf.Clamp
                     (
                stripX,
                Styles.toolbarScreenMargin,
                position.width - Styles.toolbarScreenMargin - stripSize.x
                     );

            stripY = Mathf.Clamp
                     (
                stripY,
                Styles.toolbarScreenMargin,
                position.height - Styles.toolbarScreenMargin - stripSize.y
                     );

            toolbarControl.guiPosition = new Rect
                                         (
                stripX,
                stripY,
                stripSize.x,
                stripSize.y
                                         );

            var isWithinView = sceneView.IsWithinView(guiBounds, guiCenter);
            var alpha        = isWithinView.HasValue ? (isWithinView.Value ? 1 : 0.5f) : 0;

            EditorGUI.BeginDisabledGroup(alpha == 0);

            using (LudiqGUI.color.Override(LudiqGUI.color.value.WithAlphaMultiplied(alpha)))
            {
                toolbarControl.DrawInSceneView();
            }

            EditorGUI.EndDisabledGroup();

            if (toolbarControl.guiPosition.Contains(e.mousePosition))
            {
                sceneView.Repaint();
                SceneViewIntegration.Use();
            }
        }