This repository has been archived on 2020-08-22. You can view files and clone it, but cannot push or open issues or pull requests.
flutter-unity-view-widget/example/Unity/Demo App/Library/PackageCache/com.unity.textmeshpro@1.3.0/Scripts/Editor/TMP_SettingsEditor.cs

293 lines
16 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEditorInternal;
#pragma warning disable 0414 // Disabled a few warnings for not yet implemented features.
namespace TMPro.EditorUtilities
{
[CustomEditor(typeof(TMP_Settings))]
public class TMP_SettingsEditor : Editor
{
class Styles
{
public static readonly GUIContent defaultFontAssetLabel = new GUIContent("Default Font Asset", "The Font Asset that will be assigned by default to newly created text objects when no Font Asset is specified.");
public static readonly GUIContent defaultFontAssetPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Font Assets and Material Presets are located.\nExample \"Fonts & Materials/\"");
public static readonly GUIContent fallbackFontAssetsLabel = new GUIContent("Fallback Font Assets", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset.");
public static readonly GUIContent fallbackFontAssetsListLabel = new GUIContent("Fallback Font Assets List", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset.");
public static readonly GUIContent fallbackMaterialSettingsLabel = new GUIContent("Fallback Material Settings");
public static readonly GUIContent matchMaterialPresetLabel = new GUIContent("Match Material Presets");
public static readonly GUIContent containerDefaultSettingsLabel = new GUIContent("Text Container Default Settings");
public static readonly GUIContent textMeshProLabel = new GUIContent("TextMeshPro");
public static readonly GUIContent textMeshProUiLabel = new GUIContent("TextMeshPro UI");
public static readonly GUIContent autoSizeContainerLabel = new GUIContent("Auto Size Text Container", "Set the size of the text container to match the text.");
public static readonly GUIContent textComponentDefaultSettingsLabel = new GUIContent("Text Component Default Settings");
public static readonly GUIContent defaultFontSize = new GUIContent("Default Font Size");
public static readonly GUIContent autoSizeRatioLabel = new GUIContent("Text Auto Size Ratios");
public static readonly GUIContent minLabel = new GUIContent("Min");
public static readonly GUIContent maxLabel = new GUIContent("Max");
public static readonly GUIContent wordWrappingLabel = new GUIContent("Word Wrapping");
public static readonly GUIContent kerningLabel = new GUIContent("Kerning");
public static readonly GUIContent extraPaddingLabel = new GUIContent("Extra Padding");
public static readonly GUIContent tintAllSpritesLabel = new GUIContent("Tint All Sprites");
public static readonly GUIContent parseEscapeCharactersLabel = new GUIContent("Parse Escape Sequence");
public static readonly GUIContent missingGlyphsTitleLabel = new GUIContent("Missing glyphs");
public static readonly GUIContent missingGlyphLabel = new GUIContent("Replacement", "The glyph to be used as a replacement when a glyph can't be found in a font asset.");
public static readonly GUIContent disableWarningsLabel = new GUIContent("Disable warnings");
public static readonly GUIContent defaultSpriteAssetLabel = new GUIContent("Default Sprite Asset", "The Sprite Asset that will be assigned by default when using the <sprite> tag when no Sprite Asset is specified.");
public static readonly GUIContent enableEmojiSupportLabel = new GUIContent("iOS Emoji Support", "Enables Emoji support for Touch Screen Keyboards on target devices.");
public static readonly GUIContent spriteAssetsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Sprite Assets are located.\nExample \"Sprite Assets/\"");
public static readonly GUIContent defaultStyleSheetLabel = new GUIContent("Default Style Sheet", "The Style Sheet that will be used for all text objects in this project.");
public static readonly GUIContent colorGradientPresetsLabel = new GUIContent("Color Gradient Presets", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\"");
public static readonly GUIContent colorGradientsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\"");
public static readonly GUIContent lineBreakingLabel = new GUIContent("Line Breaking for Asian languages", "The text assets that contain the Leading and Following characters which define the rules for line breaking with Asian languages.");
}
SerializedProperty m_PropFontAsset;
SerializedProperty m_PropDefaultFontAssetPath;
SerializedProperty m_PropDefaultFontSize;
SerializedProperty m_PropDefaultAutoSizeMinRatio;
SerializedProperty m_PropDefaultAutoSizeMaxRatio;
SerializedProperty m_PropDefaultTextMeshProTextContainerSize;
SerializedProperty m_PropDefaultTextMeshProUITextContainerSize;
SerializedProperty m_PropAutoSizeTextContainer;
SerializedProperty m_PropSpriteAsset;
SerializedProperty m_PropSpriteAssetPath;
SerializedProperty m_PropEnableEmojiSupport;
SerializedProperty m_PropStyleSheet;
ReorderableList m_List;
SerializedProperty m_PropColorGradientPresetsPath;
SerializedProperty m_PropMatchMaterialPreset;
SerializedProperty m_PropWordWrapping;
SerializedProperty m_PropKerning;
SerializedProperty m_PropExtraPadding;
SerializedProperty m_PropTintAllSprites;
SerializedProperty m_PropParseEscapeCharacters;
SerializedProperty m_PropMissingGlyphCharacter;
SerializedProperty m_PropWarningsDisabled;
SerializedProperty m_PropLeadingCharacters;
SerializedProperty m_PropFollowingCharacters;
public void OnEnable()
{
if (target == null)
return;
m_PropFontAsset = serializedObject.FindProperty("m_defaultFontAsset");
m_PropDefaultFontAssetPath = serializedObject.FindProperty("m_defaultFontAssetPath");
m_PropDefaultFontSize = serializedObject.FindProperty("m_defaultFontSize");
m_PropDefaultAutoSizeMinRatio = serializedObject.FindProperty("m_defaultAutoSizeMinRatio");
m_PropDefaultAutoSizeMaxRatio = serializedObject.FindProperty("m_defaultAutoSizeMaxRatio");
m_PropDefaultTextMeshProTextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProTextContainerSize");
m_PropDefaultTextMeshProUITextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProUITextContainerSize");
m_PropAutoSizeTextContainer = serializedObject.FindProperty("m_autoSizeTextContainer");
m_PropSpriteAsset = serializedObject.FindProperty("m_defaultSpriteAsset");
m_PropSpriteAssetPath = serializedObject.FindProperty("m_defaultSpriteAssetPath");
m_PropEnableEmojiSupport = serializedObject.FindProperty("m_enableEmojiSupport");
m_PropStyleSheet = serializedObject.FindProperty("m_defaultStyleSheet");
m_PropColorGradientPresetsPath = serializedObject.FindProperty("m_defaultColorGradientPresetsPath");
m_List = new ReorderableList(serializedObject, serializedObject.FindProperty("m_fallbackFontAssets"), true, true, true, true);
m_List.drawElementCallback = (rect, index, isActive, isFocused) =>
{
var element = m_List.serializedProperty.GetArrayElementAtIndex(index);
rect.y += 2;
EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none);
};
m_List.drawHeaderCallback = rect =>
{
EditorGUI.LabelField(rect, Styles.fallbackFontAssetsListLabel);
};
m_PropMatchMaterialPreset = serializedObject.FindProperty("m_matchMaterialPreset");
m_PropWordWrapping = serializedObject.FindProperty("m_enableWordWrapping");
m_PropKerning = serializedObject.FindProperty("m_enableKerning");
m_PropExtraPadding = serializedObject.FindProperty("m_enableExtraPadding");
m_PropTintAllSprites = serializedObject.FindProperty("m_enableTintAllSprites");
m_PropParseEscapeCharacters = serializedObject.FindProperty("m_enableParseEscapeCharacters");
m_PropMissingGlyphCharacter = serializedObject.FindProperty("m_missingGlyphCharacter");
m_PropWarningsDisabled = serializedObject.FindProperty("m_warningsDisabled");
m_PropLeadingCharacters = serializedObject.FindProperty("m_leadingCharacters");
m_PropFollowingCharacters = serializedObject.FindProperty("m_followingCharacters");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
float labelWidth = EditorGUIUtility.labelWidth;
float fieldWidth = EditorGUIUtility.fieldWidth;
// TextMeshPro Font Info Panel
EditorGUI.indentLevel = 0;
// FONT ASSET
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.defaultFontAssetLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropFontAsset, Styles.defaultFontAssetLabel);
EditorGUILayout.PropertyField(m_PropDefaultFontAssetPath, Styles.defaultFontAssetPathLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// FALLBACK FONT ASSETs
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.fallbackFontAssetsLabel, EditorStyles.boldLabel);
m_List.DoLayoutList();
GUILayout.Label(Styles.fallbackMaterialSettingsLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropMatchMaterialPreset, Styles.matchMaterialPresetLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// MISSING GLYPHS
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.missingGlyphsTitleLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropMissingGlyphCharacter, Styles.missingGlyphLabel);
EditorGUILayout.PropertyField(m_PropWarningsDisabled, Styles.disableWarningsLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// TEXT OBJECT DEFAULT PROPERTIES
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.containerDefaultSettingsLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropDefaultTextMeshProTextContainerSize, Styles.textMeshProLabel);
EditorGUILayout.PropertyField(m_PropDefaultTextMeshProUITextContainerSize, Styles.textMeshProUiLabel);
EditorGUILayout.PropertyField(m_PropAutoSizeTextContainer, Styles.autoSizeContainerLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
GUILayout.Label(Styles.textComponentDefaultSettingsLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropDefaultFontSize, Styles.defaultFontSize);
EditorGUILayout.BeginHorizontal();
{
EditorGUILayout.PrefixLabel(Styles.autoSizeRatioLabel);
EditorGUIUtility.labelWidth = 32;
EditorGUIUtility.fieldWidth = 10;
EditorGUI.indentLevel = 0;
EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMinRatio, Styles.minLabel);
EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMaxRatio, Styles.maxLabel);
EditorGUI.indentLevel = 1;
}
EditorGUILayout.EndHorizontal();
EditorGUIUtility.labelWidth = labelWidth;
EditorGUIUtility.fieldWidth = fieldWidth;
EditorGUILayout.PropertyField(m_PropWordWrapping, Styles.wordWrappingLabel);
EditorGUILayout.PropertyField(m_PropKerning, Styles.kerningLabel);
EditorGUILayout.PropertyField(m_PropExtraPadding, Styles.extraPaddingLabel);
EditorGUILayout.PropertyField(m_PropTintAllSprites, Styles.tintAllSpritesLabel);
EditorGUILayout.PropertyField(m_PropParseEscapeCharacters, Styles.parseEscapeCharactersLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// SPRITE ASSET
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.defaultSpriteAssetLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropSpriteAsset, Styles.defaultSpriteAssetLabel);
EditorGUILayout.PropertyField(m_PropEnableEmojiSupport, Styles.enableEmojiSupportLabel);
EditorGUILayout.PropertyField(m_PropSpriteAssetPath, Styles.spriteAssetsPathLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// STYLE SHEET
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.defaultStyleSheetLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(m_PropStyleSheet, Styles.defaultStyleSheetLabel);
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
TMP_StyleSheet.UpdateStyleSheet();
}
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// COLOR GRADIENT PRESETS
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.colorGradientPresetsLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropColorGradientPresetsPath, Styles.colorGradientsPathLabel);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
// LINE BREAKING RULE
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
GUILayout.Label(Styles.lineBreakingLabel, EditorStyles.boldLabel);
EditorGUI.indentLevel = 1;
EditorGUILayout.PropertyField(m_PropLeadingCharacters);
EditorGUILayout.PropertyField(m_PropFollowingCharacters);
EditorGUI.indentLevel = 0;
EditorGUILayout.Space();
EditorGUILayout.EndVertical();
if (serializedObject.ApplyModifiedProperties())
{
EditorUtility.SetDirty(target);
TMPro_EventManager.ON_TMP_SETTINGS_CHANGED();
}
}
#if UNITY_2018_3_OR_NEWER
[SettingsProvider]
static SettingsProvider CreateTMPSettingsProvider()
{
var provider = new AssetSettingsProvider("Project/TextMesh Pro", () => TMP_Settings.instance);
provider.PopulateSearchKeywordsFromGUIContentProperties<Styles>();
return provider;
}
#endif
}
}