| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using TMPro;
- using UnityEngine;
- using UnityEngine.Serialization;
- namespace TheraBytes.BetterUi
- {
- #if UNITY_2018_3_OR_NEWER
- [ExecuteAlways]
- #else
- [ExecuteInEditMode]
- #endif
- [AddComponentMenu("Better UI/TextMeshPro/Better TextMeshPro Text", 30)]
- public class BetterTextMeshProUGUI : TextMeshProUGUI, IResolutionDependency
- {
- public BetterText.FittingMode Fitting
- {
- get { return fitting; }
- set
- {
- if (fitting == value)
- return;
- fitting = value;
- CalculateSize();
- }
- }
- public MarginSizeModifier MarginSizer { get { return customMarginSizers.GetCurrentItem(marginSizerFallback); } }
- public FloatSizeModifier FontSizer { get { return customFontSizers.GetCurrentItem(fontSizerFallback); } }
- public FloatSizeModifier MinFontSizer { get { return customMinFontSizers.GetCurrentItem(minFontSizerFallback); } }
- public FloatSizeModifier MaxFontSizer { get { return customMaxFontSizers.GetCurrentItem(maxFontSizerFallback); } }
- public bool IgnoreFontSizerOptions { get; set; }
- [SerializeField]
- BetterText.FittingMode fitting;
- [FormerlySerializedAs("marginSizer")]
- [SerializeField]
- MarginSizeModifier marginSizerFallback =
- new MarginSizeModifier(new Margin(), new Margin(), new Margin(1000, 1000, 1000, 1000));
- [SerializeField]
- MarginSizeConfigCollection customMarginSizers = new MarginSizeConfigCollection();
- [FormerlySerializedAs("fontSizer")]
- [SerializeField]
- FloatSizeModifier fontSizerFallback = new FloatSizeModifier(36, 10, 500);
- [SerializeField]
- FloatSizeConfigCollection customFontSizers = new FloatSizeConfigCollection();
- [FormerlySerializedAs("minFontSizer")]
- [SerializeField]
- FloatSizeModifier minFontSizerFallback = new FloatSizeModifier(10, 10, 500);
- [SerializeField]
- FloatSizeConfigCollection customMinFontSizers = new FloatSizeConfigCollection();
- [FormerlySerializedAs("maxFontSizer")]
- [SerializeField]
- FloatSizeModifier maxFontSizerFallback = new FloatSizeModifier(500, 500, 500);
- [SerializeField]
- FloatSizeConfigCollection customMaxFontSizers = new FloatSizeConfigCollection();
- protected override void OnEnable()
- {
- CalculateSize();
- base.OnEnable();
- }
- public void OnResolutionChanged()
- {
- CalculateSize();
- }
- protected override void OnRectTransformDimensionsChange()
- {
- base.OnRectTransformDimensionsChange();
- CalculateSize();
- }
- public void CalculateSize()
- {
- if (IgnoreFontSizerOptions)
- {
- base.enableAutoSizing = false;
- }
- else
- {
- switch (fitting)
- {
- case BetterText.FittingMode.SizerOnly:
- base.enableAutoSizing = false;
- base.fontSize = FontSizer.CalculateSize(this);
- break;
- case BetterText.FittingMode.StayInBounds:
- base.enableAutoSizing = true;
- base.fontSizeMin = MinFontSizer.CalculateSize(this);
- base.fontSizeMax = FontSizer.CalculateSize(this);
- break;
- case BetterText.FittingMode.BestFit:
- base.enableAutoSizing = true;
- base.fontSizeMin = MinFontSizer.CalculateSize(this);
- base.fontSizeMax = MaxFontSizer.CalculateSize(this);
- break;
- }
- }
- base.margin = MarginSizer.CalculateSize(this).ToVector4();
- }
- public void RegisterMaterials(Material[] materials)
- {
- base.GetMaterials(materials);
- }
- #if UNITY_EDITOR
- protected override void OnValidate()
- {
- CalculateSize();
- base.OnValidate();
- }
- #endif
- }
- }
|