12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- using System;
- using UnityEngine;
- namespace UnityEditor.U2D.Animation
- {
- internal class RectSelectionTool<T>
- {
- private int m_HashCode = "RectSelectionTool".GetHashCode();
- private int m_ControlID = -1;
- private bool m_Moved = false;
- private RectSlider m_RectSlider = new RectSlider();
- public int controlID { get { return m_ControlID; } }
- public IRectSelector<T> rectSelector { get; set; }
- public ICacheUndo cacheUndo { get; set; }
- public Action onSelectionStart = () => {};
- public Action onSelectionUpdate = () => {};
- public Action onSelectionEnd = () => {};
- public void OnGUI()
- {
- Debug.Assert(rectSelector != null);
- Debug.Assert(cacheUndo != null);
- m_ControlID = GUIUtility.GetControlID(m_HashCode, FocusType.Passive);
- Event ev = Event.current;
- EventType eventType = ev.GetTypeForControl(m_ControlID);
- if (GUIUtility.hotControl == 0 && HandleUtility.nearestControl == m_ControlID &&
- rectSelector.selection.Count > 0 && eventType == EventType.MouseDown && ev.button == 0 && !ev.alt)
- {
- m_Moved = false;
- onSelectionStart();
- }
- if (m_Moved && GUIUtility.hotControl == m_ControlID && eventType == EventType.MouseUp && ev.button == 0)
- {
- cacheUndo.BeginUndoOperation(TextContent.selection);
- rectSelector.selection.EndSelection(true);
- onSelectionEnd();
- }
- EditorGUI.BeginChangeCheck();
- rectSelector.rect = m_RectSlider.Do(m_ControlID);
- if (EditorGUI.EndChangeCheck())
- {
- if(!m_Moved)
- {
- cacheUndo.BeginUndoOperation(TextContent.selection);
- if(!ev.shift)
- rectSelector.selection.Clear();
-
- m_Moved = true;
- }
-
- rectSelector.selection.BeginSelection();
- rectSelector.Select();
- onSelectionUpdate();
- }
- if (eventType == EventType.Repaint && GUIUtility.hotControl == m_ControlID)
- {
- DrawingUtility.DrawRect(rectSelector.rect, Vector3.zero, Quaternion.identity, new Color(0f, 1f, 1f, 1f), 0.05f, 0.8f);
- }
- }
- }
- }
|