123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.UI;
- using System.Globalization;
-
- namespace UnityEditor.Events
- {
- [CustomPreview(typeof(GameObject))]
- /// <summary>
- /// Custom preview drawing that will draw the layout properties of a given object.
- /// </summary>
- class LayoutPropertiesPreview : ObjectPreview
- {
- private const float kLabelWidth = 110;
- private const float kValueWidth = 100;
-
- class Styles
- {
- public GUIStyle labelStyle = new GUIStyle(EditorStyles.label);
- public GUIStyle headerStyle = new GUIStyle(EditorStyles.boldLabel);
-
- public Styles()
- {
- labelStyle.padding.right += 4;
- headerStyle.padding.right += 4;
- }
- }
-
- private GUIContent m_Title;
- private Styles m_Styles;
-
- public override void Initialize(UnityEngine.Object[] targets)
- {
- base.Initialize(targets);
- }
-
- public override GUIContent GetPreviewTitle()
- {
- if (m_Title == null)
- {
- m_Title = EditorGUIUtility.TrTextContent("Layout Properties");
- }
- return m_Title;
- }
-
- public override bool HasPreviewGUI()
- {
- GameObject go = target as GameObject;
- if (!go)
- return false;
-
- // Prevent allocations in the editor by using TryGetComponent
- ILayoutElement layoutElement;
- return go.TryGetComponent(out layoutElement);
- }
-
- public override void OnPreviewGUI(Rect r, GUIStyle background)
- {
- if (Event.current.type != EventType.Repaint)
- return;
-
- if (m_Styles == null)
- m_Styles = new Styles();
-
- GameObject go = target as GameObject;
- RectTransform rect = go.transform as RectTransform;
- if (rect == null)
- return;
-
- // Apply padding
- RectOffset previewPadding = new RectOffset(-5, -5, -5, -5);
- r = previewPadding.Add(r);
-
- // Prepare rects for columns
- r.height = EditorGUIUtility.singleLineHeight;
- Rect labelRect = r;
- Rect valueRect = r;
- Rect sourceRect = r;
- labelRect.width = kLabelWidth;
- valueRect.xMin += kLabelWidth;
- valueRect.width = kValueWidth;
- sourceRect.xMin += kLabelWidth + kValueWidth;
-
- // Headers
- GUI.Label(labelRect, "Property", m_Styles.headerStyle);
- GUI.Label(valueRect, "Value", m_Styles.headerStyle);
- GUI.Label(sourceRect, "Source", m_Styles.headerStyle);
- labelRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- valueRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
- sourceRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
-
- // Prepare reusable variable for out argument
- ILayoutElement source = null;
-
- // Show properties
-
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Min Width", LayoutUtility.GetLayoutProperty(rect, e => e.minWidth, 0, out source).ToString(CultureInfo.InvariantCulture.NumberFormat), source);
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Min Height", LayoutUtility.GetLayoutProperty(rect, e => e.minHeight, 0, out source).ToString(CultureInfo.InvariantCulture.NumberFormat), source);
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Preferred Width", LayoutUtility.GetLayoutProperty(rect, e => e.preferredWidth, 0, out source).ToString(CultureInfo.InvariantCulture.NumberFormat), source);
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Preferred Height", LayoutUtility.GetLayoutProperty(rect, e => e.preferredHeight, 0, out source).ToString(CultureInfo.InvariantCulture.NumberFormat), source);
-
- float flexible = 0;
-
- flexible = LayoutUtility.GetLayoutProperty(rect, e => e.flexibleWidth, 0, out source);
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Flexible Width", flexible > 0 ? ("enabled (" + flexible.ToString(CultureInfo.InvariantCulture.NumberFormat) + ")") : "disabled", source);
- flexible = LayoutUtility.GetLayoutProperty(rect, e => e.flexibleHeight, 0, out source);
- ShowProp(ref labelRect, ref valueRect, ref sourceRect, "Flexible Height", flexible > 0 ? ("enabled (" + flexible.ToString(CultureInfo.InvariantCulture.NumberFormat) + ")") : "disabled", source);
-
- if (!rect.GetComponent<LayoutElement>())
- {
- Rect noteRect = new Rect(labelRect.x, labelRect.y + 10, r.width, EditorGUIUtility.singleLineHeight);
- GUI.Label(noteRect, "Add a LayoutElement to override values.", m_Styles.labelStyle);
- }
- }
-
- private void ShowProp(ref Rect labelRect, ref Rect valueRect, ref Rect sourceRect, string label, string value, ILayoutElement source)
- {
- GUI.Label(labelRect, label, m_Styles.labelStyle);
- GUI.Label(valueRect, value, m_Styles.labelStyle);
- GUI.Label(sourceRect, source == null ? "none" : source.GetType().Name, m_Styles.labelStyle);
- labelRect.y += EditorGUIUtility.singleLineHeight;
- valueRect.y += EditorGUIUtility.singleLineHeight;
- sourceRect.y += EditorGUIUtility.singleLineHeight;
- }
- }
- }
|