DisplayRoot.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using UnityEngine;
  6. namespace CommonUnity3D.UGUI
  7. {
  8. public class DisplayRoot : DisplayNode
  9. {
  10. private Canvas mCanvas;
  11. private RectTransform mCanvasTransform;
  12. public Canvas RootCanvas { get { return mCanvas; } }
  13. private CavaseMonoBehaviour canvasBehaviour;
  14. public DisplayRoot(Canvas canvas, string name = "") : base(name)
  15. {
  16. this.mCanvas = canvas;
  17. this.mCanvasTransform = canvas.GetComponent<RectTransform>();
  18. this.mTransform.SetParent(canvas.gameObject.transform);
  19. this.mGameObject.SetActive(true);
  20. this.EnableChildren = true;
  21. this.mTransform.localScale = Vector3.one;
  22. this.mTransform.localRotation = Quaternion.identity;
  23. this.UpdateSize();
  24. canvasBehaviour = canvas.gameObject.AddComponent<CavaseMonoBehaviour>();
  25. canvasBehaviour.displayRoot = this;
  26. }
  27. public void OnRectTransformDimensionsChange()
  28. {
  29. //Debug.Log("RootCanvase OnRectTransformDimensionsChange " + Time.frameCount);
  30. UpdateSize();
  31. }
  32. protected override DisplayNodeBehaviour GenNodeBehavior()
  33. {
  34. return this.mGameObject.AddComponent<DisplayRootBehaviour>();
  35. }
  36. internal override void InternalUpdate()
  37. {
  38. // do not update from parent
  39. }
  40. internal void ForceUpdate()
  41. {
  42. //Debug.Log("ForceUpdate " + Time.frameCount);
  43. //this.UpdateSize();
  44. base.InternalUpdate();
  45. DisplayNode.FuckFuckList();
  46. }
  47. protected void UpdateSize()
  48. {
  49. {
  50. mTransform.sizeDelta = mCanvasTransform.sizeDelta;
  51. mTransform.localPosition = Vector3.zero;
  52. //mTransform.position = new Vector3(0, mCanvasTransform.sizeDelta.y, 0);
  53. mTransform.localScale = Vector3.one;
  54. mTransform.localRotation = Quaternion.identity;
  55. mTransform.anchoredPosition = Vector2.zero;
  56. }
  57. }
  58. public UnityEngine.Canvas Canvas { get { return mCanvas; } }
  59. }
  60. public class DisplayRootBehaviour : DisplayNodeBehaviour
  61. {
  62. void Update()
  63. {
  64. (mBinding as DisplayRoot).ForceUpdate();
  65. }
  66. }
  67. internal class CavaseMonoBehaviour : MonoBehaviour
  68. {
  69. public DisplayRoot displayRoot;
  70. void OnRectTransformDimensionsChange()
  71. {
  72. displayRoot.OnRectTransformDimensionsChange();
  73. }
  74. }
  75. }