// (case 1029160) Modified version of EditorGUI.DoPopup to fit large data list query.
        private AnimationClip DoClipPopup(AnimationClip clip, GUIStyle style)
        {
            Rect position = EditorGUILayout.GetControlRect(false, EditorGUI.kSingleLineHeight, style);

            clip = popupCI.GetSelectedClipForControl(clip);
            clip = addCI.GetSelectedClipForControl(clip);

            Font originalFont = style.font;

            if (originalFont && EditorGUIUtility.GetBoldDefaultFont() && originalFont == EditorStyles.miniFont)
            {
                style.font = EditorStyles.miniBoldFont;
            }

            GUIContent buttonContent = EditorGUIUtility.TempContent(CurveUtility.GetClipName(clip));

            buttonContent.tooltip = AssetDatabase.GetAssetPath(clip);

            if (GUI.Button(position, buttonContent, style))
            {
                DisplayClipMenu(position, clip);
            }

            return(clip);
        }
Ejemplo n.º 2
0
    public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label)
    {
        SerializedProperty serializedProperty  = prop.FindPropertyRelative("defaultValue");
        SerializedProperty serializedProperty2 = prop.FindPropertyRelative("exposedName");
        string             text = serializedProperty2.stringValue;

        BaseExposedPropertyDrawer.ExposedPropertyMode exposedPropertyMode = BaseExposedPropertyDrawer.GetExposedPropertyMode(text);
        Rect rect = position;

        rect.xMax -= BaseExposedPropertyDrawer.kDriveWidgetWidth;
        Rect position2 = position;

        position2.x     = rect.xMax;
        position2.width = BaseExposedPropertyDrawer.kDriveWidgetWidth;
        IExposedPropertyTable exposedPropertyTable = this.GetExposedPropertyTable(prop);
        bool         flag         = exposedPropertyTable != null;
        PropertyName propertyName = new PropertyName(text);

        BaseExposedPropertyDrawer.OverrideState overrideState = BaseExposedPropertyDrawer.OverrideState.DefaultValue;
        UnityEngine.Object currentReferenceValue = this.Resolve(propertyName, exposedPropertyTable, serializedProperty.objectReferenceValue, out overrideState);
        Color color           = GUI.color;
        bool  boldDefaultFont = EditorGUIUtility.GetBoldDefaultFont();
        Rect  position3       = this.DrawLabel(flag, overrideState, label, position, exposedPropertyTable, text, serializedProperty2, serializedProperty);

        EditorGUI.BeginChangeCheck();
        if (exposedPropertyMode == BaseExposedPropertyDrawer.ExposedPropertyMode.DefaultValue || exposedPropertyMode == BaseExposedPropertyDrawer.ExposedPropertyMode.NamedGUID)
        {
            this.OnRenderProperty(position3, propertyName, currentReferenceValue, serializedProperty, serializedProperty2, exposedPropertyMode, exposedPropertyTable);
        }
        else
        {
            position3.width /= 2f;
            EditorGUI.BeginChangeCheck();
            text = EditorGUI.TextField(position3, text);
            if (EditorGUI.EndChangeCheck())
            {
                serializedProperty2.stringValue = text;
            }
            position3.x += position3.width;
            this.OnRenderProperty(position3, new PropertyName(text), currentReferenceValue, serializedProperty, serializedProperty2, exposedPropertyMode, exposedPropertyTable);
        }
        EditorGUI.EndDisabledGroup();
        GUI.color = color;
        EditorGUIUtility.SetBoldDefaultFont(boldDefaultFont);
        if (flag && GUI.Button(position2, GUIContent.none, BaseExposedPropertyDrawer.kDropDownStyle))
        {
            GenericMenu genericMenu = new GenericMenu();
            this.PopulateContextMenu(genericMenu, overrideState, exposedPropertyTable, serializedProperty2, serializedProperty);
            genericMenu.ShowAsContext();
            Event.current.Use();
        }
    }
        // (case 1029160) Modified version of EditorGUI.DoPopup to fit large data list query.
        private AnimationClip DoClipPopup(AnimationClip clip, GUIStyle style)
        {
            Rect position  = EditorGUILayout.GetControlRect(false, EditorGUI.kSingleLineHeight, style);
            int  controlID = GUIUtility.GetControlID(s_ClipPopupHash, FocusType.Keyboard, position);

            clip = ClipPopupCallbackInfo.GetSelectedClipForControl(controlID, clip);

            Event evt = Event.current;

            switch (evt.type)
            {
            case EventType.Repaint:
                Font originalFont = style.font;
                if (originalFont && EditorGUIUtility.GetBoldDefaultFont() && originalFont == EditorStyles.miniFont)
                {
                    style.font = EditorStyles.miniBoldFont;
                }

                GUIContent buttonContent = EditorGUIUtility.TempContent(CurveUtility.GetClipName(clip));
                buttonContent.tooltip = AssetDatabase.GetAssetPath(clip);

                style.Draw(position, buttonContent, controlID, false);

                style.font = originalFont;
                break;

            case EventType.MouseDown:
                if (evt.button == 0 && position.Contains(evt.mousePosition))
                {
                    DisplayClipMenu(position, controlID, clip);
                    GUIUtility.keyboardControl = controlID;
                    evt.Use();
                }
                break;

            case EventType.KeyDown:
                if (evt.MainActionKeyForControl(controlID))
                {
                    DisplayClipMenu(position, controlID, clip);
                    evt.Use();
                }
                break;
            }

            return(clip);
        }
    public override void OnGUI(Rect position,
                               UnityEditor.SerializedProperty prop,
                               GUIContent label)
    {
        SerializedProperty defaultValue = prop.FindPropertyRelative("defaultValue");
        SerializedProperty exposedName  = prop.FindPropertyRelative("exposedName");

        var exposedNameStr = exposedName.stringValue;

        // 是默认值,GUID,还是名称
        var propertyMode = GetExposedPropertyMode(exposedNameStr);

        Rect propertyFieldPosition = position;

        propertyFieldPosition.xMax = propertyFieldPosition.xMax - ExposedReferencePropertyDrawer.kDriveWidgetWidth;

        Rect driveFieldPosition = position;

        driveFieldPosition.x     = propertyFieldPosition.xMax;
        driveFieldPosition.width = ExposedReferencePropertyDrawer.kDriveWidgetWidth;

        var exposedPropertyTable = GetExposedPropertyTable(prop);

        bool showContextMenu = exposedPropertyTable != null;
        var  propertyName    = new PropertyName(exposedNameStr);

        OverrideState currentOverrideState  = OverrideState.DefaultValue;
        var           currentReferenceValue = Resolve(propertyName, exposedPropertyTable, defaultValue.objectReferenceValue, out currentOverrideState);

        var previousColor      = GUI.color;
        var wasBoldDefaultFont = EditorGUIUtility.GetBoldDefaultFont();

        var valuePosition = DrawLabel(showContextMenu, currentOverrideState, label, position, exposedPropertyTable, exposedNameStr, exposedName, defaultValue);

        if (propertyMode == ExposedPropertyMode.DefaultValue || propertyMode == ExposedPropertyMode.NamedGUID)
        {
            OnRenderProperty(valuePosition, propertyName, currentReferenceValue, defaultValue, exposedName, propertyMode, exposedPropertyTable);
        }
        else
        {
            valuePosition.width /= 2;
            EditorGUI.BeginChangeCheck();
            exposedNameStr = EditorGUI.TextField(valuePosition, exposedNameStr);
            if (EditorGUI.EndChangeCheck())
            {
                exposedName.stringValue = exposedNameStr;
            }

            valuePosition.x += valuePosition.width;
            OnRenderProperty(valuePosition, new PropertyName(exposedNameStr), currentReferenceValue, defaultValue, exposedName, propertyMode, exposedPropertyTable);
        }

        GUI.color = previousColor;
        EditorGUIUtility.SetBoldDefaultFont(wasBoldDefaultFont);


        if (showContextMenu && GUI.Button(driveFieldPosition, GUIContent.none, kDropDownStyle))
        {
            GenericMenu menu = new GenericMenu();
            PopulateContextMenu(menu, currentOverrideState, exposedPropertyTable, exposedName, defaultValue);
            menu.ShowAsContext();
            Event.current.Use();
        }
    }