123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using System;
- using UnityEngine;
- using UnityEngine.Rendering;
- namespace UnityEditor.Rendering
- {
- /// <summary>
- /// Attribute specifying wich type of Debug Item should this drawer be used with.
- /// </summary>
- public class DebugUIDrawerAttribute : Attribute
- {
- internal readonly Type type;
- /// <summary>
- /// Constructor for DebugUIDraw Attribute
- /// </summary>
- /// <param name="type">Type of Debug Item this draw should be used with.</param>
- public DebugUIDrawerAttribute(Type type)
- {
- this.type = type;
- }
- }
- /// <summary>
- /// Debug Item Drawer
- /// </summary>
- public class DebugUIDrawer
- {
- /// <summary>
- /// Cast into the proper type.
- /// </summary>
- /// <typeparam name="T">Type of the drawer</typeparam>
- /// <param name="o">Object to be cast</param>
- /// <returns>Returns o cast to type T</returns>
- protected T Cast<T>(object o)
- where T : class
- {
- var casted = o as T;
- string typeName = o == null ? "null" : o.GetType().ToString();
- if (casted == null)
- throw new InvalidOperationException("Can't cast " + typeName + " to " + typeof(T));
- return casted;
- }
- /// <summary>
- /// Implement this to execute processing before UI rendering.
- /// </summary>
- /// <param name="widget">Widget that is going to be rendered.</param>
- /// <param name="state">Debug State associated with the Debug Item.</param>
- public virtual void Begin(DebugUI.Widget widget, DebugState state)
- {}
- /// <summary>
- /// Implement this to execute UI rendering.
- /// </summary>
- /// <param name="widget">Widget that is going to be rendered.</param>
- /// <param name="state">Debug State associated with the Debug Item.</param>
- /// <returns>Returns the state of the widget.</returns>
- public virtual bool OnGUI(DebugUI.Widget widget, DebugState state)
- {
- return true;
- }
- /// <summary>
- /// Implement this to execute processing after UI rendering.
- /// </summary>
- /// <param name="widget">Widget that is going to be rendered.</param>
- /// <param name="state">Debug State associated with the Debug Item.</param>
- public virtual void End(DebugUI.Widget widget, DebugState state)
- {}
- /// <summary>
- /// Applies a value to the widget and the Debug State of the Debug Item.
- /// </summary>
- /// <param name="widget">Debug Item widget.</param>
- /// <param name="state">Debug State associated with the Debug Item</param>
- /// <param name="value">Input value.</param>
- protected void Apply(DebugUI.IValueField widget, DebugState state, object value)
- {
- Undo.RegisterCompleteObjectUndo(state, "Debug Property Change");
- state.SetValue(value, widget);
- widget.SetValue(value);
- EditorUtility.SetDirty(state);
- DebugState.m_CurrentDirtyState = state;
- UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
- }
- /// <summary>
- /// Prepares the rendering Rect of the Drawer/
- /// </summary>
- /// <param name="height">Height of the rect.</param>
- /// <returns>Appropriate Rect for drawing.</returns>
- protected Rect PrepareControlRect(float height = -1)
- {
- if (height < 0)
- height = EditorGUIUtility.singleLineHeight;
- var rect = GUILayoutUtility.GetRect(1f, 1f, height, height);
- rect.width -= 2f;
- rect.xMin += 2f;
- EditorGUIUtility.labelWidth = rect.width / 2f;
- return rect;
- }
- }
- }
|