Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / PtsHost / SectionVisual.cs / 1305600 / SectionVisual.cs
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// File: SectionVisual.cs
//
// Description: Visual representing a section.
//
// History:
// 05/20/2003 : [....] - created.
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
using MS.Internal.Text;
using MS.Internal.PtsHost.UnsafeNativeMethods;
namespace MS.Internal.PtsHost
{
// ---------------------------------------------------------------------
// Visual representing a section.
// ---------------------------------------------------------------------
internal class SectionVisual : DrawingVisual
{
// ------------------------------------------------------------------
// Constructor.
// -----------------------------------------------------------------
internal SectionVisual()
{
}
// ------------------------------------------------------------------
// Set information about column rules that are necessary for rendering
// process. Draw column rules if necessary.
//
// arrayColumnDesc - column description including rectangle coordinates, etc
// columnVStart - vertical start coordinate of column rule
// columnHeight - height of column rule
// columnProperties - column properties.
// ------------------------------------------------------------------
internal void DrawColumnRules(ref PTS.FSTRACKDESCRIPTION[] arrayColumnDesc, double columnVStart, double columnHeight, ColumnPropertiesGroup columnProperties)
{
// Compute column rules data first.
Point[] rulePositions = null;
double ruleWidth = columnProperties.ColumnRuleWidth;
if (arrayColumnDesc.Length > 1)
{
if (ruleWidth > 0)
{
int gapWidth = (arrayColumnDesc[1].fsrc.u - (arrayColumnDesc[0].fsrc.u + arrayColumnDesc[0].fsrc.du)) / 2;
rulePositions = new Point[(arrayColumnDesc.Length - 1)*2];
for (int index = 1; index < arrayColumnDesc.Length; index++)
{
double u = TextDpi.FromTextDpi(arrayColumnDesc[index].fsrc.u - gapWidth);
double v = columnVStart;
double dv = columnHeight;
rulePositions[(index-1)*2].X = u;
rulePositions[(index-1)*2].Y = v;
rulePositions[(index-1)*2+1].X = u;
rulePositions[(index-1)*2+1].Y = v + dv;
}
}
}
// Check if update of the visual render data is needed.
bool needsUpdate = _ruleWidth != ruleWidth;
if (!needsUpdate && _rulePositions != rulePositions)
{
int prevSize = _rulePositions == null ? 0 : _rulePositions.Length;
int newSize = rulePositions == null ? 0 : rulePositions.Length;
if (prevSize == newSize)
{
for (int index = 0; index < rulePositions.Length; index++)
{
if (!DoubleUtil.AreClose(rulePositions[index].X, _rulePositions[index].X) ||
!DoubleUtil.AreClose(rulePositions[index].Y, _rulePositions[index].Y))
{
needsUpdate = true;
break;
}
}
}
else
{
needsUpdate = true;
}
}
// Draw column rules if necessary
if (needsUpdate)
{
_ruleWidth = ruleWidth;
_rulePositions = rulePositions;
// Open DrawingContext and draw background.
// If background is not set, Open will clear the render data, but it
// will preserve visual children.
using (DrawingContext dc = RenderOpen())
{
if (rulePositions != null)
{
// We do not want to cause the user's Brush to become frozen when we
// freeze pen below, therefore we make our own copy of the Brush if
// it is not already frozen.
Brush columnRuleBrush = (Brush)FreezableOperations.GetAsFrozenIfPossible(columnProperties.ColumnRuleBrush);
Pen pen = new Pen(columnRuleBrush, ruleWidth);
// Freeze the pen if possible. Doing this avoids the overhead of
// maintaining changed handlers.
if (pen.CanFreeze) { pen.Freeze(); }
for (int index = 0; index < rulePositions.Length; index += 2)
{
dc.DrawLine(pen, rulePositions[index], rulePositions[index + 1]);
}
}
}
}
}
// -----------------------------------------------------------------
// Column rules positions
// ------------------------------------------------------------------
private Point[] _rulePositions;
// -----------------------------------------------------------------
// Pen for column rule.
// -----------------------------------------------------------------
private double _ruleWidth;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// File: SectionVisual.cs
//
// Description: Visual representing a section.
//
// History:
// 05/20/2003 : [....] - created.
//
//---------------------------------------------------------------------------
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
using MS.Internal.Text;
using MS.Internal.PtsHost.UnsafeNativeMethods;
namespace MS.Internal.PtsHost
{
// ---------------------------------------------------------------------
// Visual representing a section.
// ---------------------------------------------------------------------
internal class SectionVisual : DrawingVisual
{
// ------------------------------------------------------------------
// Constructor.
// -----------------------------------------------------------------
internal SectionVisual()
{
}
// ------------------------------------------------------------------
// Set information about column rules that are necessary for rendering
// process. Draw column rules if necessary.
//
// arrayColumnDesc - column description including rectangle coordinates, etc
// columnVStart - vertical start coordinate of column rule
// columnHeight - height of column rule
// columnProperties - column properties.
// ------------------------------------------------------------------
internal void DrawColumnRules(ref PTS.FSTRACKDESCRIPTION[] arrayColumnDesc, double columnVStart, double columnHeight, ColumnPropertiesGroup columnProperties)
{
// Compute column rules data first.
Point[] rulePositions = null;
double ruleWidth = columnProperties.ColumnRuleWidth;
if (arrayColumnDesc.Length > 1)
{
if (ruleWidth > 0)
{
int gapWidth = (arrayColumnDesc[1].fsrc.u - (arrayColumnDesc[0].fsrc.u + arrayColumnDesc[0].fsrc.du)) / 2;
rulePositions = new Point[(arrayColumnDesc.Length - 1)*2];
for (int index = 1; index < arrayColumnDesc.Length; index++)
{
double u = TextDpi.FromTextDpi(arrayColumnDesc[index].fsrc.u - gapWidth);
double v = columnVStart;
double dv = columnHeight;
rulePositions[(index-1)*2].X = u;
rulePositions[(index-1)*2].Y = v;
rulePositions[(index-1)*2+1].X = u;
rulePositions[(index-1)*2+1].Y = v + dv;
}
}
}
// Check if update of the visual render data is needed.
bool needsUpdate = _ruleWidth != ruleWidth;
if (!needsUpdate && _rulePositions != rulePositions)
{
int prevSize = _rulePositions == null ? 0 : _rulePositions.Length;
int newSize = rulePositions == null ? 0 : rulePositions.Length;
if (prevSize == newSize)
{
for (int index = 0; index < rulePositions.Length; index++)
{
if (!DoubleUtil.AreClose(rulePositions[index].X, _rulePositions[index].X) ||
!DoubleUtil.AreClose(rulePositions[index].Y, _rulePositions[index].Y))
{
needsUpdate = true;
break;
}
}
}
else
{
needsUpdate = true;
}
}
// Draw column rules if necessary
if (needsUpdate)
{
_ruleWidth = ruleWidth;
_rulePositions = rulePositions;
// Open DrawingContext and draw background.
// If background is not set, Open will clear the render data, but it
// will preserve visual children.
using (DrawingContext dc = RenderOpen())
{
if (rulePositions != null)
{
// We do not want to cause the user's Brush to become frozen when we
// freeze pen below, therefore we make our own copy of the Brush if
// it is not already frozen.
Brush columnRuleBrush = (Brush)FreezableOperations.GetAsFrozenIfPossible(columnProperties.ColumnRuleBrush);
Pen pen = new Pen(columnRuleBrush, ruleWidth);
// Freeze the pen if possible. Doing this avoids the overhead of
// maintaining changed handlers.
if (pen.CanFreeze) { pen.Freeze(); }
for (int index = 0; index < rulePositions.Length; index += 2)
{
dc.DrawLine(pen, rulePositions[index], rulePositions[index + 1]);
}
}
}
}
}
// -----------------------------------------------------------------
// Column rules positions
// ------------------------------------------------------------------
private Point[] _rulePositions;
// -----------------------------------------------------------------
// Pen for column rule.
// -----------------------------------------------------------------
private double _ruleWidth;
}
}
// 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
- Bitmap.cs
- DataBinding.cs
- RemoteWebConfigurationHostStream.cs
- PriorityBindingExpression.cs
- StateWorkerRequest.cs
- WorkflowTransactionOptions.cs
- DataGridViewTextBoxColumn.cs
- ListViewItem.cs
- ISessionStateStore.cs
- _DisconnectOverlappedAsyncResult.cs
- DispatcherObject.cs
- ConstNode.cs
- DBSqlParserTableCollection.cs
- XmlSerializerFactory.cs
- GlyphManager.cs
- CodeObject.cs
- FormatConvertedBitmap.cs
- UInt16.cs
- ClientBase.cs
- DetailsViewModeEventArgs.cs
- SByte.cs
- Italic.cs
- ScriptingJsonSerializationSection.cs
- ExclusiveTcpListener.cs
- DataGridViewAccessibleObject.cs
- NonClientArea.cs
- FormatSettings.cs
- RectAnimationUsingKeyFrames.cs
- ToolStripDropDownItem.cs
- SmtpFailedRecipientsException.cs
- ListViewInsertEventArgs.cs
- TypeNameConverter.cs
- MetadataArtifactLoader.cs
- Directory.cs
- PersistenceMetadataNamespace.cs
- XomlCompilerHelpers.cs
- ServicePointManagerElement.cs
- SafeEventLogWriteHandle.cs
- SHA512Cng.cs
- KeyEventArgs.cs
- TextDecorationCollectionConverter.cs
- HttpListenerElement.cs
- AccessText.cs
- XmlCompatibilityReader.cs
- SimpleExpression.cs
- AtomContentProperty.cs
- AccessorTable.cs
- RowParagraph.cs
- StreamWithDictionary.cs
- ValueSerializerAttribute.cs
- XPathException.cs
- RequestDescription.cs
- XmlRawWriter.cs
- DefaultShape.cs
- PhonemeEventArgs.cs
- InlinedLocationReference.cs
- RuntimeConfig.cs
- TextTreeRootNode.cs
- DATA_BLOB.cs
- GridItemCollection.cs
- CodeTryCatchFinallyStatement.cs
- HMACSHA1.cs
- SingleConverter.cs
- EndpointAddress10.cs
- PrinterResolution.cs
- FeatureSupport.cs
- Cell.cs
- DoubleAnimationBase.cs
- CryptoHelper.cs
- ActiveXContainer.cs
- ImageBrush.cs
- DecimalAnimation.cs
- MatcherBuilder.cs
- UIElement3D.cs
- X509Certificate2Collection.cs
- UInt64Storage.cs
- ComponentManagerBroker.cs
- ItemsChangedEventArgs.cs
- SmtpNetworkElement.cs
- InvalidCastException.cs
- FrameworkElement.cs
- ToolTip.cs
- HtmlHead.cs
- RoutedEventArgs.cs
- NeutralResourcesLanguageAttribute.cs
- QilReplaceVisitor.cs
- ExceptionCollection.cs
- XsltFunctions.cs
- HuffmanTree.cs
- HttpsChannelListener.cs
- PersistencePipeline.cs
- UserNameSecurityToken.cs
- DataControlFieldHeaderCell.cs
- RoleManagerModule.cs
- GridItemProviderWrapper.cs
- MessageQueueException.cs
- ZoneLinkButton.cs
- SecureEnvironment.cs
- Int16Converter.cs
- XmlValidatingReaderImpl.cs