using UnityEngine;
using UnityEditor;
using System.Collections;
namespace TMPro.EditorUtilities
{
[CustomPropertyDrawer(typeof(KerningPair))]
public class KerningPairDrawer : PropertyDrawer
{
private bool isEditingEnabled = false;
private bool isSelectable = false;
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
SerializedProperty prop_FirstGlyph = property.FindPropertyRelative("m_FirstGlyph");
SerializedProperty prop_FirstGlyphAdjustment = property.FindPropertyRelative("m_FirstGlyphAdjustments");
SerializedProperty prop_SecondGlyph = property.FindPropertyRelative("m_SecondGlyph");
SerializedProperty prop_SecondGlyphAdjustment = property.FindPropertyRelative("m_SecondGlyphAdjustments");
position.yMin += 2;
// We get Rect since a valid position may not be provided by the caller.
GUILayoutUtility.GetRect(position.width, 45);
float width = position.width / 2;
float padding = 5.0f;
Rect rect;
isEditingEnabled = GUI.enabled;
isSelectable = label.text == "Selectable" ? true : false;
// First Glyph
GUI.enabled = isEditingEnabled;
if (isSelectable)
{
bool prevGuiState = GUI.enabled;
GUI.enabled = true;
rect = new Rect(position.x, position.y, 40, 18);
EditorGUI.LabelField(rect, "Char:", TMP_UIStyleManager.label);
rect = new Rect(position.x + 35f, position.y, 30, 18);
EditorGUI.LabelField(rect, "" + (char)prop_FirstGlyph.intValue + "", TMP_UIStyleManager.label);
// Display ASCII decimal value
rect = new Rect(position.x + 60f, position.y, 30, 18);
EditorGUI.LabelField(rect, "ID:", TMP_UIStyleManager.label);
rect = new Rect(position.x + 80f, position.y, 40, 18);
EditorGUI.LabelField(rect, "" + prop_FirstGlyph.intValue + "", TMP_UIStyleManager.label);
GUI.enabled = prevGuiState;
}
else
{
rect = new Rect(position.x, position.y, width / 2 * 0.8f - padding, 18);
string glyph = EditorGUI.TextArea(rect, "" + (char)prop_FirstGlyph.intValue);
if (GUI.changed && glyph != "")
{
GUI.changed = false;
prop_FirstGlyph.intValue = glyph[0];
}
rect.x += width / 2 * 0.8f;
EditorGUI.PropertyField(rect, prop_FirstGlyph, GUIContent.none);
}
GUI.enabled = isEditingEnabled;
EditorGUIUtility.labelWidth = 25f;
rect = new Rect(position.x, position.y + 20, width * 0.5f - padding, 18);
EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("xPlacement"), new GUIContent("OX"));
rect.x += width * 0.5f;
EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("yPlacement"), new GUIContent("OY"));
rect.x = position.x;
rect.y += 20;
EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("xAdvance"), new GUIContent("AX"));
//rect.x += width * 0.5f;
//EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("yAdvance"), new GUIContent("AY"));
// Second Glyph
GUI.enabled = isEditingEnabled;
if (isSelectable)
{
bool prevGuiState = GUI.enabled;
GUI.enabled = true;
rect = new Rect(position.width / 2 + 20, position.y, 40f, 18);
EditorGUI.LabelField(rect, "Char:", TMP_UIStyleManager.label);
rect = new Rect(rect.x + 35f, position.y, 30, 18);
EditorGUI.LabelField(rect, "" + (char)prop_SecondGlyph.intValue + "", TMP_UIStyleManager.label);
// Display ASCII decimal value
rect = new Rect(rect.x + 25f, position.y, 30, 18);
EditorGUI.LabelField(rect, "ID:", TMP_UIStyleManager.label);
rect = new Rect(rect.x + 20f, position.y, 40, 18);
EditorGUI.LabelField(rect, "" + prop_SecondGlyph.intValue + "", TMP_UIStyleManager.label);
GUI.enabled = prevGuiState;
}
else
{
rect = new Rect(position.width / 2 + 20, position.y, width / 2 * 0.8f - padding, 18);
string glyph = EditorGUI.TextArea(rect, "" + (char)prop_SecondGlyph.intValue);
if (GUI.changed && glyph != "")
{
GUI.changed = false;
prop_SecondGlyph.intValue = glyph[0];
}
rect.x += width / 2 * 0.8f;
EditorGUI.PropertyField(rect, prop_SecondGlyph, GUIContent.none);
}
GUI.enabled = isEditingEnabled;
EditorGUIUtility.labelWidth = 25f;
rect = new Rect(position.width / 2 + 20, position.y + 20, width * 0.5f - padding, 18);
EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("xPlacement"), new GUIContent("OX"));
rect.x += width * 0.5f;
EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("yPlacement"), new GUIContent("OY"));
rect.x = position.width / 2 + 20;
rect.y += 20;
EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("xAdvance"), new GUIContent("AX"));
//rect.x += width * 0.5f;
//EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("yAdvance"), new GUIContent("AY"));
}
}
}