mirror of
https://github.com/ZuneDev/MicrosoftIris.git
synced 2026-07-27 13:13:29 -07:00
206 lines
7.4 KiB
C#
206 lines
7.4 KiB
C#
// Decompiled with JetBrains decompiler
|
|||
|
|
// Type: Microsoft.Iris.Navigation.NavigationStrip
|
||
|
|
// Assembly: UIX, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
||
|
|
// MVID: A56C6C9D-B7F6-46A9-8BDE-B3D9B8D60B11
|
||
|
|
// Assembly location: C:\Program Files\Zune\UIX.dll
|
||
|
|
|
||
|
|
using Microsoft.Iris.RenderAPI.Drawing;
|
||
|
|
using Microsoft.Iris.Session;
|
||
|
|
using System.Collections;
|
||
|
|
|
||
|
|
namespace Microsoft.Iris.Navigation
|
||
|
|
{
|
||
|
|
internal class NavigationStrip : NavigationItem
|
||
|
|
{
|
||
|
|
private static readonly NavigationStrip.CompareFunction s_orderHorizontalMethod = new NavigationStrip.CompareFunction(CompareOrderHorizontal);
|
||
|
|
private static readonly NavigationStrip.CompareFunction s_orderVerticalMethod = new NavigationStrip.CompareFunction(CompareOrderVertical);
|
||
|
|
private static readonly NavigationStrip.CompareFunction s_distanceHorizontalMethod = new NavigationStrip.CompareFunction(CompareDistanceHorizontal);
|
||
|
|
private static readonly NavigationStrip.CompareFunction s_distanceVerticalMethod = new NavigationStrip.CompareFunction(CompareDistanceVertical);
|
||
|
|
private NavigationOrientation _orientationValue;
|
||
|
|
|
||
|
|
internal NavigationStrip(
|
||
|
|
INavigationSite subjectSite,
|
||
|
|
Direction searchDirection,
|
||
|
|
NavigationOrientation orientionValue)
|
||
|
|
: base(subjectSite, searchDirection)
|
||
|
|
{
|
||
|
|
_orientationValue = orientionValue;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected override IList ComputeSearchOrder(
|
||
|
|
IList allChildrenList,
|
||
|
|
RectangleF startRectangleF,
|
||
|
|
bool enteringFlag)
|
||
|
|
{
|
||
|
|
NavigationOrientation searchOrientation = SearchOrientation;
|
||
|
|
bool flag = searchOrientation == _orientationValue;
|
||
|
|
if (!enteringFlag && !flag)
|
||
|
|
return null;
|
||
|
|
ArrayList arrayList = new ArrayList(allChildrenList.Count);
|
||
|
|
PointF center = startRectangleF.Center;
|
||
|
|
foreach (NavigationItem allChildren in allChildrenList)
|
||
|
|
{
|
||
|
|
if (IsCandidateInSearchDirection(allChildren.Position - center))
|
||
|
|
arrayList.Add(allChildren);
|
||
|
|
}
|
||
|
|
NavigationStrip.CompareFunction compareMethod = null;
|
||
|
|
float paramValue = 0.0f;
|
||
|
|
if (flag)
|
||
|
|
{
|
||
|
|
switch (searchOrientation)
|
||
|
|
{
|
||
|
|
case NavigationOrientation.Horizontal:
|
||
|
|
compareMethod = s_orderHorizontalMethod;
|
||
|
|
break;
|
||
|
|
case NavigationOrientation.Vertical:
|
||
|
|
compareMethod = s_orderVerticalMethod;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
switch (SearchDirection)
|
||
|
|
{
|
||
|
|
case Direction.North:
|
||
|
|
case Direction.West:
|
||
|
|
case Direction.Previous:
|
||
|
|
paramValue = -1f;
|
||
|
|
break;
|
||
|
|
case Direction.South:
|
||
|
|
case Direction.East:
|
||
|
|
case Direction.Next:
|
||
|
|
paramValue = 1f;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
switch (searchOrientation)
|
||
|
|
{
|
||
|
|
case NavigationOrientation.Horizontal:
|
||
|
|
compareMethod = s_distanceVerticalMethod;
|
||
|
|
paramValue = center.Y;
|
||
|
|
break;
|
||
|
|
case NavigationOrientation.Vertical:
|
||
|
|
compareMethod = s_distanceHorizontalMethod;
|
||
|
|
paramValue = center.X;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
arrayList.Sort(new NavigationStrip.ItemComparer(compareMethod, paramValue));
|
||
|
|
return arrayList;
|
||
|
|
}
|
||
|
|
|
||
|
|
private NavigationOrientation SearchOrientation
|
||
|
|
{
|
||
|
|
get
|
||
|
|
{
|
||
|
|
switch (SearchDirection)
|
||
|
|
{
|
||
|
|
case Direction.North:
|
||
|
|
case Direction.South:
|
||
|
|
return NavigationOrientation.Vertical;
|
||
|
|
case Direction.East:
|
||
|
|
case Direction.West:
|
||
|
|
return NavigationOrientation.Horizontal;
|
||
|
|
default:
|
||
|
|
return _orientationValue;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private bool IsCandidateInSearchDirection(SizeF deltaExtent)
|
||
|
|
{
|
||
|
|
switch (SearchDirection)
|
||
|
|
{
|
||
|
|
case Direction.North:
|
||
|
|
if (deltaExtent.Height >= 0.0)
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
case Direction.South:
|
||
|
|
if (deltaExtent.Height <= 0.0)
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
case Direction.East:
|
||
|
|
if (deltaExtent.Width <= 0.0)
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
case Direction.West:
|
||
|
|
if (deltaExtent.Width >= 0.0)
|
||
|
|
return false;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
|
||
|
|
private static int CompareOrderHorizontal(
|
||
|
|
NavigationItem niA,
|
||
|
|
NavigationItem niB,
|
||
|
|
float orderValue)
|
||
|
|
{
|
||
|
|
float num1 = niA.Position.X * orderValue;
|
||
|
|
float num2 = niB.Position.X * orderValue;
|
||
|
|
if (num1 < (double)num2)
|
||
|
|
return -1;
|
||
|
|
return num1 > (double)num2 ? 1 : 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
private static int CompareOrderVertical(
|
||
|
|
NavigationItem niA,
|
||
|
|
NavigationItem niB,
|
||
|
|
float orderValue)
|
||
|
|
{
|
||
|
|
float num1 = niA.Position.Y * orderValue;
|
||
|
|
float num2 = niB.Position.Y * orderValue;
|
||
|
|
if (num1 < (double)num2)
|
||
|
|
return -1;
|
||
|
|
return num1 > (double)num2 ? 1 : 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
private static int CompareDistanceHorizontal(
|
||
|
|
NavigationItem niA,
|
||
|
|
NavigationItem niB,
|
||
|
|
float originValue)
|
||
|
|
{
|
||
|
|
float num1 = niA.Position.X - originValue;
|
||
|
|
if (num1 < 0.0)
|
||
|
|
num1 *= -1f;
|
||
|
|
float num2 = niB.Position.X - originValue;
|
||
|
|
if (num2 < 0.0)
|
||
|
|
num2 *= -1f;
|
||
|
|
if (num1 < (double)num2)
|
||
|
|
return -1;
|
||
|
|
return num1 > (double)num2 ? 1 : 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
private static int CompareDistanceVertical(
|
||
|
|
NavigationItem niA,
|
||
|
|
NavigationItem niB,
|
||
|
|
float originValue)
|
||
|
|
{
|
||
|
|
float num1 = niA.Position.Y - originValue;
|
||
|
|
if (num1 < 0.0)
|
||
|
|
num1 *= -1f;
|
||
|
|
float num2 = niB.Position.Y - originValue;
|
||
|
|
if (num2 < 0.0)
|
||
|
|
num2 *= -1f;
|
||
|
|
if (num1 < (double)num2)
|
||
|
|
return -1;
|
||
|
|
return num1 > (double)num2 ? 1 : 0;
|
||
|
|
}
|
||
|
|
|
||
|
|
private delegate int CompareFunction(NavigationItem a, NavigationItem b, float param);
|
||
|
|
|
||
|
|
private class ItemComparer : IComparer
|
||
|
|
{
|
||
|
|
private NavigationStrip.CompareFunction _compareMethod;
|
||
|
|
private float _paramValue;
|
||
|
|
|
||
|
|
public ItemComparer(NavigationStrip.CompareFunction compareMethod, float paramValue)
|
||
|
|
{
|
||
|
|
_compareMethod = compareMethod;
|
||
|
|
_paramValue = paramValue;
|
||
|
|
}
|
||
|
|
|
||
|
|
public int Compare(object a, object b) => _compareMethod((NavigationItem)a, (NavigationItem)b, _paramValue);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|