// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using HoloToolkit.Unity; using System; using UnityEngine; namespace HoloToolkit.Unity.Buttons { public class ButtonTextProfile : ButtonProfile { [Header("Text Mesh Settings")] public TextAlignment Alignment = TextAlignment.Center; public TextAnchor Anchor = TextAnchor.MiddleCenter; public FontStyle Style = FontStyle.Normal; public int Size = 72; public Color Color = Color.white; public Font Font; // Used to reposition the text mesh object in addition to setting its anchor // This is useful when button text position will change dramatically based on the presence of other elements // e.g., bottom anchor will move the text out of the way of an icon [Header("Anchor Settings")] [HideInMRTKInspector] public Vector3 AnchorLowerCenterOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorLowerLeftOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorLowerRightOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorMiddleCenterOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorMiddleLeftOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorMiddleRightOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorUpperCenterOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorUpperLeftOffset = Vector3.zero; [HideInMRTKInspector] public Vector3 AnchorUpperRightOffset = Vector3.zero; /// <summary> /// Convenience function for getting the offset from an anchor setting /// </summary> /// <param name="anchor"></param> /// <returns></returns> public Vector3 GetOffset (TextAnchor anchor) { Vector3 offset; switch (anchor) { case TextAnchor.LowerCenter: offset = AnchorLowerCenterOffset; break; case TextAnchor.LowerLeft: offset = AnchorLowerLeftOffset; break; case TextAnchor.LowerRight: offset = AnchorLowerRightOffset; break; case TextAnchor.MiddleCenter: offset = AnchorMiddleCenterOffset; break; case TextAnchor.MiddleLeft: offset = AnchorMiddleLeftOffset; break; case TextAnchor.MiddleRight: offset = AnchorMiddleRightOffset; break; case TextAnchor.UpperCenter: offset = AnchorUpperCenterOffset; break; case TextAnchor.UpperLeft: offset = AnchorUpperLeftOffset; break; case TextAnchor.UpperRight: offset = AnchorUpperRightOffset; break; default: throw new ArgumentOutOfRangeException("anchor", anchor, null); } return offset; } #if UNITY_EDITOR [UnityEditor.CustomEditor(typeof(ButtonTextProfile))] public class CustomEditor : ProfileInspector { protected override void DrawCustomFooter() { ButtonTextProfile textProfile = (ButtonTextProfile)target; CompoundButtonText textButton = (CompoundButtonText)targetComponent; if (textButton == null || !textButton.OverrideOffset) { switch (textProfile.Anchor) { case TextAnchor.LowerCenter: textProfile.AnchorLowerCenterOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorLowerCenterOffset); break; case TextAnchor.LowerLeft: textProfile.AnchorLowerLeftOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorLowerLeftOffset); break; case TextAnchor.LowerRight: textProfile.AnchorLowerRightOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorLowerRightOffset); break; case TextAnchor.MiddleCenter: textProfile.AnchorMiddleCenterOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorMiddleCenterOffset); break; case TextAnchor.MiddleLeft: textProfile.AnchorMiddleLeftOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorMiddleLeftOffset); break; case TextAnchor.MiddleRight: textProfile.AnchorMiddleRightOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorMiddleRightOffset); break; case TextAnchor.UpperCenter: textProfile.AnchorUpperCenterOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorUpperCenterOffset); break; case TextAnchor.UpperLeft: textProfile.AnchorUpperLeftOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorUpperLeftOffset); break; case TextAnchor.UpperRight: textProfile.AnchorUpperRightOffset = UnityEditor.EditorGUILayout.Vector3Field("Anchor (" + textProfile.Anchor.ToString() + ")", textProfile.AnchorUpperRightOffset); break; } } } } #endif } }