Files
MicrosoftIris/UIX/Microsoft/Iris/ViewItems/Clip.cs
T
2022-03-03 08:14:05 -06:00

229 lines
6.7 KiB
C#

// Decompiled with JetBrains decompiler
// Type: Microsoft.Iris.ViewItems.Clip
// 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.Drawing;
using Microsoft.Iris.Layout;
using Microsoft.Iris.Markup;
using Microsoft.Iris.Render;
using Microsoft.Iris.RenderAPI.Drawing;
using Microsoft.Iris.UI;
using System;
namespace Microsoft.Iris.ViewItems
{
internal class Clip : ViewItem
{
private bool _showNear;
private bool _showFar;
private float _nearOffset;
private float _farOffset;
private float _nearPercent;
private float _farPercent;
private EdgeFade _edgefade;
public Clip()
{
_showNear = true;
_showFar = true;
_farPercent = 1f;
ClipMouse = true;
_edgefade = new EdgeFade();
}
protected override void OnDispose()
{
_edgefade.Dispose();
_edgefade = null;
base.OnDispose();
}
public Orientation Orientation
{
get => _edgefade.Orientation;
set
{
if (Orientation == value)
return;
_edgefade.Orientation = value;
OnOrientationChanged();
FireNotification(NotificationID.Orientation);
}
}
public virtual void OnOrientationChanged()
{
}
public float FadeSize
{
get => _edgefade.FadeSize;
set
{
if (FadeSize == (double)value)
return;
_edgefade.FadeSize = value;
MarkPaintInvalid();
FireNotification(NotificationID.FadeSize);
}
}
public float NearOffset
{
get => _nearOffset;
set
{
if (_nearOffset == (double)value)
return;
_nearOffset = value;
MarkPaintInvalid();
FireNotification(NotificationID.NearOffset);
}
}
public float FarOffset
{
get => _farOffset;
set
{
if (_farOffset == (double)value)
return;
_farOffset = value;
MarkPaintInvalid();
FireNotification(NotificationID.FarOffset);
}
}
public float NearPercent
{
get => _nearPercent;
set
{
if (_nearPercent == (double)value)
return;
_nearPercent = value;
MarkPaintInvalid();
FireNotification(NotificationID.NearPercent);
}
}
public float FarPercent
{
get => _farPercent;
set
{
if (_farPercent == (double)value)
return;
_farPercent = value;
MarkPaintInvalid();
FireNotification(NotificationID.FarPercent);
}
}
public bool ShowNear
{
get => _showNear;
set
{
if (_showNear == value)
return;
_showNear = value;
MarkPaintInvalid();
FireNotification(NotificationID.ShowNear);
}
}
public bool ShowFar
{
get => _showFar;
set
{
if (_showFar == value)
return;
_showFar = value;
MarkPaintInvalid();
FireNotification(NotificationID.ShowFar);
}
}
public Color ColorMask
{
get => _edgefade.ColorMask;
set
{
if (!(_edgefade.ColorMask != value))
return;
_edgefade.ColorMask = value;
FireNotification(NotificationID.ColorMask);
}
}
public float FadeAmount
{
get => _edgefade.FadeAmount;
set
{
if (_edgefade.FadeAmount == (double)value)
return;
_edgefade.FadeAmount = value;
MarkPaintInvalid();
FireNotification(NotificationID.FadeAmount);
UpdateEdgeFade();
}
}
protected override void OnPaint(bool visible)
{
base.OnPaint(visible);
UpdateEdgeFade();
}
protected void UpdateEdgeFade()
{
IVisualContainer visualContainer = VisualContainer;
if (visualContainer == null)
return;
float num = Orientation == Orientation.Horizontal ? VisualSize.X : VisualSize.Y;
_edgefade.MinOffset = num * NearPercent + NearOffset;
_edgefade.MaxOffset = num * (FarPercent - 1f) + FarOffset;
_edgefade.ApplyGradients(visualContainer, UISession.RenderSession, _showNear, _showFar);
}
public override void ClipAreaOfInterest(ref AreaOfInterest interest, Size usedSize)
{
if (interest.Id != AreaOfInterestID.Focus && interest.Id != AreaOfInterestID.FocusOverride)
return;
Rectangle displayRectangle = interest.DisplayRectangle;
int fadeSize = (int)FadeSize;
if (Orientation == Orientation.Horizontal)
{
int right = displayRectangle.Right;
if (ShowNear)
{
displayRectangle.X = Math.Max(displayRectangle.X, fadeSize);
displayRectangle.Width = right - displayRectangle.X;
}
if (ShowFar)
displayRectangle.Width = Math.Min(right, usedSize.Width - fadeSize) - displayRectangle.X;
}
else
{
int bottom = displayRectangle.Bottom;
if (ShowNear)
{
displayRectangle.Y = Math.Max(displayRectangle.Y, fadeSize);
displayRectangle.Height = bottom - displayRectangle.Y;
}
if (ShowFar)
displayRectangle.Height = Math.Min(bottom, usedSize.Height - fadeSize) - displayRectangle.Y;
}
if (displayRectangle.Width > 0 && displayRectangle.Height > 0)
interest.DisplayRectangle = displayRectangle;
else
interest.DisplayRectangle = Rectangle.Zero;
}
}
}