Exemplo n.º 1
0
        public override float GetHeight(SerializedProperty property, GUIContent label, float height)
        {
            if (!IsVisible())
            {
                return(height);
            }
            if (property.propertyType != SerializedPropertyType.ObjectReference)
            {
                return(height);
            }
            var data = m_Data.Get(property.propertyPath);

            if (property.objectReferenceValue == null)
            {
                data.serializedObject = null;
                return(height);
            }
            if (!always && !property.isExpanded)
            {
                return(height);
            }

            Update();
            data.height           = height;
            data.maxHeight        = maxHeight;
            data.serializedObject = new SerializedObject(property.objectReferenceValue);
            data.serializedObject.Update();

            var result = InlineProperty.GetHeight(data.serializedObject, data.propertyHeights);

            data.inlineHeight = result;

            if (maxHeight >= 0)
            {
                result = Mathf.Min(result, maxHeight);
            }
            height += result + 2 + m_Top + m_Bottom;
            if (result <= 0)
            {
                height = data.height;
            }
            return(height);
        }
Exemplo n.º 2
0
        public override void AfterGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            if (!m_Visible)
            {
                return;
            }
            if (property.propertyType != SerializedPropertyType.ObjectReference)
            {
                return;
            }
            var data = m_Data.Get(property.propertyPath);

            if (data.serializedObject == null)
            {
                return;
            }
            if (!always && !property.isExpanded)
            {
                return;
            }

            var indent = m_Position.indent(indented);

            indent.yMin += data.height + 2;
            indent.yMax -= 0;
            if (m_Left < 0)
            {
                indent.xMin += m_Left;
            }
            if (m_Right < 0)
            {
                indent.xMax -= m_Right;
            }
            if (data.inlineHeight > 0)
            {
                GUI.Label(indent, GUIContent.none, m_Style);
            }

            var text        = label.text;
            var image       = label.image;
            var tooltip     = label.tooltip;
            int indentLevel = EditorGUI.indentLevel;

            if (indentChildren)
            {
                EditorGUI.indentLevel++;
            }
            var rect = m_Position.indent(indentChildren);

            rect.yMin            += data.height + 2;
            rect.xMin            += Mathf.Max(0, m_Left);
            rect.xMax            -= Mathf.Max(0, m_Right);
            rect.yMin            += m_Top;
            EditorGUI.indentLevel = indentLevel;

            var realHeight = data.inlineHeight;
            var view       = new Rect(rect);

            view.height = realHeight;
            if (realHeight > rect.height)
            {
                view.width -= 16;
            }
            var realWidth = view.width;

            if (realHeight > rect.height)
            {
                data.scroll = GUI.BeginScrollView(rect, data.scroll, view);
            }
            rect.width = realWidth;
            InlineProperty.Draw(rect, data.serializedObject, false, data.propertyHeights);
            if (realHeight > rect.height)
            {
                GUI.EndScrollView();
            }

            EditorGUI.indentLevel = indentLevel;
            label.text            = text;
            label.image           = image;
            label.tooltip         = tooltip;
        }