| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using TMPro;
- using UnityEditor;
- using UnityEngine;
- namespace TheraBytes.BetterUi.Editor
- {
- [CustomEditor(typeof(BetterTextMeshProUGUI)), CanEditMultipleObjects]
- public class BetterTextMeshProUGUIEditor : TMPro.EditorUtilities.TMP_EditorPanelUI
- {
- bool foldout = true;
- SerializedProperty fitting_prop,
- fontSizerList_prop, fontSizerFallback_prop,
- minFontSizerList_prop, minFontSizerFallback_prop,
- maxFontSizerList_prop, maxFontSizerFallback_prop,
- marginSizerList_prop, marginSizerFallback_prop;
- void Init()
- {
- if (fitting_prop != null)
- return;
- fitting_prop = serializedObject.FindProperty("fitting");
- fontSizerFallback_prop = serializedObject.FindProperty("fontSizerFallback");
- minFontSizerFallback_prop = serializedObject.FindProperty("minFontSizerFallback");
- maxFontSizerFallback_prop = serializedObject.FindProperty("maxFontSizerFallback");
- marginSizerFallback_prop = serializedObject.FindProperty("marginSizerFallback");
- fontSizerList_prop = serializedObject.FindProperty("customFontSizers");
- minFontSizerList_prop = serializedObject.FindProperty("customMinFontSizers");
- maxFontSizerList_prop = serializedObject.FindProperty("customMaxFontSizers");
- marginSizerList_prop = serializedObject.FindProperty("customMarginSizers");
- }
- public override void OnInspectorGUI()
- {
- EditorGUILayout.Space();
- var origFontStyle = EditorStyles.foldout.fontStyle;
- EditorStyles.foldout.fontStyle = FontStyle.Bold;
- foldout = EditorGUILayout.Foldout(foldout, new GUIContent("Better UI"));
- EditorStyles.foldout.fontStyle = origFontStyle;
- Init();
- if (foldout)
- {
- EditorGUI.indentLevel++;
- // fitting mode
- EditorGUILayout.PropertyField(fitting_prop);
- if (fitting_prop.intValue != (int)BetterText.FittingMode.BestFit)
- {
- // font size
- ScreenConfigConnectionHelper.DrawSizerGui("Font Size", fontSizerList_prop, ref fontSizerFallback_prop);
- }
- BetterText.FittingMode fitting = (BetterText.FittingMode)fitting_prop.intValue;
- if (fitting != BetterText.FittingMode.SizerOnly)
- {
- // min font size
- ScreenConfigConnectionHelper.DrawSizerGui("Min Size", minFontSizerList_prop, ref minFontSizerFallback_prop);
- if (fitting == BetterText.FittingMode.BestFit)
- {
- // max font size
- ScreenConfigConnectionHelper.DrawSizerGui("Max Size", maxFontSizerList_prop, ref maxFontSizerFallback_prop);
- }
- }
- EditorGUILayout.Space();
- // Margin
- ScreenConfigConnectionHelper.DrawSizerGui("Margin", marginSizerList_prop, ref marginSizerFallback_prop);
- serializedObject.ApplyModifiedProperties();
- EditorGUI.indentLevel--;
- }
- EditorGUILayout.HelpBox("Better UI properties will control some properties below.\nSo, changes below may instantly reset.",
- MessageType.Info);
- base.OnInspectorGUI();
- }
- [MenuItem("CONTEXT/TextMeshProUGUI/♠ Make Better")]
- public static void MakeBetter(MenuCommand command)
- {
- TextMeshProUGUI ctrl = command.context as TextMeshProUGUI;
- float fontSize = ctrl.fontSize;
- float fontSizeMin = ctrl.fontSizeMin;
- float fontSizeMax = ctrl.fontSizeMax;
- Vector4 margin = ctrl.margin;
- Vector2 rectSize = ctrl.rectTransform.sizeDelta;
- Vector2 rectPos = ctrl.rectTransform.anchoredPosition;
- var newCtrl = Betterizer.MakeBetter<TextMeshProUGUI, BetterTextMeshProUGUI>(ctrl,
- "m_mesh", "m_subTextObjects", "m_fontSharedMaterials", "m_fontMaterials", "m_textInfo");
- var better = newCtrl as BetterTextMeshProUGUI;
- if (newCtrl != null)
- {
- newCtrl.SetCharArray(newCtrl.text.ToCharArray());
- if (better != null)
- {
- better.FontSizer.SetSize(newCtrl, fontSize);
- better.MinFontSizer.SetSize(newCtrl, fontSizeMin);
- better.MaxFontSizer.SetSize(newCtrl, fontSizeMax);
- better.MarginSizer.SetSize(newCtrl, new Margin(margin));
- better.Fitting = BetterText.FittingMode.StayInBounds;
- }
- newCtrl.ClearMesh();
- newCtrl.rectTransform.sizeDelta = rectSize;
- newCtrl.rectTransform.anchoredPosition = rectPos;
- }
- }
- }
- }
|