BetterTextMeshProInputField.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using TMPro;
  6. using UnityEngine;
  7. using UnityEngine.Events;
  8. using UnityEngine.EventSystems;
  9. using UnityEngine.UI;
  10. namespace TheraBytes.BetterUi
  11. {
  12. #if UNITY_2018_3_OR_NEWER
  13. [ExecuteAlways]
  14. #else
  15. [ExecuteInEditMode]
  16. #endif
  17. [AddComponentMenu("Better UI/TextMeshPro/Better TextMeshPro - Input Field", 30)]
  18. public class BetterTextMeshProInputField : TMP_InputField, IBetterTransitionUiElement, IResolutionDependency
  19. {
  20. public List<Transitions> BetterTransitions { get { return betterTransitions; } }
  21. public List<Graphic> AdditionalPlaceholders { get { return additionalPlaceholders; } }
  22. public FloatSizeModifier PointSizeScaler { get { return pointSizeScaler; } }
  23. public bool OverridePointSizeSettings
  24. {
  25. get { return overridePointSize; }
  26. set { overridePointSize = value; }
  27. }
  28. [SerializeField]
  29. List<Transitions> betterTransitions = new List<Transitions>();
  30. [SerializeField]
  31. List<Graphic> additionalPlaceholders = new List<Graphic>();
  32. [SerializeField]
  33. FloatSizeModifier pointSizeScaler = new FloatSizeModifier(36, 10, 500);
  34. [SerializeField]
  35. bool overridePointSize;
  36. protected override void DoStateTransition(SelectionState state, bool instant)
  37. {
  38. base.DoStateTransition(state, instant);
  39. if (!(base.gameObject.activeInHierarchy))
  40. return;
  41. foreach (var info in betterTransitions)
  42. {
  43. info.SetState(state.ToString(), instant);
  44. }
  45. }
  46. public override void OnUpdateSelected(BaseEventData eventData)
  47. {
  48. base.OnUpdateSelected(eventData);
  49. DisplayPlaceholders(this.text);
  50. }
  51. void DisplayPlaceholders(string input)
  52. {
  53. bool show = string.IsNullOrEmpty(input);
  54. if (Application.isPlaying)
  55. {
  56. foreach (var ph in additionalPlaceholders)
  57. {
  58. ph.enabled = show;
  59. }
  60. }
  61. }
  62. protected override void OnEnable()
  63. {
  64. CalculateSize();
  65. base.OnEnable();
  66. }
  67. protected override void OnRectTransformDimensionsChange()
  68. {
  69. base.OnRectTransformDimensionsChange();
  70. CalculateSize();
  71. }
  72. public void OnResolutionChanged()
  73. {
  74. CalculateSize();
  75. }
  76. public void CalculateSize()
  77. {
  78. if (overridePointSize)
  79. base.pointSize = pointSizeScaler.CalculateSize(this);
  80. OverrideBetterTextMeshSize(base.m_Placeholder as BetterTextMeshProUGUI, pointSize);
  81. OverrideBetterTextMeshSize(base.m_TextComponent as BetterTextMeshProUGUI, pointSize);
  82. foreach(var p in additionalPlaceholders)
  83. {
  84. OverrideBetterTextMeshSize(p as BetterTextMeshProUGUI, pointSize);
  85. }
  86. }
  87. void OverrideBetterTextMeshSize(BetterTextMeshProUGUI better, float size)
  88. {
  89. if (better == null)
  90. return;
  91. better.IgnoreFontSizerOptions = overridePointSize;
  92. if (overridePointSize)
  93. {
  94. better.FontSizer.OverrideLastCalculatedSize(size);
  95. better.fontSize = size;
  96. }
  97. else
  98. {
  99. better.FontSizer.CalculateSize(this);
  100. }
  101. }
  102. #if UNITY_EDITOR
  103. protected override void OnValidate()
  104. {
  105. CalculateSize();
  106. base.OnValidate();
  107. }
  108. #endif
  109. }
  110. }