using System.Diagnostics; using UnityEditor; using UnityEngine; namespace Unity.VisualScripting { public class AboutablePage : Page { public AboutablePage(IAboutable aboutable) { Ensure.That(nameof(aboutable)).IsNotNull(aboutable); title = $"About {aboutable.name}"; shortTitle = aboutable.name; subtitle = $"v.{aboutable.version}"; icon = BoltCore.Resources.LoadIcon("AboutPage.png"); this.aboutable = aboutable; } private readonly IAboutable aboutable; protected override void OnContentGUI() { GUILayout.BeginVertical(Styles.background, GUILayout.ExpandHeight(true)); LudiqGUI.FlexibleSpace(); EditorGUILayout.LabelField($"Version {aboutable.version}", LudiqStyles.centeredLabel); LudiqGUI.FlexibleSpace(); if (!StringUtility.IsNullOrWhiteSpace(aboutable.description)) { EditorGUILayout.LabelField(aboutable.description.Trim(), LudiqStyles.centeredLabel); } LudiqGUI.FlexibleSpace(); if (!StringUtility.IsNullOrWhiteSpace(aboutable.author)) { EditorGUILayout.LabelField($"{aboutable.authorLabel.Trim()} {aboutable.author.Trim()}", LudiqStyles.centeredLabel); } if (!StringUtility.IsNullOrWhiteSpace(aboutable.copyrightHolder)) { EditorGUILayout.LabelField($"Copyright \u00a9 {aboutable.copyrightYear} {aboutable.copyrightHolder.Trim()}. All Rights Reserved.", LudiqStyles.centeredLabel); } if (aboutable.authorLogo != null) { LudiqGUI.FlexibleSpace(); LudiqGUI.BeginHorizontal(); LudiqGUI.FlexibleSpace(); var logoHeight = Styles.authorLogoHeight; var logoWidth = (float)aboutable.authorLogo.width / aboutable.authorLogo.height * logoHeight; var logoPosition = GUILayoutUtility.GetRect(logoWidth, logoHeight); if (!string.IsNullOrEmpty(aboutable.authorUrl)) { if (GUI.Button(logoPosition, aboutable.authorLogo, GUIStyle.none)) { Process.Start(aboutable.authorUrl); } } else if (e.type == EventType.Repaint) { GUI.DrawTexture(logoPosition, aboutable.authorLogo); } LudiqGUI.FlexibleSpace(); LudiqGUI.EndHorizontal(); } LudiqGUI.FlexibleSpace(); LudiqGUI.EndVertical(); } public static class Styles { static Styles() { background = new GUIStyle(LudiqStyles.windowBackground); background.padding = new RectOffset(10, 10, 10, 10); } public static readonly GUIStyle background; public static readonly float authorLogoHeight = 50; } } }