fine tuning for menu navigation behavior

This commit is contained in:
Alexander Eckart committed 2012-06-23 16:25:31 +02:00
1 parent 7d6609a771
commit 73f7a64835
2 files changed
+9 -7

No files matched your search

+1
View File
@@ -37,6 +37,7 @@ namespace Vocaluxe.Menu
get
{
return (_Type == EType.TBackground ||
_Type == EType.TNameSelection ||
_Type == EType.TText ||
_Type == EType.TStatic ||
_Type == EType.TSongMenu ||
+8 -7
View File
@@ -1387,7 +1387,7 @@ namespace Vocaluxe.Menu
for (int i = 0; i < 4; i++)
{
if (i != mute && (stages[i] < stage || (stages[i] == stage && Directions[i].Key == Key.Key)))
if (i != mute && elements[i] != _Selection && (stages[i] < stage || (stages[i] == stage && Directions[i].Key == Key.Key)))
{
stage = stages[i];
element = elements[i];
@@ -1398,6 +1398,7 @@ namespace Vocaluxe.Menu
if (direction != -1)
{
// select the new element
if (Directions[direction].Key == Key.Key)
{
_UnsetSelected();
@@ -1419,7 +1420,7 @@ namespace Vocaluxe.Menu
if (i != _Selection && !_Interactions[i].ThemeEditorOnly && _IsVisible(i))
{
SRectF targetRect = _GetRect(i);
float dist = _GetDistance90(Key, actualRect, targetRect);
float dist = _GetDistanceDirect(Key, actualRect, targetRect);
if (dist >= 0f && dist < Distance)
{
Distance = dist;
@@ -1485,7 +1486,7 @@ namespace Vocaluxe.Menu
return min;
}
private float _GetDistance90(KeyEvent Key, SRectF actualRect, SRectF targetRect)
private float _GetDistanceDirect(KeyEvent Key, SRectF actualRect, SRectF targetRect)
{
PointF source = new PointF(actualRect.X + actualRect.W / 2f, actualRect.Y + actualRect.H / 2f);
PointF dest = new PointF(targetRect.X + targetRect.W / 2f, targetRect.Y + targetRect.H / 2f);
@@ -1496,22 +1497,22 @@ namespace Vocaluxe.Menu
switch (Key.Key)
{
case Keys.Up:
if (vector.Y < 0f && (vector.Y <= vector.X && vector.X <= 0 || -vector.Y >= vector.X && vector.X >= 0f))
if (vector.Y < 0f && (targetRect.X + targetRect.W > actualRect.X || actualRect.X + actualRect.W > targetRect.X))
inDirection = true;
break;
case Keys.Down:
if (vector.Y > 0f && (vector.Y >= vector.X && vector.X >= 0 || vector.Y >= -vector.X && vector.X <= 0f))
if (vector.Y > 0f && (targetRect.X + targetRect.W > actualRect.X || actualRect.X + actualRect.W > targetRect.X))
inDirection = true;
break;
case Keys.Left:
if (vector.X < 0f && (vector.X <= vector.Y && vector.Y <= 0 || -vector.X >= vector.Y && vector.Y >= 0f))
if (vector.X < 0f && (targetRect.Y + targetRect.H > actualRect.Y || actualRect.Y + actualRect.H > targetRect.Y))
inDirection = true;
break;
case Keys.Right:
if (vector.X > 0f && (vector.X >= vector.Y && vector.Y >= 0 || vector.X >= -vector.Y && vector.Y <= 0f))
if (vector.X > 0f && (targetRect.Y + targetRect.H > actualRect.Y || actualRect.Y + actualRect.H > targetRect.Y))
inDirection = true;
break;