您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
92 行
2.4 KiB
92 行
2.4 KiB
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.RMGUI;
|
|
using UnityEngine.RMGUI.StyleEnums;
|
|
|
|
namespace RMGUI.GraphView
|
|
{
|
|
// drags the contentContainer of a graphview around
|
|
// add to the GraphView
|
|
public class ContentDragger : MouseManipulator
|
|
{
|
|
private Vector2 m_Start;
|
|
public Vector2 panSpeed { get; set; }
|
|
|
|
public bool clampToParentEdges { get; set; }
|
|
|
|
public ContentDragger()
|
|
{
|
|
activateButton = MouseButton.LeftMouse;
|
|
activateModifiers = KeyModifiers.Alt;
|
|
panSpeed = new Vector2(1, 1);
|
|
clampToParentEdges = false;
|
|
}
|
|
|
|
protected Rect CalculatePosition(float x, float y, float width, float height)
|
|
{
|
|
var rect = new Rect(x, y, width, height);
|
|
|
|
if (clampToParentEdges)
|
|
{
|
|
if (rect.x < target.parent.position.xMin)
|
|
rect.x = target.parent.position.xMin;
|
|
else if (rect.xMax > target.parent.position.xMax)
|
|
rect.x = target.parent.position.xMax - rect.width;
|
|
|
|
if (rect.y < target.parent.position.yMin)
|
|
rect.y = target.parent.position.yMin;
|
|
else if (rect.yMax > target.parent.position.yMax)
|
|
rect.y = target.parent.position.yMax - rect.height;
|
|
|
|
// Reset size, we never intended to change them in the first place
|
|
rect.width = width;
|
|
rect.height = height;
|
|
}
|
|
|
|
return rect;
|
|
}
|
|
|
|
public override EventPropagation HandleEvent(Event evt, VisualElement finalTarget)
|
|
{
|
|
var graphView = target as GraphView;
|
|
if (graphView == null)
|
|
{
|
|
throw new InvalidOperationException("Manipulator can only be added to a GraphView");
|
|
}
|
|
|
|
switch (evt.type)
|
|
{
|
|
case EventType.MouseDown:
|
|
if (CanStartManipulation(evt))
|
|
{
|
|
this.TakeCapture();
|
|
|
|
m_Start = graphView.ChangeCoordinatesTo(graphView.contentViewContainer, evt.mousePosition);
|
|
|
|
return EventPropagation.Stop;
|
|
}
|
|
break;
|
|
|
|
case EventType.MouseDrag:
|
|
if (this.HasCapture() && graphView.contentViewContainer.positionType == PositionType.Absolute)
|
|
{
|
|
Vector2 diff = graphView.ChangeCoordinatesTo(graphView.contentViewContainer, evt.mousePosition) - m_Start;
|
|
Matrix4x4 t = graphView.contentViewContainer.transform;
|
|
|
|
graphView.contentViewContainer.transform = t*Matrix4x4.Translate(new Vector3(diff.x, diff.y, 0));
|
|
return EventPropagation.Stop;
|
|
}
|
|
break;
|
|
|
|
case EventType.MouseUp:
|
|
if (CanStopManipulation(evt))
|
|
{
|
|
this.ReleaseCapture();
|
|
return EventPropagation.Stop;
|
|
}
|
|
break;
|
|
}
|
|
return EventPropagation.Continue;
|
|
}
|
|
}
|
|
}
|