using System; using UnityEngine; namespace Unity.PlasticSCM.Editor.UI.Tree { internal abstract class CenteredContentPanel { internal CenteredContentPanel(Action repaintAction) { mRepaintAction = repaintAction; } internal void OnGUI(Rect rect) { if (Event.current.type == EventType.Repaint && mLastValidRect != rect) { mLastValidRect = rect; mRepaintAction(); } GUILayout.BeginArea(mLastValidRect); DrawGUI(); GUILayout.EndArea(); } protected abstract void DrawGUI(); protected static void CenterContent(params Action[] contents) { CenterVertical(() => { foreach (Action content in contents) { CenterHorizontal(() => { content(); }); } }); } static void CenterVertical(Action content) { GUILayout.BeginVertical(); GUILayout.FlexibleSpace(); content(); GUILayout.FlexibleSpace(); GUILayout.EndVertical(); } static void CenterHorizontal(Action content) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); content(); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } protected readonly Action mRepaintAction; Rect mLastValidRect; } }