WentingCanvasWebVewPrefab.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.UI;
  4. namespace Vuplex.WebView
  5. {
  6. public class WentingCanvasWebVewPrefab : BaseWebViewPrefab
  7. {
  8. private float m_InitialResolution = 1;
  9. private float m_ScrollingSensitivity = 15;
  10. private float m_RenderImageScale = 1;
  11. RectTransform m_CachedRectTransform;
  12. RectTransform cachedRectTransform
  13. {
  14. get
  15. {
  16. if (m_CachedRectTransform == null)
  17. {
  18. m_CachedRectTransform = GetComponent<RectTransform>();
  19. }
  20. return m_CachedRectTransform;
  21. }
  22. }
  23. protected override Vector2 _convertRatioPointToUnityUnits(Vector2 point)
  24. {
  25. // Use Vector2.Scale() because Vector2 * Vector2 isn't supported in Unity 2017.
  26. return Vector2.Scale(point, cachedRectTransform.rect.size * m_RenderImageScale);
  27. }
  28. protected override float _getInitialResolution()
  29. {
  30. return m_InitialResolution;
  31. }
  32. protected override float _getScrollingSensitivity()
  33. {
  34. return m_ScrollingSensitivity;
  35. }
  36. protected override ViewportMaterialView _getVideoLayer()
  37. {
  38. return transform.Find("VideoLayer").GetComponent<ViewportMaterialView>();
  39. }
  40. protected override ViewportMaterialView _getView()
  41. {
  42. return transform.Find("CanvasWebViewPrefabView").GetComponent<ViewportMaterialView>();
  43. }
  44. protected override void _setVideoLayerPosition(Rect videoRect)
  45. {
  46. var videoRectTransform = _videoLayer.transform as RectTransform;
  47. // Use Vector2.Scale() because Vector2 * Vector2 isn't supported in Unity 2017.
  48. videoRectTransform.anchoredPosition = Vector2.Scale(Vector2.Scale(videoRect.position, cachedRectTransform.rect.size), new Vector2(1, -1));
  49. videoRectTransform.sizeDelta = Vector2.Scale(videoRect.size, cachedRectTransform.rect.size);
  50. }
  51. public float ScrollingSensitivity
  52. {
  53. get { return m_ScrollingSensitivity; }
  54. set { m_ScrollingSensitivity = value; }
  55. }
  56. public float RenderImageScale
  57. {
  58. get { return m_RenderImageScale; }
  59. set
  60. {
  61. value = Mathf.Max(value, 0.01f);
  62. if (Mathf.Approximately(m_RenderImageScale, value))
  63. return;
  64. m_RenderImageScale = value;
  65. ResetSize();
  66. }
  67. }
  68. public void Init(float initialResolution, float scrollingSensitivity, float renderImageScale, WebViewOptions options = new WebViewOptions(), IWebView initializedWebView = null)
  69. {
  70. if (_webView != null)
  71. {
  72. Debug.LogError("RoCanvasWebVewPrefab.Init method can be called only once.");
  73. return;
  74. }
  75. m_InitialResolution = initialResolution;
  76. m_ScrollingSensitivity = scrollingSensitivity;
  77. m_RenderImageScale = Mathf.Max(renderImageScale, 0.01f);
  78. var rect = cachedRectTransform.rect;
  79. _init(rect.width * m_RenderImageScale, rect.height * m_RenderImageScale, options, initializedWebView);
  80. }
  81. public void ResetSize()
  82. {
  83. if (_webView == null) return;
  84. var rect = cachedRectTransform.rect;
  85. rect.width = rect.width * m_RenderImageScale;
  86. rect.height = rect.height * m_RenderImageScale;
  87. var size = _webView.Size;
  88. if (!(rect.width == size.x && rect.height == size.y))
  89. {
  90. _webView.Resize(rect.width, rect.height);
  91. }
  92. }
  93. }
  94. }