Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Framework / MS / Internal / PtsHost / SectionVisual.cs / 1 / SectionVisual.cs
//----------------------------------------------------------------------------
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// File: SectionVisual.cs
//
// Description: Visual representing a section.
//
// History:
// 05/20/2003 : grzegorz - 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 : grzegorz - 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
- DefaultWorkflowTransactionService.cs
- IssuanceLicense.cs
- RotateTransform3D.cs
- HtmlInputText.cs
- SafeFileHandle.cs
- SqlCharStream.cs
- _LocalDataStoreMgr.cs
- IdnMapping.cs
- DecoderExceptionFallback.cs
- EditorPartCollection.cs
- PropertyValueUIItem.cs
- ProfileSettingsCollection.cs
- SudsParser.cs
- DataControlPagerLinkButton.cs
- DataGridCommandEventArgs.cs
- SHA256Managed.cs
- DesignConnection.cs
- Oid.cs
- ObjectDataSourceEventArgs.cs
- PropertyEmitter.cs
- HtmlInputReset.cs
- Table.cs
- HwndHostAutomationPeer.cs
- PopupEventArgs.cs
- Tag.cs
- SchemaConstraints.cs
- SiteMapNodeCollection.cs
- XmlDocumentSerializer.cs
- RealProxy.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- XmlCustomFormatter.cs
- RolePrincipal.cs
- OutputCache.cs
- _DigestClient.cs
- HttpEncoder.cs
- ExternalCalls.cs
- DbReferenceCollection.cs
- RealizationContext.cs
- CurrentTimeZone.cs
- _SslSessionsCache.cs
- AnimationTimeline.cs
- WebPartEventArgs.cs
- PackageDigitalSignature.cs
- ResourcesChangeInfo.cs
- assertwrapper.cs
- TextInfo.cs
- AttributeProviderAttribute.cs
- ContextMenu.cs
- DeadCharTextComposition.cs
- CalendarAutoFormatDialog.cs
- FrameworkReadOnlyPropertyMetadata.cs
- TimeoutException.cs
- ConfigXmlComment.cs
- EntityConnectionStringBuilderItem.cs
- UnsafeNativeMethods.cs
- KeyedCollection.cs
- HttpListenerResponse.cs
- TransformerTypeCollection.cs
- Pair.cs
- Ref.cs
- DocumentViewerConstants.cs
- EdmConstants.cs
- XhtmlConformanceSection.cs
- LinqTreeNodeEvaluator.cs
- ClientData.cs
- OdbcConnectionPoolProviderInfo.cs
- isolationinterop.cs
- TextEffectCollection.cs
- ColumnMap.cs
- OleDbConnectionPoolGroupProviderInfo.cs
- XPathDescendantIterator.cs
- Hash.cs
- TrackingProfileDeserializationException.cs
- FileUtil.cs
- XmlQueryTypeFactory.cs
- SqlDataSourceCommandEventArgs.cs
- EastAsianLunisolarCalendar.cs
- ElapsedEventArgs.cs
- BitmapPalette.cs
- IISMapPath.cs
- SchemaCollectionCompiler.cs
- DataListItem.cs
- LineSegment.cs
- CmsInterop.cs
- SpotLight.cs
- SimpleLine.cs
- PixelFormat.cs
- SamlSerializer.cs
- TransformationRules.cs
- MessageDesigner.cs
- SqlDelegatedTransaction.cs
- SQLInt32.cs
- DictionaryTraceRecord.cs
- SrgsRuleRef.cs
- MdiWindowListItemConverter.cs
- DBPropSet.cs
- RuntimeHelpers.cs
- ChooseAction.cs
- DesignerRegionCollection.cs
- IMembershipProvider.cs