using System; using System.Collections.Generic; using System.Text; using System.Xml; using CommonLang.Xml; using CommonLang; using UnityEngine.EventSystems; using UnityEngine; using CommonUnity3D.UGUI; using CommonUI.Data; using TextAnchor = CommonUI.Data.TextAnchor; using FontStyle = CommonUI.Data.FontStyle; namespace CommonUnity3D.UGUIEditor.UI { public class UETextButton : UIComponent { //---------------------------------------------------------------------------------------------- protected UGUI.DisplayText mTextSprite; protected UGUI.ImageSprite mImageTextUp; protected UGUI.ImageSprite mImageTextDown; protected Vector2 mImageTextOffset = new Vector2(); protected ImageAnchor mImageTextAnchor = ImageAnchor.C_C; protected readonly bool mUseBitmapFont; public UETextButton(bool use_bitmap) { this.mUseBitmapFont = use_bitmap; base.Enable = true; base.EnableChildren = false; base.IsInteractive = true; } public UETextButton() : this(UIEditor.GlobalUseBitmapText) { } protected override void OnStart() { if (mTextSprite == null) { if (mUseBitmapFont) { mTextSprite = new BitmapTextSprite("bitmap_text"); } else { mTextSprite = new TextSprite("text"); } } base.OnStart(); } //---------------------------------------------------------------------------------------------- public UILayout LayoutDown { get; set; } /// /// 是否正在被按下 /// public virtual bool IsPressDown { get { return base.IsPressed; } } public string Text { get; set; } public string TextDown { get; set; } public UnityEngine.Color FontColor { get; set; } public UnityEngine.Color FocuseFontColor { get; set; } public DisplayText TextSprite { get { return mTextSprite; } } public TextAnchor EditTextAnchor { get { return mTextSprite.Anchor; } set { this.mTextSprite.Anchor = value; } } public int FontSize { get { return mTextSprite.FontSize; } set { mTextSprite.FontSize = value; } } public ImageAnchor ImageTextAnchor { get { return mImageTextAnchor; } set { this.mImageTextAnchor = value; } } public Vector2 ImageTextOffset { get { return mImageTextOffset; } set { this.mImageTextOffset = value; } } public Vector2 TextOffset { get { return mTextSprite.TextOffset; } set { mTextSprite.TextOffset = value; } } //---------------------------------------------------------------------------------------------- protected override void OnUpdateLayout() { if (IsDispose) return; if (IsPressDown) { if (!string.IsNullOrEmpty(this.TextDown)) BindText(this.TextDown, this.FocuseFontColor); else BindText(this.Text, this.FocuseFontColor); if (mImageTextDown != null) { mImageTextDown.Visible = true; UIUtils.AdjustAnchor(mImageTextAnchor, this, mImageTextDown, mImageTextOffset); } if (mImageTextUp != null) { mImageTextUp.Visible = false; } if (LayoutDown != null) { mCurrentLayout.SetCurrentLayout(LayoutDown); } else { base.OnUpdateLayout(); } } else { BindText(this.Text, this.FontColor); if (mImageTextUp != null) { mImageTextUp.Visible = true; UIUtils.AdjustAnchor(mImageTextAnchor, this, mImageTextUp, mImageTextOffset); } if (mImageTextDown != null) { mImageTextDown.Visible = false; } base.OnUpdateLayout(); } } private void BindText(string text, Color color) { if (!string.IsNullOrEmpty(text)) { mTextSprite.Visible = true; mTextSprite.Size2D = this.Size2D; } else { mTextSprite.Visible = false; } if (text != mTextSprite.Text) { mTextSprite.Text = text; } if (color != mTextSprite.FontColor) { mTextSprite.FontColor = color; } } protected override void DecodeFields(UIEditor.Decoder editor, UIComponentMeta e) { base.DecodeFields(editor, e); this.LayoutDown = editor.CreateLayout((e as UEButtonMeta).layout_down); { var ue = (e as UEButtonMeta); this.Text = ue.text; this.TextDown = ue.textDown; this.FontColor = UIUtils.UInt32_ARGB_To_Color(ue.unfocusTextColor); this.FocuseFontColor = UIUtils.UInt32_ARGB_To_Color(ue.focusTextColor); if (mUseBitmapFont) { Decode_BitmapText(editor, ue); } else { Decode_Text(editor, ue); } this.mTextSprite.TextOffset = new Vector2(ue.text_offset_x, ue.text_offset_y); this.mTextSprite.Size2D = this.Size2D; } this.Decode_ImageText(editor, e as UEButtonMeta); } protected override void DecodeEnd(UIEditor.Decoder editor, UIComponentMeta e) { base.DecodeEnd(editor, e); this.EnableChildren = false; } private void Decode_Text(UIEditor.Decoder editor, UEButtonMeta e) { var text = new UGUI.TextSprite("text"); this.mTextSprite = text; this.AddChild(mTextSprite); text.Anchor = e.text_anchor; if (!string.IsNullOrEmpty(e.textFontName)) { text.SetTextFont(editor.CreateFont(e.textFontName), e.textFontSize, (UnityEngine.FontStyle)e.textFontStyle); } else { text.SetTextFont(editor.CreateFont(null), e.textFontSize, UnityEngine.FontStyle.Normal); } if (e.textFontSize > 0) { text.FontSize = e.textFontSize; } text.Graphics.resizeTextForBestFit = false; if (e.textBorderAlpha > 0) { Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor); border_color.a = e.textBorderAlpha / 100f; text.AddBorder(border_color, new Vector2(1, -1)); } } private void Decode_BitmapText(UIEditor.Decoder editor, UEButtonMeta e) { var text = new BitmapTextSprite("bitmap_text"); mTextSprite = text; AddChild(mTextSprite); text.Anchor = e.text_anchor; text.Style = e.textFontStyle; if (e.textFontSize > 0) { text.FontSize = e.textFontSize; } if (e.textBorderAlpha > 0) { Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor); border_color.a = e.textBorderAlpha / 100f; text.Graphics.BorderTime = TextBorderCount.Border; text.Graphics.BorderColor = border_color; } } private void Decode_ImageText(UIEditor.Decoder editor, UEButtonMeta e) { if (!string.IsNullOrEmpty(e.imageAtlasUp)) { this.mImageTextUp = editor.editor.ParseImageSpriteFromAtlas(e.imageAtlasUp, Vector2.zero); if (mImageTextUp != null) { this.AddChild(mImageTextUp); } } else if (!string.IsNullOrEmpty(e.imageTextUp)) { this.mImageTextUp = editor.editor.ParseImageSpriteFromImage(e.imageTextUp, Vector2.zero); if (mImageTextUp != null) { this.AddChild(mImageTextUp); } } if (!string.IsNullOrEmpty(e.imageAtlasDown)) { this.mImageTextDown = editor.editor.ParseImageSpriteFromAtlas(e.imageAtlasDown, Vector2.zero); if (mImageTextDown != null) { this.AddChild(mImageTextDown); } } else if (!string.IsNullOrEmpty(e.imageTextDown)) { this.mImageTextDown = editor.editor.ParseImageSpriteFromImage(e.imageTextDown, Vector2.zero); if (mImageTextDown != null) { this.AddChild(mImageTextDown); } } this.mImageTextAnchor = e.imageAnchor; this.mImageTextOffset.x = e.imageOffsetX; this.mImageTextOffset.y = e.imageOffsetY; } } public class UEToggleButton : UETextButton { private bool m_IsChecked = false; public UEToggleButton(bool use_bitmap) : base(use_bitmap) { } public UEToggleButton() : this(UIEditor.GlobalUseBitmapText) { } public override bool IsPressDown { get { return m_IsChecked; } } public virtual bool IsChecked { get { return m_IsChecked; } set { m_IsChecked = value; } } protected override void OnPointerClick(PointerEventData e) { base.OnPointerClick(e); this.m_IsChecked = !m_IsChecked; } protected override void DecodeFields(UIEditor.Decoder editor, UIComponentMeta e) { base.DecodeFields(editor, e); this.m_IsChecked = (e as UEToggleButtonMeta).isChecked; } } }