Browse Source

Added support for variable zoom center in flowchart window

Flowchart window now zoom in/out by mouse cursor or center rather than
upper left corner
master
Zach Vinless 8 years ago
parent
commit
fb73853bf7
  1. 37
      Assets/Fungus/Scripts/Editor/FlowchartWindow.cs

37
Assets/Fungus/Scripts/Editor/FlowchartWindow.cs

@ -34,6 +34,8 @@ namespace Fungus.EditorUtils
protected Texture2D addTexture; protected Texture2D addTexture;
protected bool cursorZoom = true;
[MenuItem("Tools/Fungus/Flowchart Window")] [MenuItem("Tools/Fungus/Flowchart Window")]
static void Init() static void Init()
{ {
@ -166,7 +168,13 @@ namespace Fungus.EditorUtils
GUILayout.Space(8); GUILayout.Space(8);
flowchart.Zoom = GUILayout.HorizontalSlider(flowchart.Zoom, minZoomValue, maxZoomValue, GUILayout.Width(100)); var newZoom = GUILayout.HorizontalSlider(flowchart.Zoom, minZoomValue, maxZoomValue, GUILayout.Width(100));
DoZoom(flowchart, newZoom - flowchart.Zoom, Vector2.one * 0.5f);
GUILayout.Space(8);
var toggleStyle = new GUIStyle(GUI.skin.button);
toggleStyle.fontSize = 8;
cursorZoom = GUILayout.Toggle(cursorZoom, " Cursor\nZoom", toggleStyle, GUILayout.Width(45), GUILayout.Height(22));
GUILayout.FlexibleSpace(); GUILayout.FlexibleSpace();
@ -484,12 +492,33 @@ namespace Fungus.EditorUtils
if (zoom) if (zoom)
{ {
flowchart.Zoom -= Event.current.delta.y * 0.01f; Vector2 zoomCenter;
flowchart.Zoom = Mathf.Clamp(flowchart.Zoom, minZoomValue, maxZoomValue); if (cursorZoom)
forceRepaintCount = 6; {
zoomCenter.x = Event.current.mousePosition.x / position.width;
zoomCenter.y = Event.current.mousePosition.y / position.height;
zoomCenter *= flowchart.Zoom;
}
else
{
zoomCenter = Vector2.one * 0.5f;
}
DoZoom(flowchart, -Event.current.delta.y * 0.01f, zoomCenter);
} }
} }
protected virtual void DoZoom(Flowchart flowchart, float delta, Vector2 center)
{
var prevZoom = flowchart.Zoom;
flowchart.Zoom += delta;
flowchart.Zoom = Mathf.Clamp(flowchart.Zoom, minZoomValue, maxZoomValue);
var deltaSize = position.size / prevZoom - position.size / flowchart.Zoom;
var offset = -Vector2.Scale(deltaSize, center);
flowchart.ScrollPos += offset;
forceRepaintCount = 6;
}
protected virtual void DrawGrid(Flowchart flowchart) protected virtual void DrawGrid(Flowchart flowchart)
{ {
float width = this.position.width / flowchart.Zoom; float width = this.position.width / flowchart.Zoom;

Loading…
Cancel
Save