FileBrowserMovement.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using UnityEngine;
  2. using UnityEngine.EventSystems;
  3. namespace SimpleFileBrowser
  4. {
  5. public class FileBrowserMovement : MonoBehaviour
  6. {
  7. #region Variables
  8. #pragma warning disable 0649
  9. private FileBrowser fileBrowser;
  10. private RectTransform canvasTR;
  11. private Camera canvasCam;
  12. [SerializeField]
  13. private RectTransform window;
  14. [SerializeField]
  15. private RecycledListView listView;
  16. #pragma warning restore 0649
  17. private Vector2 initialTouchPos = Vector2.zero;
  18. private Vector2 initialAnchoredPos, initialSizeDelta;
  19. #endregion
  20. #region Initialization Functions
  21. public void Initialize( FileBrowser fileBrowser )
  22. {
  23. this.fileBrowser = fileBrowser;
  24. canvasTR = fileBrowser.GetComponent<RectTransform>();
  25. }
  26. #endregion
  27. #region Pointer Events
  28. public void OnDragStarted( BaseEventData data )
  29. {
  30. PointerEventData pointer = (PointerEventData) data;
  31. canvasCam = pointer.pressEventCamera;
  32. RectTransformUtility.ScreenPointToLocalPointInRectangle( window, pointer.pressPosition, canvasCam, out initialTouchPos );
  33. }
  34. public void OnDrag( BaseEventData data )
  35. {
  36. PointerEventData pointer = (PointerEventData) data;
  37. Vector2 touchPos;
  38. RectTransformUtility.ScreenPointToLocalPointInRectangle( window, pointer.position, canvasCam, out touchPos );
  39. window.anchoredPosition += touchPos - initialTouchPos;
  40. }
  41. public void OnEndDrag( BaseEventData data )
  42. {
  43. fileBrowser.EnsureWindowIsWithinBounds();
  44. }
  45. public void OnResizeStarted( BaseEventData data )
  46. {
  47. PointerEventData pointer = (PointerEventData) data;
  48. canvasCam = pointer.pressEventCamera;
  49. initialAnchoredPos = window.anchoredPosition;
  50. initialSizeDelta = window.sizeDelta;
  51. RectTransformUtility.ScreenPointToLocalPointInRectangle( canvasTR, pointer.pressPosition, canvasCam, out initialTouchPos );
  52. }
  53. public void OnResize( BaseEventData data )
  54. {
  55. PointerEventData pointer = (PointerEventData) data;
  56. Vector2 touchPos;
  57. RectTransformUtility.ScreenPointToLocalPointInRectangle( canvasTR, pointer.position, canvasCam, out touchPos );
  58. Vector2 delta = touchPos - initialTouchPos;
  59. Vector2 newSize = initialSizeDelta + new Vector2( delta.x, -delta.y );
  60. if( newSize.x < fileBrowser.minWidth ) newSize.x = fileBrowser.minWidth;
  61. if( newSize.y < fileBrowser.minHeight ) newSize.y = fileBrowser.minHeight;
  62. newSize.x = (int) newSize.x;
  63. newSize.y = (int) newSize.y;
  64. delta = newSize - initialSizeDelta;
  65. window.anchoredPosition = initialAnchoredPos + new Vector2( delta.x * 0.5f, delta.y * -0.5f );
  66. window.sizeDelta = newSize;
  67. listView.OnViewportDimensionsChanged();
  68. }
  69. public void OnEndResize( BaseEventData data )
  70. {
  71. fileBrowser.EnsureWindowIsWithinBounds();
  72. }
  73. #endregion
  74. }
  75. }