Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / AnimatedTypeHelpers.cs / 1 / AnimatedTypeHelpers.cs
// AnimatedTypeHelpers.cs
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;
namespace MS.Internal.PresentationFramework
{
internal static class AnimatedTypeHelpers
{
#region Interpolation Methods
///
/// To support "By" animations and to make our internal code easily readable
/// this method will interpolate between Auto and non-Auto values treating
/// the Auto value essentially as a zero value for whatever the UnitType
/// of the other value is via the fact that Auto returns 0.0 for the Value
/// property rather than throwing an exception as a Nullable would.
///
/// If both values are Auto, we return Auto.
///
/// The from value.
/// The to value.
/// The progress value used for interpolation.
/// The interpolated value.
///
/// Thrown if one of the values is a percent and the other is not.
///
private static Double InterpolateDouble(Double from, Double to, Double progress)
{
return from + ((to - from) * progress);
}
internal static Thickness InterpolateThickness(Thickness from, Thickness to, double progress)
{
return new Thickness(
InterpolateDouble(from.Left, to.Left, progress),
InterpolateDouble(from.Top, to.Top, progress),
InterpolateDouble(from.Right, to.Right, progress),
InterpolateDouble(from.Bottom, to.Bottom, progress));
}
#endregion
#region Add Methods
private static Double AddDouble(Double value1, Double value2)
{
return value1 + value2;
}
internal static Thickness AddThickness(Thickness value1, Thickness value2)
{
return new Thickness(
AddDouble(value1.Left, value2.Left),
AddDouble(value1.Top, value2.Top),
AddDouble(value1.Right, value2.Right),
AddDouble(value1.Bottom, value2.Bottom));
}
#endregion
#region Subtract Methods
internal static Thickness SubtractThickness(Thickness value1, Thickness value2)
{
return new Thickness(
value1.Left - value2.Left,
value1.Top - value2.Top,
value1.Right - value2.Right,
value1.Bottom - value2.Bottom);
}
#endregion
#region GetSegmentLength Methods
private static Double GetSegmentLengthDouble(Double from, Double to)
{
return Math.Abs(to - from);
}
internal static double GetSegmentLengthThickness(Thickness from, Thickness to)
{
double totalLength =
Math.Pow(GetSegmentLengthDouble(from.Left, to.Left), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Top, to.Top), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Right, to.Right), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Bottom, to.Bottom), 2.0);
return Math.Sqrt(totalLength);
}
#endregion
#region Scale Methods
private static Double ScaleDouble(Double value, Double factor)
{
return value * factor;
}
internal static Thickness ScaleThickness(Thickness value, double factor)
{
return new Thickness(
ScaleDouble(value.Left, factor),
ScaleDouble(value.Top, factor),
ScaleDouble(value.Right, factor),
ScaleDouble(value.Bottom, factor));
}
#endregion
#region IsValidAnimationValue Methods
private static bool IsValidAnimationValueDouble(Double value)
{
if (IsInvalidDouble(value))
{
return false;
}
return true;
}
internal static bool IsValidAnimationValueThickness(Thickness value)
{
// At least one of the sub-values must be an interpolatable length.
if ( IsValidAnimationValueDouble(value.Left)
|| IsValidAnimationValueDouble(value.Top)
|| IsValidAnimationValueDouble(value.Right)
|| IsValidAnimationValueDouble(value.Bottom))
{
return true;
}
return false;
}
#endregion
#region GetZeroValueMethods
private static Double GetZeroValueDouble(Double baseValue)
{
return 0.0;
}
internal static Thickness GetZeroValueThickness(Thickness baseValue)
{
return new Thickness(
GetZeroValueDouble(baseValue.Left),
GetZeroValueDouble(baseValue.Top),
GetZeroValueDouble(baseValue.Right),
GetZeroValueDouble(baseValue.Bottom));
}
#endregion
#region Helpers
private static bool IsInvalidDouble(double value)
{
return Double.IsInfinity(value)
|| DoubleUtil.IsNaN(value);
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
// AnimatedTypeHelpers.cs
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Media3D;
namespace MS.Internal.PresentationFramework
{
internal static class AnimatedTypeHelpers
{
#region Interpolation Methods
///
/// To support "By" animations and to make our internal code easily readable
/// this method will interpolate between Auto and non-Auto values treating
/// the Auto value essentially as a zero value for whatever the UnitType
/// of the other value is via the fact that Auto returns 0.0 for the Value
/// property rather than throwing an exception as a Nullable would.
///
/// If both values are Auto, we return Auto.
///
/// The from value.
/// The to value.
/// The progress value used for interpolation.
/// The interpolated value.
///
/// Thrown if one of the values is a percent and the other is not.
///
private static Double InterpolateDouble(Double from, Double to, Double progress)
{
return from + ((to - from) * progress);
}
internal static Thickness InterpolateThickness(Thickness from, Thickness to, double progress)
{
return new Thickness(
InterpolateDouble(from.Left, to.Left, progress),
InterpolateDouble(from.Top, to.Top, progress),
InterpolateDouble(from.Right, to.Right, progress),
InterpolateDouble(from.Bottom, to.Bottom, progress));
}
#endregion
#region Add Methods
private static Double AddDouble(Double value1, Double value2)
{
return value1 + value2;
}
internal static Thickness AddThickness(Thickness value1, Thickness value2)
{
return new Thickness(
AddDouble(value1.Left, value2.Left),
AddDouble(value1.Top, value2.Top),
AddDouble(value1.Right, value2.Right),
AddDouble(value1.Bottom, value2.Bottom));
}
#endregion
#region Subtract Methods
internal static Thickness SubtractThickness(Thickness value1, Thickness value2)
{
return new Thickness(
value1.Left - value2.Left,
value1.Top - value2.Top,
value1.Right - value2.Right,
value1.Bottom - value2.Bottom);
}
#endregion
#region GetSegmentLength Methods
private static Double GetSegmentLengthDouble(Double from, Double to)
{
return Math.Abs(to - from);
}
internal static double GetSegmentLengthThickness(Thickness from, Thickness to)
{
double totalLength =
Math.Pow(GetSegmentLengthDouble(from.Left, to.Left), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Top, to.Top), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Right, to.Right), 2.0)
+ Math.Pow(GetSegmentLengthDouble(from.Bottom, to.Bottom), 2.0);
return Math.Sqrt(totalLength);
}
#endregion
#region Scale Methods
private static Double ScaleDouble(Double value, Double factor)
{
return value * factor;
}
internal static Thickness ScaleThickness(Thickness value, double factor)
{
return new Thickness(
ScaleDouble(value.Left, factor),
ScaleDouble(value.Top, factor),
ScaleDouble(value.Right, factor),
ScaleDouble(value.Bottom, factor));
}
#endregion
#region IsValidAnimationValue Methods
private static bool IsValidAnimationValueDouble(Double value)
{
if (IsInvalidDouble(value))
{
return false;
}
return true;
}
internal static bool IsValidAnimationValueThickness(Thickness value)
{
// At least one of the sub-values must be an interpolatable length.
if ( IsValidAnimationValueDouble(value.Left)
|| IsValidAnimationValueDouble(value.Top)
|| IsValidAnimationValueDouble(value.Right)
|| IsValidAnimationValueDouble(value.Bottom))
{
return true;
}
return false;
}
#endregion
#region GetZeroValueMethods
private static Double GetZeroValueDouble(Double baseValue)
{
return 0.0;
}
internal static Thickness GetZeroValueThickness(Thickness baseValue)
{
return new Thickness(
GetZeroValueDouble(baseValue.Left),
GetZeroValueDouble(baseValue.Top),
GetZeroValueDouble(baseValue.Right),
GetZeroValueDouble(baseValue.Bottom));
}
#endregion
#region Helpers
private static bool IsInvalidDouble(double value)
{
return Double.IsInfinity(value)
|| DoubleUtil.IsNaN(value);
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ChangeConflicts.cs
- IIS7UserPrincipal.cs
- UnregisterInfo.cs
- XamlReaderHelper.cs
- ExtenderControl.cs
- Vector3DKeyFrameCollection.cs
- ProfileSettingsCollection.cs
- CriticalFinalizerObject.cs
- QilCloneVisitor.cs
- RecordManager.cs
- XpsFilter.cs
- DispatcherExceptionEventArgs.cs
- RuleAttributes.cs
- Pts.cs
- SmiEventSink.cs
- HttpContext.cs
- BamlRecordReader.cs
- UInt64Converter.cs
- WebPartAuthorizationEventArgs.cs
- MeasureItemEvent.cs
- PeerCredentialElement.cs
- DiscoveryClient.cs
- CornerRadius.cs
- EncodingTable.cs
- SQLMembershipProvider.cs
- FlowNode.cs
- IdentityManager.cs
- XmlSignificantWhitespace.cs
- XmlSchemaSimpleContentExtension.cs
- OleCmdHelper.cs
- SecurityKeyType.cs
- EdmItemError.cs
- BeginStoryboard.cs
- StateItem.cs
- FactoryId.cs
- ControlCachePolicy.cs
- BulletedList.cs
- HuffModule.cs
- ObservableCollectionDefaultValueFactory.cs
- InfoCardKeyedHashAlgorithm.cs
- DeclarativeCatalogPart.cs
- UserMapPath.cs
- ClientSettingsStore.cs
- EndPoint.cs
- LoadRetryHandler.cs
- DbConnectionStringCommon.cs
- ServicePointManager.cs
- XmlDownloadManager.cs
- entitydatasourceentitysetnameconverter.cs
- KeyEvent.cs
- DataGridViewTextBoxEditingControl.cs
- ModelVisual3D.cs
- IssuedTokenParametersElement.cs
- ItemCollection.cs
- MenuScrollingVisibilityConverter.cs
- BackgroundWorker.cs
- FixedTextPointer.cs
- SchemaTypeEmitter.cs
- CriticalHandle.cs
- COM2IProvidePropertyBuilderHandler.cs
- WebBrowser.cs
- ClientApiGenerator.cs
- ControlHelper.cs
- XmlAttributeAttribute.cs
- SqlRecordBuffer.cs
- Hyperlink.cs
- DataGridViewComboBoxCell.cs
- InternalConfigConfigurationFactory.cs
- DeviceSpecificChoiceCollection.cs
- TypeUsage.cs
- ThemeInfoAttribute.cs
- ByteStreamMessage.cs
- Geometry3D.cs
- OdbcHandle.cs
- ToolStripScrollButton.cs
- OpCopier.cs
- SubstitutionDesigner.cs
- BitmapInitialize.cs
- IndexedGlyphRun.cs
- MethodBody.cs
- UnsafeNativeMethods.cs
- BitmapFrameEncode.cs
- EncoderReplacementFallback.cs
- PixelFormatConverter.cs
- CSharpCodeProvider.cs
- StructuredProperty.cs
- WindowsAuthenticationEventArgs.cs
- ExpressionBuilderCollection.cs
- PointLightBase.cs
- RowSpanVector.cs
- DrawingState.cs
- BitmapData.cs
- ValidatorCollection.cs
- TableColumn.cs
- CellParaClient.cs
- TeredoHelper.cs
- SqlNotificationRequest.cs
- SystemIPGlobalProperties.cs
- StrongNamePublicKeyBlob.cs
- TileBrush.cs