UIUtils.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using UnityEngine.Experimental.UIElements;
  3. namespace UnityEditor.PackageManager.UI
  4. {
  5. internal static class UIUtils
  6. {
  7. private const string DisplayNone = "display-none";
  8. public static void SetElementDisplay(VisualElement element, bool value)
  9. {
  10. if (element == null)
  11. return;
  12. if (value)
  13. element.RemoveFromClassList(DisplayNone);
  14. else
  15. element.AddToClassList(DisplayNone);
  16. element.visible = value;
  17. }
  18. public static void SetElementDisplayNonEmpty(Label element)
  19. {
  20. if (element == null)
  21. return;
  22. var empty = string.IsNullOrEmpty(element.text);
  23. if (empty)
  24. element.AddToClassList(DisplayNone);
  25. else
  26. element.RemoveFromClassList(DisplayNone);
  27. element.visible = !empty;
  28. }
  29. public static void SetElementDisplayNonEmpty(Button element)
  30. {
  31. if (element == null)
  32. return;
  33. var empty = string.IsNullOrEmpty(element.text);
  34. if (empty)
  35. element.AddToClassList(DisplayNone);
  36. else
  37. element.RemoveFromClassList(DisplayNone);
  38. element.visible = !empty;
  39. }
  40. public static bool IsElementVisible(VisualElement element)
  41. {
  42. return element.visible && !element.ClassListContains(DisplayNone);
  43. }
  44. public static bool IsElementDisplayNone(VisualElement element)
  45. {
  46. return element.ClassListContains(DisplayNone);
  47. }
  48. public static void ShowTextTooltipOnSizeChange<T>(this T element, int deltaWidth = 0) where T : TextElement
  49. {
  50. element.RegisterCallback<GeometryChangedEvent>(evt =>
  51. {
  52. if (evt.newRect.width == evt.oldRect.width)
  53. return;
  54. var target = evt.target as TextElement;
  55. if (target == null)
  56. return;
  57. var size = target.MeasureTextSize(target.text, float.MaxValue, VisualElement.MeasureMode.AtMost, evt.newRect.height, VisualElement.MeasureMode.Undefined);
  58. var width = evt.newRect.width + deltaWidth;
  59. target.tooltip = width < size.x ? target.text : string.Empty;
  60. });
  61. }
  62. }
  63. }