/// <summary>
        /// Info String drawn at the bottom of the Preview
        /// </summary>
        public override string GetInfoString()
        {
            YuLegoImage image  = target as YuLegoImage;
            Sprite      sprite = image.sprite;

            int x = (sprite != null) ? Mathf.RoundToInt(sprite.rect.width) : 0;
            int y = (sprite != null) ? Mathf.RoundToInt(sprite.rect.height) : 0;

            return(string.Format("Image Size: {0}x{1}", x, y));
        }
        public static LegoImageMeta Create(YuLegoImage image)
        {
            var meta = new LegoImageMeta
            {
                SpriteId       = image.sprite == null ? null : image.sprite.name,
                LegoColor      = LegoColorMeta.Create(image.color),
                Material       = image.material == null ? null : image.material.name,
                RaycastTarget  = image.raycastTarget,
                ImageType      = image.type,
                FillMethod     = image.fillMethod,
                FillOriginType = image.fillOrigin,
                FillAmount     = image.fillAmount,
                Clockwise      = image.fillClockwise,
                PreserveAspect = image.preserveAspect,
            };

            return(meta);
        }
        /// <summary>
        /// Draw the Image preview.
        /// </summary>
        public override void OnPreviewGUI(Rect rect, GUIStyle background)
        {
            YuLegoImage image = target as YuLegoImage;

            if (image == null)
            {
                return;
            }

            Sprite sf = image.sprite;

            if (sf == null)
            {
                return;
            }

            YuLegoSpriteDrawUtility.DrawSprite(sf, rect, image.canvasRenderer.GetColor());
        }
        private static void InitPreviewObject()
        {
            Transform TextContent = previewObject.transform.Find
                                        ("Canvas/PreViewUI/Text_Content");
            YuLegoText preViewContent = TextContent.GetComponent <YuLegoText>();

            if (preViewContent == null)
            {
                preViewContent      = TextContent.gameObject.AddComponent <YuLegoText>();
                preViewContent.text = "文本内容";
            }

            Transform TextTitle = previewObject.transform.Find
                                      ("Canvas/PreViewUI/Text_Title");
            YuLegoText preViewTitle = TextTitle.GetComponent <YuLegoText>();

            if (preViewTitle == null)
            {
                preViewTitle      = TextTitle.gameObject.AddComponent <YuLegoText>();
                preViewTitle.text = "标题";
            }

            Transform TitleBgImage = previewObject.transform.Find
                                         ("Canvas/PreViewUI/Image_Title");
            YuLegoImage preViewTitleBg = TitleBgImage.GetComponent <YuLegoImage>();

            if (preViewTitleBg == null)
            {
                preViewTitleBg       = TitleBgImage.gameObject.AddComponent <YuLegoImage>();
                preViewTitleBg.Color = new Color(0.9f, 0.9f, 0.7f);
            }

            Transform ContentBgImage = previewObject.transform.Find
                                           ("Canvas/PreViewUI/Image_Content");
            YuLegoImage preViewContentBg = ContentBgImage.GetComponent <YuLegoImage>();

            if (preViewContentBg == null)
            {
                preViewContentBg     = ContentBgImage.gameObject.AddComponent <YuLegoImage>();
                preViewTitleBg.Color = new Color(0.4f, 0.4f, 0.4f);
            }
        }
        /// <summary>
        /// Sprites's custom properties based on the type.
        /// </summary>
        protected void TypeGUI()
        {
            EditorGUILayout.PropertyField(m_Type, m_SpriteTypeContent);

            ++EditorGUI.indentLevel;
            {
                var typeEnum = (YuLegoImage.Type)m_Type.enumValueIndex;

                bool showSlicedOrTiled = (!m_Type.hasMultipleDifferentValues &&
                                          (typeEnum == YuLegoImage.Type.Sliced || typeEnum == YuLegoImage.Type.Tiled));
                if (showSlicedOrTiled && targets.Length > 1)
                {
                    showSlicedOrTiled = targets.Select(obj => obj as YuLegoImage).All(img => img.hasBorder);
                }

                m_ShowSlicedOrTiled.target = showSlicedOrTiled;
                m_ShowSliced.target        = (showSlicedOrTiled && !m_Type.hasMultipleDifferentValues &&
                                              typeEnum == YuLegoImage.Type.Sliced);
                m_ShowTiled.target = (showSlicedOrTiled && !m_Type.hasMultipleDifferentValues &&
                                      typeEnum == YuLegoImage.Type.Tiled);
                m_ShowFilled.target = (!m_Type.hasMultipleDifferentValues && typeEnum == YuLegoImage.Type.Filled);

                YuLegoImage image = target as YuLegoImage;
                if (EditorGUILayout.BeginFadeGroup(m_ShowSlicedOrTiled.faded))
                {
                    if (image.hasBorder)
                    {
                        EditorGUILayout.PropertyField(m_FillCenter);
                    }
                }

                EditorGUILayout.EndFadeGroup();

                if (EditorGUILayout.BeginFadeGroup(m_ShowSliced.faded))
                {
                    if (image.sprite != null && !image.hasBorder)
                    {
                        EditorGUILayout.HelpBox("This Image doesn't have a border.", MessageType.Warning);
                    }
                }

                EditorGUILayout.EndFadeGroup();

                if (EditorGUILayout.BeginFadeGroup(m_ShowTiled.faded))
                {
                    if (image.sprite != null && !image.hasBorder &&
                        (image.sprite.texture.wrapMode != TextureWrapMode.Repeat || image.sprite.packed))
                    {
                        EditorGUILayout.HelpBox(
                            "It looks like you want to tile a sprite with no border. It would be more efficient to modify the Sprite properties, clear the Packing tag and set the Wrap mode to Repeat.",
                            MessageType.Warning);
                    }
                }

                EditorGUILayout.EndFadeGroup();

                if (EditorGUILayout.BeginFadeGroup(m_ShowFilled.faded))
                {
                    EditorGUI.BeginChangeCheck();
                    EditorGUILayout.PropertyField(m_FillMethod);
                    if (EditorGUI.EndChangeCheck())
                    {
                        m_FillOrigin.intValue = 0;
                    }

                    switch ((YuLegoImage.FillMethod)m_FillMethod.enumValueIndex)
                    {
                    case YuLegoImage.FillMethod.Horizontal:
                        m_FillOrigin.intValue =
                            (int)(YuLegoImage.OriginHorizontal)EditorGUILayout.EnumPopup("Fill Origin",
                                                                                         (YuLegoImage.OriginHorizontal)m_FillOrigin.intValue);
                        break;

                    case YuLegoImage.FillMethod.Vertical:
                        m_FillOrigin.intValue =
                            (int)(YuLegoImage.OriginVertical)EditorGUILayout.EnumPopup("Fill Origin",
                                                                                       (YuLegoImage.OriginVertical)m_FillOrigin.intValue);
                        break;

                    case YuLegoImage.FillMethod.Radial90:
                        m_FillOrigin.intValue =
                            (int)(YuLegoImage.Origin90)EditorGUILayout.EnumPopup("Fill Origin",
                                                                                 (YuLegoImage.Origin90)m_FillOrigin.intValue);
                        break;

                    case YuLegoImage.FillMethod.Radial180:
                        m_FillOrigin.intValue =
                            (int)(YuLegoImage.Origin180)EditorGUILayout.EnumPopup("Fill Origin",
                                                                                  (YuLegoImage.Origin180)m_FillOrigin.intValue);
                        break;

                    case YuLegoImage.FillMethod.Radial360:
                        m_FillOrigin.intValue =
                            (int)(YuLegoImage.Origin360)EditorGUILayout.EnumPopup("Fill Origin",
                                                                                  (YuLegoImage.Origin360)m_FillOrigin.intValue);
                        break;
                    }

                    EditorGUILayout.PropertyField(m_FillAmount);
                    if ((YuLegoImage.FillMethod)m_FillMethod.enumValueIndex > YuLegoImage.FillMethod.Vertical)
                    {
                        EditorGUILayout.PropertyField(m_FillClockwise, m_ClockwiseContent);
                    }
                }

                EditorGUILayout.EndFadeGroup();
            }
            --EditorGUI.indentLevel;
        }