private static void PaintButton(Item item, BTN_POS position, MouseCursor cursor = MouseCursor.Link)
        {
            if (!STYLES_INITIALIZED)
            {
                BTN_LFT          = new GUIStyle(GUI.skin.GetStyle("ButtonLeft"));
                BTN_LFT.normal   = BTN_LFT.active;
                BTN_LFT.onNormal = BTN_LFT.onActive;

                BTN_MID = new GUIStyle(GUI.skin.GetStyle("ButtonMid"));
                BTN_RHT = new GUIStyle(GUI.skin.GetStyle("ButtonRight"));

                STYLES_INITIALIZED = true;
            }

            GUIStyle style;

            switch (position)
            {
            case BTN_POS.L: style = BTN_LFT; break;

            case BTN_POS.M: style = BTN_MID; break;

            case BTN_POS.R: style = BTN_RHT; break;

            default: style = null; break;
            }

            if (GUILayout.Button(item.GetContent(), style, GUILayout.Width(BUTTONS_WIDTH)))
            {
                if (item.callback != null)
                {
                    item.callback.Invoke();
                }
            }

            Rect rect        = GUILayoutUtility.GetLastRect();
            Rect textureRect = new Rect(
                rect.x + (rect.width / 2.0f - rect.height / 2.0f),
                rect.y,
                rect.height,
                rect.height
                );

            GUI.DrawTexture(textureRect, item.GetTexture());
            EditorGUIUtility.AddCursorRect(rect, cursor);
        }
Beispiel #2
0
        // PAINT METHODS: -------------------------------------------------------------------------

        private static void OnPaintToolbar(SceneView sceneview)
        {
            GUISkin prevSkin = GUI.skin;

            GUI.skin = EditorGUIUtility.GetBuiltinSkin(EditorSkin.Scene);

            bool registeredItem = false;

            while (REGISTER_ITEMS.Count > 0)
            {
                registeredItem = true;
                Item item = REGISTER_ITEMS.Pop();
                ITEMS.Add(item);
            }

            if (registeredItem)
            {
                ITEMS.Sort((Item x, Item y) => x.priority.CompareTo(y.priority));
            }
            if (ITEMS.Count == 0)
            {
                return;
            }

            Rect rect = new Rect(
                MOVE_OFFSET_X,
                MOVE_OFFSET_Y,
                BUTTONS_WIDTH * ITEMS.Count,
                TOOLBAR_HEIGHT
                );

            bool mouseInRect = rect.Contains(UnityEngine.Event.current.mousePosition);

            if (UnityEngine.Event.current.type == EventType.MouseUp)
            {
                DRAGGING = false;
            }
            if (UnityEngine.Event.current.type == EventType.MouseDown && mouseInRect)
            {
                MOUSE_POSITION = UnityEngine.Event.current.mousePosition;
                DRAGGING       = true;
            }

            if (DRAGGING)
            {
                Vector2 delta = UnityEngine.Event.current.mousePosition - MOUSE_POSITION;

                MOVE_OFFSET_X += delta.x;
                MOVE_OFFSET_Y += delta.y;
                SceneView.currentDrawingSceneView.Repaint();
            }

            MOUSE_POSITION = UnityEngine.Event.current.mousePosition;

            Handles.BeginGUI();
            GUILayout.BeginArea(rect);
            EditorGUILayout.BeginHorizontal();

            for (int i = 0; i < ITEMS.Count - 1; ++i)
            {
                BTN_POS position = (i == 0 ? BTN_POS.L : BTN_POS.M);
                PaintButton(ITEMS[i], position);
            }

            int panIndex = ITEMS.Count - 1;

            PaintButton(ITEMS[panIndex], BTN_POS.R, MouseCursor.Pan);

            EditorGUILayout.EndHorizontal();
            GUILayout.EndArea();
            Handles.EndGUI();

            GUI.skin = prevSkin;
        }