Ejemplo n.º 1
0
        private bool DrawCharInfoGUI(FontKerningSetting.CharInfo info)
        {
            var delete = false;

            using (new EditorGUILayout.HorizontalScope())
            {
                EditorGUI.BeginChangeCheck();

                var text = EditorGUILayout.DelayedTextField(info.character.ToString(), GUILayout.Width(50f));

                if (EditorGUI.EndChangeCheck())
                {
                    info.character = text.FirstOrDefault();
                }

                var originLabelWidth = EditorLayoutTools.SetLabelWidth(30f);

                info.leftSpace = EditorGUILayout.FloatField("◀▶", info.leftSpace, GUILayout.ExpandWidth(true));

                info.rightSpace = EditorGUILayout.FloatField("◀▶", info.rightSpace, GUILayout.ExpandWidth(true));

                EditorLayoutTools.SetLabelWidth(originLabelWidth);

                if (GUILayout.Button("-", EditorStyles.miniButton, GUILayout.Width(25f)))
                {
                    delete = true;
                }
            }

            return(delete);
        }
Ejemplo n.º 2
0
        //----- property -----

        //----- method -----

        public override void OnInspectorGUI()
        {
            instance = target as FontKerningSetting;

            var updated      = false;
            var deleteIndexs = new List <int>();

            var infos       = Reflection.GetPrivateField <FontKerningSetting, FontKerningSetting.CharInfo[]>(instance, "infos");
            var description = Reflection.GetPrivateField <FontKerningSetting, byte[]>(instance, "description");

            var list = infos != null?infos.ToList() : new List <FontKerningSetting.CharInfo>();

            if (applyTargets == null)
            {
                applyTargets = UnityUtility.FindObjectsOfType <TextSpacing>().ToArray();
            }

            //------ Font ------

            EditorGUILayout.Separator();

            EditorLayoutTools.Title("Font", HeaderColor);

            GUILayout.Space(2f);

            EditorGUI.BeginChangeCheck();

            var font = EditorGUILayout.ObjectField(instance.Font, typeof(Font), false);

            if (EditorGUI.EndChangeCheck())
            {
                list.Clear();
                updated = true;
            }

            GUILayout.Space(2f);

            //------ Characters ------

            if (font != null)
            {
                if (list.IsEmpty())
                {
                    EditorGUILayout.HelpBox("Press the + button if add info", MessageType.Info);
                }
                else
                {
                    EditorLayoutTools.Title("Character settings", HeaderColor);

                    GUILayout.Space(2f);

                    DrawCharInfoHeaderGUI(list.Count);

                    using (new ContentsScope())
                    {
                        using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(charInfoScrollPosition, GUILayout.Height(350f)))
                        {
                            for (var i = 0; i < list.Count; i++)
                            {
                                EditorGUI.BeginChangeCheck();

                                var delete = DrawCharInfoGUI(list[i]);

                                GUILayout.Space(2f);

                                if (EditorGUI.EndChangeCheck())
                                {
                                    var exist = list.Where(x => x.character != default(char))
                                                .Where(x => x != list[i])
                                                .Any(x => x.character == list[i].character);

                                    if (exist)
                                    {
                                        var title   = "Register failed";
                                        var message = string.Format("Char : {0} is already exists.", list[i].character);

                                        EditorUtility.DisplayDialog(title, message, "Close");

                                        list[i].character = default(char);
                                    }

                                    updated = true;
                                }

                                if (delete)
                                {
                                    deleteIndexs.Add(i);
                                }
                            }

                            charInfoScrollPosition = scrollViewScope.scrollPosition;
                        }
                    }

                    foreach (var index in deleteIndexs)
                    {
                        list.RemoveAt(index);
                    }
                }

                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.FlexibleSpace();

                    if (GUILayout.Button("+", EditorStyles.miniButton, GUILayout.Width(60f)))
                    {
                        var info = new FontKerningSetting.CharInfo();

                        list.Add(info);

                        updated = true;
                    }
                }
            }

            if (updated)
            {
                UnityEditorUtility.RegisterUndo("FontKerningSettingInspector Undo", instance);

                Reflection.SetPrivateField(instance, "font", font);
                Reflection.SetPrivateField(instance, "infos", list.Where(x => x != null).ToArray());
                Reflection.SetPrivateField(instance, "dictionary", (Dictionary <char, FontKerningSetting.CharInfo>)null);

                ApplyTextSpacing();
            }

            GUILayout.Space(2f);

            //------ Description ------

            EditorLayoutTools.Title("Description", HeaderColor);

            var textBytes       = description.Decrypt(CryptoKey);
            var descriptionText = textBytes != null?Encoding.UTF8.GetString(textBytes) : string.Empty;

            using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(descriptionScrollPosition, GUILayout.Height(60f)))
            {
                EditorGUI.BeginChangeCheck();

                descriptionText = EditorGUILayout.TextArea(descriptionText, GUILayout.MinHeight(40f));

                if (EditorGUI.EndChangeCheck())
                {
                    textBytes = Encoding.UTF8.GetBytes(descriptionText).Encrypt(CryptoKey);

                    Reflection.SetPrivateField(instance, "description", textBytes);
                }

                descriptionScrollPosition = scrollViewScope.scrollPosition;
            }
        }