浏览代码

Add draggable manipulator for floating windows

/main
Jens Holm 7 年前
当前提交
5f6443a4
共有 5 个文件被更改,包括 100 次插入37 次删除
  1. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/GraphInspectorView.cs
  2. 2
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/MasterNodeView.cs
  3. 36
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/GraphEditorView.cs
  4. 86
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/WindowDraggable.cs
  5. 11
      MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/WindowDraggable.cs.meta

2
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/GraphInspectorView.cs


m_PropertyItems.Add(new ShaderPropertyView(m_Graph, property));
Add(new ResizeBorderFrame(this) { name = "resizeBorderFrame" });
this.AddManipulator(new WindowDraggable());
}
void OnAddProperty()

2
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Inspector/MasterNodeView.cs


m_PreviewRenderHandle = previewManager.masterRenderData;
m_PreviewRenderHandle.onPreviewChanged += OnPreviewChanged;
this.AddManipulator(new Draggable(OnMouseDrag, true));
this.AddManipulator(new WindowDraggable());
var topContainer = new VisualElement() { name = "top" };
{

36
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Views/GraphEditorView.cs


content.Add(m_GraphView);
m_GraphInspectorView = new GraphInspectorView(assetName, previewManager, graph) { name = "inspector" };
m_GraphInspectorView.AddManipulator(new Draggable(OnMouseDrag, true));
m_GraphView.RegisterCallback<PostLayoutEvent>(OnPostLayout);
m_GraphInspectorView.RegisterCallback<PostLayoutEvent>(OnPostLayout);
m_GraphView.Add(m_GraphInspectorView);
m_MasterNodeView = new MasterNodeView(assetName, previewManager, graph) { name = "masterNodePreview" };

AddEdge(edge);
Add(content);
}
void OnPostLayout(PostLayoutEvent evt)
{
const float minimumVisibility = 60f;
Rect inspectorViewRect = m_GraphInspectorView.layout;
float minimumXPosition = minimumVisibility - inspectorViewRect.width;
float maximumXPosition = m_GraphView.layout.width - minimumVisibility;
float minimumYPosition = minimumVisibility - inspectorViewRect.height;
float maximumYPosition = m_GraphView.layout.height - minimumVisibility;
inspectorViewRect.x = Mathf.Clamp(inspectorViewRect.x, minimumXPosition, maximumXPosition);
inspectorViewRect.y = Mathf.Clamp(inspectorViewRect.y, minimumYPosition, maximumYPosition);
inspectorViewRect.width = Mathf.Min(inspectorViewRect.width, layout.width);
inspectorViewRect.height = Mathf.Min(inspectorViewRect.height, layout.height);
m_GraphInspectorView.layout = inspectorViewRect;
}
void OnMouseDrag(Vector2 mouseDelta)
{
Vector2 normalizedDelta = mouseDelta / 2f;
Rect inspectorWindowRect = m_GraphInspectorView.layout;
inspectorWindowRect.x += normalizedDelta.x;
inspectorWindowRect.y += normalizedDelta.y;
m_GraphInspectorView.layout = inspectorWindowRect;
}
GraphViewChange GraphViewChanged(GraphViewChange graphViewChange)

86
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/WindowDraggable.cs


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.UIElements;
using UnityEditor.Experimental.UIElements;
namespace UnityEditor.ShaderGraph.Drawing
{
public class WindowDraggable : MouseManipulator
{
bool m_Active;
Vector2 m_LocalMosueOffset;
public WindowDraggable()
{
m_Active = false;
}
protected override void RegisterCallbacksOnTarget()
{
target.RegisterCallback(new EventCallback<MouseDownEvent>(OnMouseDown), Capture.NoCapture);
target.RegisterCallback(new EventCallback<MouseMoveEvent>(OnMouseMove), Capture.NoCapture);
target.RegisterCallback(new EventCallback<MouseUpEvent>(OnMouseUp), Capture.NoCapture);
target.RegisterCallback<PostLayoutEvent>(OnPostLayout);
}
protected override void UnregisterCallbacksFromTarget()
{
target.UnregisterCallback(new EventCallback<MouseDownEvent>(OnMouseDown), Capture.NoCapture);
target.UnregisterCallback(new EventCallback<MouseMoveEvent>(OnMouseMove), Capture.NoCapture);
target.UnregisterCallback(new EventCallback<MouseUpEvent>(OnMouseUp), Capture.NoCapture);
}
void OnMouseDown(MouseDownEvent evt)
{
m_Active = true;
m_LocalMosueOffset = target.WorldToLocal(evt.mousePosition);
target.TakeMouseCapture();
evt.StopPropagation();
}
void OnMouseMove(MouseMoveEvent evt)
{
if (m_Active)
{
Rect layout = target.layout;
layout.position = target.parent.WorldToLocal(evt.mousePosition - m_LocalMosueOffset);
target.layout = layout;
}
}
void OnMouseUp(MouseUpEvent evt)
{
m_Active = false;
if (target.HasMouseCapture())
{
target.ReleaseMouseCapture();
}
evt.StopPropagation();
}
void OnPostLayout(PostLayoutEvent postLayoutEvent)
{
Rect inspectorViewRect = target.layout;
float minimumXPosition = target.layout.width - inspectorViewRect.width;
float maximumXPosition = target.parent.layout.width - target.layout.width;
float minimumYPosition = target.layout.height - inspectorViewRect.height;
float maximumYPosition = target.parent.layout.height - target.layout.height;
inspectorViewRect.x = Mathf.Clamp(inspectorViewRect.x, minimumXPosition, maximumXPosition);
inspectorViewRect.y = Mathf.Clamp(inspectorViewRect.y, minimumYPosition, maximumYPosition);
inspectorViewRect.width = Mathf.Min(inspectorViewRect.width, target.layout.width);
inspectorViewRect.height = Mathf.Min(inspectorViewRect.height, target.layout.height);
target.layout = inspectorViewRect;
}
}
}

11
MaterialGraphProject/Assets/UnityShaderEditor/Editor/Drawing/Manipulators/WindowDraggable.cs.meta


fileFormatVersion: 2
guid: 604681490aa779348a355368c95cfcf5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
正在加载...
取消
保存