#nullable enable using System; using UnityEngine; using UnityEngine.UIElements; using UVC.UI.Commands; namespace UVC.UIToolkit { /// /// 앱 최소화 버튼 컴포넌트. /// 클릭 시 를 실행합니다. /// 고정 크기: width=45, height=32. /// /// /// C# 코드에서 사용: /// /// var btn = new UTKMinimizeAppButton(); /// container.Add(btn); /// /// // 비활성화 /// btn.IsEnabled = false; /// /// UXML에서 사용: /// /// /// /// /// /// /// [UxmlElement] public partial class UTKMinimizeAppButton : VisualElement, IDisposable { #region Constants private const string UXML_PATH = "UIToolkit/Button/UTKMinimizeAppButton"; private const string USS_PATH = "UIToolkit/Button/UTKMinimizeAppButtonUss"; private const int ICON_SIZE = 18; #endregion #region Fields private bool _disposed; private bool _isEnabled = true; private Label? _materialIconLabel; private readonly MinimizeApplicationCommand _command = new(); #endregion #region Properties /// 활성화 상태. false이면 시각적 비활성화 + 클릭 무시. [UxmlAttribute("is-enabled")] public bool IsEnabled { get => _isEnabled; set { _isEnabled = value; SetEnabled(value); EnableInClassList("utk-minimize-app-btn--disabled", !value); } } #endregion #region Constructor public UTKMinimizeAppButton() { UTKThemeManager.Instance.ApplyThemeToElement(this); var uss = Resources.Load(USS_PATH); if (uss != null) { styleSheets.Add(uss); } CreateUI(); SetupEvents(); SubscribeToThemeChanges(); } #endregion #region Setup private void CreateUI() { AddToClassList("utk-minimize-app-btn"); focusable = true; pickingMode = PickingMode.Position; var asset = Resources.Load(UXML_PATH); if (asset != null) { var root = asset.Instantiate(); _materialIconLabel = root.Q