XRoom_Unity/Assets/Paroxe/PDFRenderer/Internal/Scripts/Viewer/PDFViewerLeftPanel.cs
2025-05-31 10:20:20 +03:30

258 lines
7.5 KiB
C#

using System;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Paroxe.PdfRenderer.Internal.Viewer
{
public class PDFViewerLeftPanel : UIBehaviour
{
[SerializeField]
private RectTransform m_Bookmarks;
[SerializeField]
private Image m_BookmarksTab;
[SerializeField]
private Text m_BookmarksTabTitle;
[SerializeField]
private Sprite m_ClosedTabSprite;
[SerializeField]
private Sprite m_CloseSprite;
[SerializeField]
private float m_MaxWidth = 500.0f;
[SerializeField]
private float m_MinWidth = 250.0f;
[SerializeField]
private Sprite m_OpenedTabSprite;
[SerializeField]
private Sprite m_OpenSprite;
[SerializeField]
private Texture2D m_ResizeCursor;
[SerializeField]
private Image m_SideBarImage;
[SerializeField]
private RectTransform m_Thumbnails;
[SerializeField]
private Image m_ThumbnailsTab;
[SerializeField]
private Text m_ThumbnailsTabTitle;
[SerializeField]
private PDFThumbnailsViewer m_ThumbnailsViewer;
private float m_LastPanelWidth;
private bool m_Opened = true;
private bool m_Drag;
private CanvasGroup m_BookmarksCanvasGroup;
private CanvasGroup m_ThumbnailsCanvasGroup;
private PDFViewer m_Viewer;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
private bool m_PointerIn;
#endif
public RectTransform Bookmarks { get { return m_Bookmarks; } }
public Image BookmarksTab { get { return m_BookmarksTab; } }
public PDFThumbnailsViewer ThumbnailsViewer { get { return m_ThumbnailsViewer; } }
public RectTransform Thumbnails { get { return m_Thumbnails; } }
public Image ThumbnailsTab { get { return m_ThumbnailsTab; } }
private RectTransform RectTransform { get { return (RectTransform)transform; } }
private PDFViewer Viewer
{
get
{
if (m_Viewer == null)
m_Viewer = GetComponentInParent<PDFViewer>();
return m_Viewer;
}
}
private CanvasGroup BookmarksCanvasGroup
{
get
{
if (m_BookmarksCanvasGroup == null)
m_BookmarksCanvasGroup = m_Bookmarks.GetComponent<CanvasGroup>();
return m_BookmarksCanvasGroup;
}
}
private CanvasGroup ThumbnailsCanvasGroup
{
get
{
if (m_ThumbnailsCanvasGroup == null)
m_ThumbnailsCanvasGroup = m_Thumbnails.GetComponent<CanvasGroup>();
return m_ThumbnailsCanvasGroup;
}
}
public void OnBeginDrag()
{
if (!m_Opened)
return;
m_Drag = true;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
Cursor.SetCursor(m_ResizeCursor, new Vector2(16.0f, 16.0f), CursorMode.Auto);
#endif
}
public void OnDrag(BaseEventData eventData)
{
if (!m_Drag)
return;
PointerEventData pointerData = eventData as PointerEventData;
if (pointerData == null)
return;
RectTransform.sizeDelta += new Vector2(pointerData.delta.x, 0.0f);
RectTransform.sizeDelta = new Vector2(Mathf.Clamp(RectTransform.sizeDelta.x, m_MinWidth, m_MaxWidth), RectTransform.sizeDelta.y);
m_LastPanelWidth = RectTransform.sizeDelta.x;
UpdateViewport();
}
public void OnEndDrag()
{
if (!m_Drag || !m_Opened)
return;
m_Drag = false;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (!m_PointerIn)
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
#endif
}
public void OnPointerEnter()
{
if (!m_Opened)
return;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
Cursor.SetCursor(m_ResizeCursor, new Vector2(16.0f, 16.0f), CursorMode.Auto);
m_PointerIn = true;
#endif
}
public void OnPointerExit()
{
if (!m_Opened)
return;
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (!m_Drag)
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
m_PointerIn = false;
#endif
}
public void OnBookmarksTabClicked()
{
m_BookmarksTab.sprite = m_OpenedTabSprite;
m_BookmarksTabTitle.color = Color.black;
m_ThumbnailsTab.sprite = m_ClosedTabSprite;
m_ThumbnailsTabTitle.color = new Color(0.50f, 0.50f, 0.50f);
BookmarksCanvasGroup.alpha = 1.0f;
BookmarksCanvasGroup.interactable = true;
BookmarksCanvasGroup.blocksRaycasts = true;
ThumbnailsCanvasGroup.alpha = 0.0f;
ThumbnailsCanvasGroup.interactable = false;
ThumbnailsCanvasGroup.blocksRaycasts = false;
}
public void OnThumbnailsTabClicked()
{
m_BookmarksTab.sprite = m_ClosedTabSprite;
m_BookmarksTabTitle.color = new Color(0.50f, 0.50f, 0.50f);
m_ThumbnailsTab.sprite = m_OpenedTabSprite;
m_ThumbnailsTabTitle.color = Color.black;
BookmarksCanvasGroup.alpha = 0.0f;
BookmarksCanvasGroup.interactable = false;
BookmarksCanvasGroup.blocksRaycasts = false;
ThumbnailsCanvasGroup.alpha = 1.0f;
ThumbnailsCanvasGroup.interactable = true;
ThumbnailsCanvasGroup.blocksRaycasts = true;
}
public void SetActive(bool active)
{
gameObject.SetActive(active);
if (!active)
{
Viewer.m_Internal.Viewport.offsetMin = new Vector2(0.0f, Viewer.m_Internal.Viewport.offsetMin.y);
Viewer.m_Internal.HorizontalScrollBar.offsetMin = new Vector2(0.0f, Viewer.m_Internal.HorizontalScrollBar.offsetMin.y);
}
else
{
UpdateViewport();
}
}
public bool IsOpened
{
get { return m_Opened; }
}
public void SetOpened(bool opened)
{
m_Opened = opened;
UpdateGraphics();
UpdateViewport();
}
public void Toggle()
{
m_Opened = !m_Opened;
UpdateGraphics();
UpdateViewport();
}
protected override void OnEnable()
{
m_LastPanelWidth = 350.0f;
UpdateViewport();
}
private void UpdateGraphics()
{
m_SideBarImage.sprite = m_Opened ? m_CloseSprite : m_OpenSprite;
if (m_Opened)
{
RectTransform.sizeDelta = new Vector2(m_LastPanelWidth, RectTransform.sizeDelta.y);
}
else
{
RectTransform.sizeDelta = new Vector2(24.0f, RectTransform.sizeDelta.y);
}
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (m_Opened)
{
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
}
#endif
}
private void UpdateViewport()
{
RectTransform viewport = Viewer.m_Internal.Viewport;
RectTransform horizontalScrollBar = Viewer.m_Internal.HorizontalScrollBar;
if (Math.Abs(viewport.offsetMin.x - RectTransform.sizeDelta.x) > 0.01f)
{
viewport.offsetMin = new Vector2(RectTransform.sizeDelta.x, viewport.offsetMin.y);
horizontalScrollBar.offsetMin = new Vector2(RectTransform.sizeDelta.x, horizontalScrollBar.offsetMin.y);
}
}
}
}