summaryrefslogtreecommitdiff
path: root/Assets/UI_Extension/Editor/MenuOptions.cs
blob: 2eef47e9c9bbc90e3510babe7ce303a7605b80ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using UnityEditor;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

namespace UIExt
{
    static internal class MenuOptions
    {

        [MenuItem("GameObject/UI Extensions/GridLayoutGroupExt", false,2000)]
        static public void AddGridLayoutGroupExt(MenuCommand menuCommand)
        {
            Debug.Log("AddGridLayoutGroupExt");
        }

        //[MenuItem("GameObject/UI/Button", false, 2030)]
        //static public void AddButton(MenuCommand menuCommand)
        //{
        //    //GameObject go = DefaultControls.CreateButton(GetStandardResources());
        //    //PlaceUIElementRoot(go, menuCommand);
        //}

        //private static void PlaceUIElementRoot(GameObject element, MenuCommand menuCommand)
        //{
        //    GameObject parent = menuCommand.context as GameObject;
        //    if (parent == null || parent.GetComponentInParent<Canvas>() == null)
        //    {
        //        parent = GetOrCreateCanvasGameObject();
        //    }

        //    string uniqueName = GameObjectUtility.GetUniqueNameForSibling(parent.transform, element.name);
        //    element.name = uniqueName;
        //    Undo.RegisterCreatedObjectUndo(element, "Create " + element.name);
        //    Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name);
        //    GameObjectUtility.SetParentAndAlign(element, parent);
        //    if (parent != menuCommand.context) // not a context click, so center in sceneview
        //        SetPositionVisibleinSceneView(parent.GetComponent<RectTransform>(), element.GetComponent<RectTransform>());

        //    Selection.activeGameObject = element;
        //}

        //private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform)
        //{
        //    // Find the best scene view
        //    SceneView sceneView = SceneView.lastActiveSceneView;
        //    if (sceneView == null && SceneView.sceneViews.Count > 0)
        //        sceneView = SceneView.sceneViews[0] as SceneView;

        //    // Couldn't find a SceneView. Don't set position.
        //    if (sceneView == null || sceneView.camera == null)
        //        return;

        //    // Create world space Plane from canvas position.
        //    Vector2 localPlanePosition;
        //    Camera camera = sceneView.camera;
        //    Vector3 position = Vector3.zero;
        //    if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition))
        //    {
        //        // Adjust for canvas pivot
        //        localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x;
        //        localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y;

        //        localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x);
        //        localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y);

        //        // Adjust for anchoring
        //        position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x;
        //        position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y;

        //        Vector3 minLocalPosition;
        //        minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x;
        //        minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y;

        //        Vector3 maxLocalPosition;
        //        maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x;
        //        maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y;

        //        position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x);
        //        position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y);
        //    }

        //    itemTransform.anchoredPosition = position;
        //    itemTransform.localRotation = Quaternion.identity;
        //    itemTransform.localScale = Vector3.one;
        //}

        //// Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas.
        //static public GameObject GetOrCreateCanvasGameObject()
        //{
        //    GameObject selectedGo = Selection.activeGameObject;

        //    // Try to find a gameobject that is the selected GO or one if its parents.
        //    Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent<Canvas>() : null;
        //    if (canvas != null && canvas.gameObject.activeInHierarchy)
        //        return canvas.gameObject;

        //    // No canvas in selection or its parents? Then use just any canvas..
        //    canvas = Object.FindObjectOfType(typeof(Canvas)) as Canvas;
        //    if (canvas != null && canvas.gameObject.activeInHierarchy)
        //        return canvas.gameObject;

        //    // No canvas in the scene at all? Then create a new one.
        //    return MenuOptions.CreateNewUI();
        //}
        //static public GameObject CreateNewUI()
        //{
        //    // Root for the UI
        //    var root = new GameObject("Canvas");
        //    root.layer = LayerMask.NameToLayer(kUILayerName);
        //    Canvas canvas = root.AddComponent<Canvas>();
        //    canvas.renderMode = RenderMode.ScreenSpaceOverlay;
        //    root.AddComponent<CanvasScaler>();
        //    root.AddComponent<GraphicRaycaster>();
        //    Undo.RegisterCreatedObjectUndo(root, "Create " + root.name);

        //    // if there is no event system add one...
        //    CreateEventSystem(false);
        //    return root;
        //}
    }

}