UETextButton.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Xml;
  5. using CommonLang.Xml;
  6. using CommonLang;
  7. using UnityEngine.EventSystems;
  8. using UnityEngine;
  9. using CommonUnity3D.UGUI;
  10. using CommonUI.Data;
  11. using TextAnchor = CommonUI.Data.TextAnchor;
  12. using FontStyle = CommonUI.Data.FontStyle;
  13. namespace CommonUnity3D.UGUIEditor.UI
  14. {
  15. public class UETextButton : UIComponent
  16. {
  17. //----------------------------------------------------------------------------------------------
  18. protected UGUI.DisplayText mTextSprite;
  19. protected UGUI.ImageSprite mImageTextUp;
  20. protected UGUI.ImageSprite mImageTextDown;
  21. protected Vector2 mImageTextOffset = new Vector2();
  22. protected ImageAnchor mImageTextAnchor = ImageAnchor.C_C;
  23. protected readonly bool mUseBitmapFont;
  24. public UETextButton(bool use_bitmap)
  25. {
  26. this.mUseBitmapFont = use_bitmap;
  27. base.Enable = true;
  28. base.EnableChildren = false;
  29. base.IsInteractive = true;
  30. }
  31. public UETextButton() : this(UIEditor.GlobalUseBitmapText)
  32. {
  33. }
  34. protected override void OnStart()
  35. {
  36. if (mTextSprite == null)
  37. {
  38. if (mUseBitmapFont)
  39. {
  40. mTextSprite = new BitmapTextSprite("bitmap_text");
  41. }
  42. else
  43. {
  44. mTextSprite = new TextSprite("text");
  45. }
  46. }
  47. base.OnStart();
  48. }
  49. //----------------------------------------------------------------------------------------------
  50. public UILayout LayoutDown { get; set; }
  51. /// <summary>
  52. /// 是否正在被按下
  53. /// </summary>
  54. public virtual bool IsPressDown { get { return base.IsPressed; } }
  55. public string Text { get; set; }
  56. public string TextDown { get; set; }
  57. public UnityEngine.Color FontColor { get; set; }
  58. public UnityEngine.Color FocuseFontColor { get; set; }
  59. public DisplayText TextSprite
  60. {
  61. get { return mTextSprite; }
  62. }
  63. public TextAnchor EditTextAnchor
  64. {
  65. get { return mTextSprite.Anchor; }
  66. set { this.mTextSprite.Anchor = value; }
  67. }
  68. public int FontSize
  69. {
  70. get { return mTextSprite.FontSize; }
  71. set { mTextSprite.FontSize = value; }
  72. }
  73. public ImageAnchor ImageTextAnchor
  74. {
  75. get { return mImageTextAnchor; }
  76. set { this.mImageTextAnchor = value; }
  77. }
  78. public Vector2 ImageTextOffset
  79. {
  80. get { return mImageTextOffset; }
  81. set { this.mImageTextOffset = value; }
  82. }
  83. public Vector2 TextOffset
  84. {
  85. get { return mTextSprite.TextOffset; }
  86. set { mTextSprite.TextOffset = value; }
  87. }
  88. //----------------------------------------------------------------------------------------------
  89. protected override void OnUpdateLayout()
  90. {
  91. if (IsDispose) return;
  92. if (IsPressDown)
  93. {
  94. if (!string.IsNullOrEmpty(this.TextDown))
  95. BindText(this.TextDown, this.FocuseFontColor);
  96. else
  97. BindText(this.Text, this.FocuseFontColor);
  98. if (mImageTextDown != null)
  99. {
  100. mImageTextDown.Visible = true;
  101. UIUtils.AdjustAnchor(mImageTextAnchor, this, mImageTextDown, mImageTextOffset);
  102. }
  103. if (mImageTextUp != null)
  104. {
  105. mImageTextUp.Visible = false;
  106. }
  107. if (LayoutDown != null)
  108. {
  109. mCurrentLayout.SetCurrentLayout(LayoutDown);
  110. }
  111. else
  112. {
  113. base.OnUpdateLayout();
  114. }
  115. }
  116. else
  117. {
  118. BindText(this.Text, this.FontColor);
  119. if (mImageTextUp != null)
  120. {
  121. mImageTextUp.Visible = true;
  122. UIUtils.AdjustAnchor(mImageTextAnchor, this, mImageTextUp, mImageTextOffset);
  123. }
  124. if (mImageTextDown != null)
  125. {
  126. mImageTextDown.Visible = false;
  127. }
  128. base.OnUpdateLayout();
  129. }
  130. }
  131. private void BindText(string text, Color color)
  132. {
  133. if (!string.IsNullOrEmpty(text))
  134. {
  135. mTextSprite.Visible = true;
  136. mTextSprite.Size2D = this.Size2D;
  137. }
  138. else
  139. {
  140. mTextSprite.Visible = false;
  141. }
  142. if (text != mTextSprite.Text)
  143. {
  144. mTextSprite.Text = text;
  145. }
  146. if (color != mTextSprite.FontColor)
  147. {
  148. mTextSprite.FontColor = color;
  149. }
  150. }
  151. protected override void DecodeFields(UIEditor.Decoder editor, UIComponentMeta e)
  152. {
  153. base.DecodeFields(editor, e);
  154. this.LayoutDown = editor.CreateLayout((e as UEButtonMeta).layout_down);
  155. {
  156. var ue = (e as UEButtonMeta);
  157. this.Text = ue.text;
  158. this.TextDown = ue.textDown;
  159. this.FontColor = UIUtils.UInt32_ARGB_To_Color(ue.unfocusTextColor);
  160. this.FocuseFontColor = UIUtils.UInt32_ARGB_To_Color(ue.focusTextColor);
  161. if (mUseBitmapFont)
  162. {
  163. Decode_BitmapText(editor, ue);
  164. }
  165. else
  166. {
  167. Decode_Text(editor, ue);
  168. }
  169. this.mTextSprite.TextOffset = new Vector2(ue.text_offset_x, ue.text_offset_y);
  170. this.mTextSprite.Size2D = this.Size2D;
  171. }
  172. this.Decode_ImageText(editor, e as UEButtonMeta);
  173. }
  174. protected override void DecodeEnd(UIEditor.Decoder editor, UIComponentMeta e)
  175. {
  176. base.DecodeEnd(editor, e);
  177. this.EnableChildren = false;
  178. }
  179. private void Decode_Text(UIEditor.Decoder editor, UEButtonMeta e)
  180. {
  181. var text = new UGUI.TextSprite("text");
  182. this.mTextSprite = text;
  183. this.AddChild(mTextSprite);
  184. text.Anchor = e.text_anchor;
  185. if (!string.IsNullOrEmpty(e.textFontName))
  186. {
  187. text.SetTextFont(editor.CreateFont(e.textFontName), e.textFontSize, (UnityEngine.FontStyle)e.textFontStyle);
  188. }
  189. else
  190. {
  191. text.SetTextFont(editor.CreateFont(null), e.textFontSize, UnityEngine.FontStyle.Normal);
  192. }
  193. if (e.textFontSize > 0)
  194. {
  195. text.FontSize = e.textFontSize;
  196. }
  197. text.Graphics.resizeTextForBestFit = false;
  198. if (e.textBorderAlpha > 0)
  199. {
  200. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  201. border_color.a = e.textBorderAlpha / 100f;
  202. text.AddBorder(border_color, new Vector2(1, -1));
  203. }
  204. }
  205. private void Decode_BitmapText(UIEditor.Decoder editor, UEButtonMeta e)
  206. {
  207. var text = new BitmapTextSprite("bitmap_text");
  208. mTextSprite = text;
  209. AddChild(mTextSprite);
  210. text.Anchor = e.text_anchor;
  211. text.Style = e.textFontStyle;
  212. if (e.textFontSize > 0)
  213. {
  214. text.FontSize = e.textFontSize;
  215. }
  216. if (e.textBorderAlpha > 0)
  217. {
  218. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  219. border_color.a = e.textBorderAlpha / 100f;
  220. text.Graphics.BorderTime = TextBorderCount.Border;
  221. text.Graphics.BorderColor = border_color;
  222. }
  223. }
  224. private void Decode_ImageText(UIEditor.Decoder editor, UEButtonMeta e)
  225. {
  226. if (!string.IsNullOrEmpty(e.imageAtlasUp))
  227. {
  228. this.mImageTextUp = editor.editor.ParseImageSpriteFromAtlas(e.imageAtlasUp, Vector2.zero);
  229. if (mImageTextUp != null)
  230. {
  231. this.AddChild(mImageTextUp);
  232. }
  233. }
  234. else if (!string.IsNullOrEmpty(e.imageTextUp))
  235. {
  236. this.mImageTextUp = editor.editor.ParseImageSpriteFromImage(e.imageTextUp, Vector2.zero);
  237. if (mImageTextUp != null)
  238. {
  239. this.AddChild(mImageTextUp);
  240. }
  241. }
  242. if (!string.IsNullOrEmpty(e.imageAtlasDown))
  243. {
  244. this.mImageTextDown = editor.editor.ParseImageSpriteFromAtlas(e.imageAtlasDown, Vector2.zero);
  245. if (mImageTextDown != null)
  246. {
  247. this.AddChild(mImageTextDown);
  248. }
  249. }
  250. else if (!string.IsNullOrEmpty(e.imageTextDown))
  251. {
  252. this.mImageTextDown = editor.editor.ParseImageSpriteFromImage(e.imageTextDown, Vector2.zero);
  253. if (mImageTextDown != null)
  254. {
  255. this.AddChild(mImageTextDown);
  256. }
  257. }
  258. this.mImageTextAnchor = e.imageAnchor;
  259. this.mImageTextOffset.x = e.imageOffsetX;
  260. this.mImageTextOffset.y = e.imageOffsetY;
  261. }
  262. }
  263. public class UEToggleButton : UETextButton
  264. {
  265. private bool m_IsChecked = false;
  266. public UEToggleButton(bool use_bitmap) : base(use_bitmap)
  267. {
  268. }
  269. public UEToggleButton() : this(UIEditor.GlobalUseBitmapText)
  270. {
  271. }
  272. public override bool IsPressDown { get { return m_IsChecked; } }
  273. public virtual bool IsChecked
  274. {
  275. get { return m_IsChecked; }
  276. set { m_IsChecked = value; }
  277. }
  278. protected override void OnPointerClick(PointerEventData e)
  279. {
  280. base.OnPointerClick(e);
  281. this.m_IsChecked = !m_IsChecked;
  282. }
  283. protected override void DecodeFields(UIEditor.Decoder editor, UIComponentMeta e)
  284. {
  285. base.DecodeFields(editor, e);
  286. this.m_IsChecked = (e as UEToggleButtonMeta).isChecked;
  287. }
  288. }
  289. }