123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- using CommonUI.Data;
- using CommonUI_Unity3D.Impl;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using UnityEngine;
- using UnityEngine.UI;
- namespace CommonUnity3D.UGUI
- {
-
- public class BitmapTextGraphics : UnityEngine.UI.MaskableGraphic, ITextComponent
- {
- private readonly UnityTextLayer mTextLayer;
- private DisplayNode mBinding;
- private UnityImage mSrc;
- private Texture2D mTexture;
- private bool m_IsRefresh = true;
- private Vector2 mPreferredSize = Vector2.zero;
- private Rect mLastCaretPosition = new Rect(0, 0, 0, 0);
- private bool mScrollToCaret = false;
- [SerializeField]
- private string m_Text;
- [SerializeField]
- private CommonUI.Data.TextAnchor m_Anchor = CommonUI.Data.TextAnchor.L_T;
- [SerializeField]
- private Vector2 m_TextOffset = Vector3.zero;
- [SerializeField]
- private int m_FontSize;
- [SerializeField]
- private CommonUI.Data.FontStyle m_FontStyle = CommonUI.Data.FontStyle.Normal;
- [SerializeField]
- private Color m_BorderColor = Color.black;
- [SerializeField]
- private Color m_FontColor = Color.white;
- [SerializeField]
- private CommonUI.Data.TextBorderCount m_BorderTimes = TextBorderCount.Null;
- [SerializeField]
- private bool m_IsUnderline = false;
- public override Texture mainTexture { get { return mTexture; } }
- public DisplayNode Binding { get { return mBinding; } }
- public string Text
- {
- get { return m_Text; }
- set
- {
- if (value == null) value = "";
- if (value != m_Text)
- {
- m_Text = value;
- m_IsRefresh = true;
- }
- }
- }
- public int FontSize
- {
- get { return m_FontSize; }
- set
- {
- if (value != m_FontSize)
- {
- m_FontSize = value;
- m_IsRefresh = true;
- }
- }
- }
- public UnityEngine.Color FontColor
- {
- get { return m_FontColor; }
- set
- {
- if (value != m_FontColor)
- {
- m_FontColor = value;
- m_IsRefresh = true;
- }
- }
- }
- public CommonUI.Data.FontStyle Style
- {
- get { return m_FontStyle; }
- set
- {
- if (value != m_FontStyle)
- {
- m_FontStyle = value;
- m_IsRefresh = true;
- }
- }
- }
- public bool IsUnderline
- {
- get { return m_IsUnderline; }
- set
- {
- if (value != m_IsUnderline)
- {
- m_IsUnderline = value;
- m_IsRefresh = true;
- }
- }
- }
- public CommonUI.Display.FontStyle LayerFontStyle
- {
- get { return mTextLayer.TextFontStyle; }
- set
- {
- if (value != mTextLayer.TextFontStyle)
- {
- m_FontStyle = UIUtils.ToFontStyle(value, out m_IsUnderline);
- m_IsRefresh = true;
- }
- }
- }
- public CommonUI.Data.TextBorderCount BorderTime
- {
- get { return m_BorderTimes; }
- set
- {
- if (value != m_BorderTimes)
- {
- m_BorderTimes = value;
- m_IsRefresh = true;
- }
- }
- }
- public Color BorderColor
- {
- get { return m_BorderColor; }
- set
- {
- if (value != m_BorderColor)
- {
- m_BorderColor = value;
- m_IsRefresh = true;
- }
- }
- }
- public CommonUI.Data.TextAnchor Anchor
- {
- get { return m_Anchor; }
- set
- {
- if (value != m_Anchor)
- {
- this.m_Anchor = value;
- base.SetVerticesDirty();
- }
- }
- }
- public Vector2 TextOffset
- {
- get { return m_TextOffset; }
- set
- {
- if (value != m_TextOffset)
- {
- this.m_TextOffset = value;
- base.SetVerticesDirty();
- }
- }
- }
- public void SetBorder(Color bc, Vector2 distance)
- {
- if (m_BorderTimes != TextBorderCount.Border || bc != m_BorderColor)
- {
- m_BorderColor = bc;
- m_BorderTimes = TextBorderCount.Border;
- m_IsRefresh = true;
- }
- }
- public void SetShadow(Color bc, Vector2 distance)
- {
- var value = UIUtils.ToTextShadowCount(distance);
- if (m_BorderTimes != value || bc != m_BorderColor)
- {
- m_BorderColor = bc;
- m_BorderTimes = value;
- m_IsRefresh = true;
- }
- }
- public void SetFont(Font font)
- {
- }
- public virtual Vector2 PreferredSize
- {
- get { return mPreferredSize; }
- }
- public virtual Rect LastCaretPosition
- {
- get { return mLastCaretPosition; }
- }
- public virtual bool AutoScrollToCaret
- {
- get { return mScrollToCaret; }
- set
- {
- if (mScrollToCaret != value)
- {
- mScrollToCaret = value;
- this.SetVerticesDirty();
- }
- }
- }
- public BitmapTextGraphics()
- {
- this.m_Text = "";
- this.m_FontSize = 16;
- this.mTextLayer = new UnityTextLayer("", CommonUI.Display.FontStyle.STYLE_PLAIN, m_FontSize);
- this.mTextLayer.FontColor = CommonUI.Display.Color.COLOR_WHITE;
- this.mTextLayer.BorderColor = CommonUI.Display.Color.COLOR_BLACK;
- this.mTextLayer.BorderTime = 0;
- this.material = null;
- }
- protected override void OnDestroy()
- {
- mTextLayer.Dispose();
- base.OnDestroy();
- }
- public void Apply()
- {
- m_IsRefresh = true;
- }
- private void Refresh()
- {
- mTextLayer.Text = m_Text;
- mTextLayer.FontSize = m_FontSize;
- mTextLayer.TextFontStyle = UIUtils.ToTextLayerFontStyle(m_FontStyle, m_IsUnderline);
- mTextLayer.FontColor = UIUtils.Color_To_UInt32_RGBA(m_FontColor);
- mTextLayer.BorderColor = UIUtils.Color_To_UInt32_RGBA(m_BorderColor);
- mTextLayer.BorderTime = (int)m_BorderTimes;
- this.mSrc = this.mTextLayer.GetBuffer() as UnityImage;
- if (mSrc != null)
- {
- this.mPreferredSize = new Vector2(this.mSrc.Width, this.mSrc.Height);
- this.mTexture = this.mSrc.Texture2D;
- this.material = this.mSrc.TextureMaterial;
- }
- else
- {
- this.mPreferredSize = Vector2.zero;
- this.mTexture = null;
- this.material = null;
- }
- SetAllDirty();
- }
- protected override void Start()
- {
- this.mBinding = DisplayNode.AsDisplayNode(gameObject);
- base.Start();
- if (m_IsRefresh)
- {
- m_IsRefresh = false;
- Refresh();
- }
- }
- protected virtual void Update()
- {
- if (mSrc != null && mSrc.Texture2D != mTexture)
- {
- m_IsRefresh = true;
- }
- if (m_IsRefresh)
- {
- m_IsRefresh = false;
- Refresh();
- }
- }
- protected override void OnPopulateMesh(VertexHelper vh)
- {
- vh.Clear();
- Rect bounds = new Rect(0, 0, mPreferredSize.x, mPreferredSize.y);
- UIUtils.AdjustAnchor(m_Anchor, rectTransform.sizeDelta, ref bounds);
- bounds.position += m_TextOffset;
- if (mSrc != null)
- {
- Vector2 src_pos = new Vector2(0, 0);
- if (mScrollToCaret)
- {
- float dw = bounds.width - Binding.Width;
- if (dw > 0)
- {
- src_pos.x += dw;
- bounds.width -= dw;
- }
- }
- UIUtils.CreateVertexQuard(this.mSrc, color, src_pos.x, src_pos.y, bounds.x, bounds.y, bounds.width, bounds.height, vh);
- this.mLastCaretPosition.height = bounds.height;
- this.mLastCaretPosition.width = UIFactory.Instance.DefaultCaretSize.x;
- this.mLastCaretPosition.y = 0;
- this.mLastCaretPosition.x = bounds.x + bounds.width;
- }
- else
- {
- this.mLastCaretPosition.y = 0;
- this.mLastCaretPosition.x = bounds.x;
- this.mLastCaretPosition.size = UIFactory.Instance.DefaultCaretSize;
- }
- }
- public virtual void CalculateLayoutInputHorizontal()
- {
- }
- public virtual void CalculateLayoutInputVertical()
- {
- }
- public override bool Raycast(Vector2 sp, Camera eventCamera)
- {
- if (mBinding.Enable && mBinding.EnableTouchInParents)
- {
- return base.Raycast(sp, eventCamera);
- }
- return false;
- }
-
- }
- }
|