Simple zooming support with arrow keys

This commit is contained in:
Andy Adshead 2019-01-29 00:58:36 +00:00
parent c497ce64f7
commit 985117958c
2 changed files with 55 additions and 13 deletions

View file

@ -77,6 +77,8 @@ namespace Ryujinx.Profiler.UI
private bool _prevBackspaceDown = false;
private double _backspaceDownTime = 0;
private Key _graphControlKey = Key.F35;
// Event management
private double _updateTimer;
private double _processEventTimer;
@ -262,6 +264,26 @@ namespace Ryujinx.Profiler.UI
if (_processEventTimer > 0.05)
{
ProcessEvents();
switch (_graphControlKey)
{
case Key.Left:
_graphPosition += (float)(GraphMoveSpeed * e.Time);
break;
case Key.Right:
_graphPosition = MathF.Max(_graphPosition - (float)(GraphMoveSpeed * e.Time), 0);
break;
case Key.Up:
_graphZoom = MathF.Min(_graphZoom + (float)(GraphZoomSpeed * e.Time), 100.0f);
break;
case Key.Down:
_graphZoom = MathF.Max(_graphZoom - (float)(GraphZoomSpeed * e.Time), 1f);
break;
}
_processEventTimer = 0;
}
}
@ -574,20 +596,36 @@ namespace Ryujinx.Profiler.UI
protected override void OnKeyDown(KeyboardKeyEventArgs e)
{
if (e.Key == Key.BackSpace)
switch (e.Key)
{
_profileUpdated = _backspaceDown = true;
return;
}
case Key.BackSpace:
_profileUpdated = _backspaceDown = true;
return;
case Key.Left:
case Key.Right:
case Key.Up:
case Key.Down:
_graphControlKey = e.Key;
return;
}
base.OnKeyUp(e);
}
protected override void OnKeyUp(KeyboardKeyEventArgs e)
{
if (e.Key == Key.BackSpace)
switch (e.Key)
{
_backspaceDown = false;
return;
case Key.BackSpace:
_backspaceDown = false;
return;
case Key.Left:
case Key.Right:
case Key.Up:
case Key.Down:
_graphControlKey = Key.F35;
return;
}
base.OnKeyUp(e);
}

View file

@ -1,6 +1,4 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK;
using OpenTK.Graphics.OpenGL;
@ -8,6 +6,12 @@ namespace Ryujinx.Profiler.UI
{
public partial class ProfileWindow
{
private const float GraphMoveSpeed = 100;
private const float GraphZoomSpeed = 5;
private float _graphZoom = 1;
private float _graphPosition = 0;
private void DrawGraph(float xOffset, float yOffset, float width)
{
if (_sortedProfileData.Count != 0)
@ -17,7 +21,7 @@ namespace Ryujinx.Profiler.UI
int verticalIndex = 0;
float barHeight = (LineHeight - LinePadding);
long timeWidth = Profile.HistoryLength;
long timeWidth = (long)(Profile.HistoryLength / _graphZoom);
GL.Enable(EnableCap.ScissorTest);
GL.Begin(PrimitiveType.Triangles);
@ -26,8 +30,8 @@ namespace Ryujinx.Profiler.UI
GL.Color3(Color.Green);
foreach (Timestamp timestamp in entry.Value.GetAllTimestamps())
{
left = (int)(xOffset + width - (((float)_captureTime - timestamp.BeginTime) / timeWidth) * width);
right = (int)(xOffset + width - (((float)_captureTime - timestamp.EndTime) / timeWidth) * width);
left = (int)(xOffset + width + _graphPosition - (((float)_captureTime - timestamp.BeginTime) / timeWidth) * width);
right = (int)(xOffset + width + _graphPosition - (((float)_captureTime - timestamp.EndTime) / timeWidth) * width);
bottom = GetLineY(yOffset, LineHeight, LinePadding, true, verticalIndex);
top = bottom + barHeight;
@ -52,7 +56,7 @@ namespace Ryujinx.Profiler.UI
long entryBegin = entry.Value.BeginTime;
if (entryBegin != -1)
{
left = (int)(xOffset + width - (((float)_captureTime - entryBegin) / timeWidth) * width);
left = (int)(xOffset + width + _graphPosition - (((float)_captureTime - entryBegin) / timeWidth) * width);
bottom = GetLineY(yOffset, LineHeight, LinePadding, true, verticalIndex);
top = bottom + barHeight;
right = (int)(xOffset + width);