UETextComponent.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. using CommonLang.Xml;
  2. using CommonUnity3D.UGUI;
  3. using System;
  4. using System.Xml;
  5. using UnityEngine;
  6. using CommonUI.Data;
  7. using TextAnchor = CommonUI.Data.TextAnchor;
  8. using FontStyle = CommonUI.Data.FontStyle;
  9. using CommonUI.Cell;
  10. using CommonLang.Property;
  11. namespace CommonUnity3D.UGUIEditor.UI
  12. {
  13. public abstract class UETextComponent : UIComponent
  14. {
  15. protected DisplayText mTextSprite;
  16. protected ITextComponent mTextGraphics;
  17. protected readonly bool mUseBitmapFont;
  18. protected UETextComponent(bool use_bitmap)
  19. {
  20. this.mUseBitmapFont = use_bitmap;
  21. }
  22. public DisplayText TextSprite
  23. {
  24. get { return mTextSprite; }
  25. }
  26. public ITextComponent TextGraphics
  27. {
  28. get { return mTextGraphics; }
  29. }
  30. public virtual bool IsNoLayout
  31. {
  32. get
  33. {
  34. if (MetaData != null)
  35. {
  36. if (MetaData.Layout == null || MetaData.Layout.Style == UILayoutStyle.NULL)
  37. {
  38. return true;
  39. }
  40. return false;
  41. }
  42. return Layout != null;
  43. }
  44. }
  45. //-------------------------------------------------------------------------------------------------------
  46. public string Text
  47. {
  48. get
  49. {
  50. if (mTextGraphics != null)
  51. return mTextGraphics.Text;
  52. else
  53. return mTextSprite.Text;
  54. }
  55. set
  56. {
  57. if (IsDispose) return;
  58. if (value != this.Text)
  59. {
  60. if (mTextGraphics != null)
  61. mTextGraphics.Text = value;
  62. else
  63. mTextSprite.Text = value;
  64. DoTextChanged();
  65. }
  66. }
  67. }
  68. public TextAnchor EditTextAnchor
  69. {
  70. get
  71. {
  72. if (mTextGraphics != null)
  73. return mTextGraphics.Anchor;
  74. else
  75. return mTextSprite.Anchor;
  76. }
  77. set
  78. {
  79. if (mTextGraphics != null)
  80. mTextGraphics.Anchor = value;
  81. else
  82. mTextSprite.Anchor = value;
  83. }
  84. }
  85. public int FontSize
  86. {
  87. get
  88. {
  89. if (mTextGraphics != null)
  90. return mTextGraphics.FontSize;
  91. else
  92. return mTextSprite.FontSize;
  93. }
  94. set
  95. {
  96. if (mTextGraphics != null)
  97. mTextGraphics.FontSize = value;
  98. else
  99. mTextSprite.FontSize = value;
  100. }
  101. }
  102. public UnityEngine.Color FontColor
  103. {
  104. get
  105. {
  106. if (mTextGraphics != null)
  107. return mTextGraphics.FontColor;
  108. else
  109. return mTextSprite.FontColor;
  110. }
  111. set
  112. {
  113. if (mTextGraphics != null)
  114. mTextGraphics.FontColor = value;
  115. else
  116. mTextSprite.FontColor = value;
  117. }
  118. }
  119. public Vector2 TextOffset
  120. {
  121. get
  122. {
  123. if (mTextGraphics != null)
  124. return mTextGraphics.TextOffset;
  125. else
  126. return mTextSprite.TextOffset;
  127. }
  128. set
  129. {
  130. if (mTextGraphics != null)
  131. mTextGraphics.TextOffset = value;
  132. else
  133. mTextSprite.TextOffset = value;
  134. }
  135. }
  136. public Vector2 PreferredSize
  137. {
  138. get
  139. {
  140. if (mTextGraphics != null)
  141. return mTextGraphics.PreferredSize;
  142. else
  143. return mTextSprite.PreferredSize;
  144. }
  145. }
  146. public void SetBorder(UnityEngine.Color bc, Vector2 distance)
  147. {
  148. if (mTextGraphics != null)
  149. mTextGraphics.SetBorder(bc, distance);
  150. else
  151. mTextSprite.SetBorder(bc, distance);
  152. }
  153. //-------------------------------------------------------------------------------------------------------
  154. protected override UILayoutGraphics GenLayoutGraphics()
  155. {
  156. if (IsNoLayout) return null;
  157. return base.GenLayoutGraphics();
  158. }
  159. protected override void OnStart()
  160. {
  161. base.OnStart();
  162. this.DoTextChanged();
  163. }
  164. protected override void OnUpdate()
  165. {
  166. base.OnUpdate();
  167. if (mTextSprite != null)
  168. {
  169. mTextSprite.Size2D = this.Size2D;
  170. }
  171. }
  172. protected override void DecodeEnd(UIEditor.Decoder editor, UIComponentMeta e)
  173. {
  174. base.DecodeEnd(editor, e);
  175. var ue = e as UETextComponentMeta;
  176. if (IsNoLayout)
  177. {
  178. //无底图//
  179. if (!string.IsNullOrEmpty(ue.ImageFont))
  180. {
  181. this.Decode_ImageFontGraphics(editor, ue);
  182. }
  183. else if (mUseBitmapFont)
  184. {
  185. this.Decode_BitmapTextGraphics(editor, ue);
  186. }
  187. else
  188. {
  189. this.Decode_TextGraphics(editor, ue);
  190. }
  191. this.mTextGraphics.Text = ue.text;
  192. this.mTextGraphics.TextOffset = new Vector2(ue.text_offset_x, ue.text_offset_y);
  193. this.mTextGraphics.Anchor = ue.text_anchor;
  194. this.mTextGraphics.FontColor = UIUtils.UInt32_ARGB_To_Color(ue.textColor);
  195. }
  196. else
  197. {
  198. //有底图//
  199. if (!string.IsNullOrEmpty(ue.ImageFont))
  200. {
  201. this.Decode_ImageFont(editor, ue);
  202. }
  203. else if (mUseBitmapFont)
  204. {
  205. this.Decode_BitmapText(editor, ue);
  206. }
  207. else
  208. {
  209. this.Decode_Text(editor, ue);
  210. }
  211. this.mTextSprite.Text = ue.text;
  212. this.mTextSprite.TextOffset = new Vector2(ue.text_offset_x, ue.text_offset_y);
  213. this.mTextSprite.Anchor = ue.text_anchor;
  214. this.mTextSprite.FontColor = UIUtils.UInt32_ARGB_To_Color(ue.textColor);
  215. this.mTextSprite.Size2D = this.Size2D;
  216. }
  217. this.Enable = false;
  218. this.EnableChildren = false;
  219. }
  220. private void Decode_Text(UIEditor.Decoder editor, UETextComponentMeta e)
  221. {
  222. var text = new TextSprite("text");
  223. mTextSprite = text;
  224. AddChild(mTextSprite);
  225. text.Graphics.horizontalOverflow = HorizontalWrapMode.Overflow;
  226. text.Graphics.verticalOverflow = VerticalWrapMode.Overflow;
  227. if (e.textFontSize > 0)
  228. {
  229. text.FontSize = e.textFontSize;
  230. text.Graphics.resizeTextForBestFit = false;
  231. }
  232. else
  233. {
  234. text.Graphics.resizeTextForBestFit = true;
  235. }
  236. if (!string.IsNullOrEmpty(e.textFontName))
  237. {
  238. text.SetTextFont(editor.CreateFont(e.textFontName), this.FontSize, (UnityEngine.FontStyle)e.textFontStyle);
  239. }
  240. if (e.textBorderAlpha > 0)
  241. {
  242. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  243. border_color.a = e.textBorderAlpha / 100f;
  244. text.AddBorder(border_color, new Vector2(1, -1));
  245. }
  246. }
  247. private void Decode_ImageFont(UIEditor.Decoder editor, UETextComponentMeta e)
  248. {
  249. var text = new ImageFontSprite("image_font");
  250. mTextSprite = text;
  251. AddChild(mTextSprite);
  252. editor.editor.ParseImageFont(e.ImageFont, e.text, text.Graphics);
  253. }
  254. private void Decode_BitmapText(UIEditor.Decoder editor, UETextComponentMeta e)
  255. {
  256. var text = new BitmapTextSprite("bitmap_text");
  257. mTextSprite = text;
  258. AddChild(mTextSprite);
  259. text.Anchor = e.text_anchor;
  260. text.Style = e.textFontStyle;
  261. text.FontColor = UIUtils.UInt32_ARGB_To_Color(e.textColor);
  262. if (e.textFontSize > 0)
  263. {
  264. text.FontSize = e.textFontSize;
  265. }
  266. if (e.textBorderAlpha > 0)
  267. {
  268. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  269. border_color.a = e.textBorderAlpha / 100f;
  270. text.Graphics.BorderTime = TextBorderCount.Border;
  271. text.Graphics.BorderColor = border_color;
  272. }
  273. }
  274. private void Decode_TextGraphics(UIEditor.Decoder editor, UETextComponentMeta e)
  275. {
  276. var gfx = base.mGameObject.AddComponent<TextGraphics>();
  277. this.mTextGraphics = gfx;
  278. if (e.textFontSize > 0)
  279. {
  280. gfx.FontSize = e.textFontSize;
  281. gfx.resizeTextForBestFit = false;
  282. }
  283. else
  284. {
  285. gfx.resizeTextForBestFit = true;
  286. }
  287. if (!string.IsNullOrEmpty(e.textFontName))
  288. {
  289. gfx.SetTextFont(editor.CreateFont(e.textFontName), this.FontSize, (UnityEngine.FontStyle)e.textFontStyle);
  290. }
  291. gfx.FontColor = UIUtils.UInt32_ARGB_To_Color(e.textColor);
  292. if (e.textBorderAlpha > 0)
  293. {
  294. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  295. border_color.a = e.textBorderAlpha / 100f;
  296. gfx.AddBorder(border_color, new Vector2(1, -1));
  297. }
  298. }
  299. private void Decode_BitmapTextGraphics(UIEditor.Decoder editor, UETextComponentMeta e)
  300. {
  301. var gfx = mGameObject.AddComponent<BitmapTextGraphics>();
  302. this.mTextGraphics = gfx;
  303. gfx.Style = e.textFontStyle;
  304. if (e.textFontSize > 0)
  305. {
  306. gfx.FontSize = e.textFontSize;
  307. }
  308. gfx.FontColor = UIUtils.UInt32_ARGB_To_Color(e.textColor);
  309. if (e.textBorderAlpha > 0)
  310. {
  311. Color border_color = UIUtils.UInt32_ARGB_To_Color(e.textBorderColor);
  312. border_color.a = e.textBorderAlpha / 100f;
  313. gfx.BorderTime = TextBorderCount.Border;
  314. gfx.BorderColor = border_color;
  315. }
  316. }
  317. private void Decode_ImageFontGraphics(UIEditor.Decoder editor, UETextComponentMeta e)
  318. {
  319. var gfx = base.mGameObject.AddComponent<ImageFontGraphics>();
  320. this.mTextGraphics = gfx;
  321. editor.editor.ParseImageFont(e.ImageFont, this.Text, gfx);
  322. }
  323. //-----------------------------------------------------------------------------------------------
  324. protected override void OnDisposeEvents()
  325. {
  326. base.OnDisposeEvents();
  327. event_TextChanged = null;
  328. }
  329. private void DoTextChanged()
  330. {
  331. if (event_TextChanged != null)
  332. {
  333. event_TextChanged.Invoke(this, Text);
  334. }
  335. }
  336. public delegate void TextChangedHandler(UETextComponent sender, string value);
  337. [Desc("值改变")]
  338. public TextChangedHandler event_TextChanged;
  339. [Desc("值改变")]
  340. public event TextChangedHandler TextChanged { add { event_TextChanged += value; } remove { event_TextChanged -= value; } }
  341. }
  342. }