Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- BamlResourceContent.cs
- JsonWriterDelegator.cs
- WebFormsRootDesigner.cs
- OneOfTypeConst.cs
- QilInvoke.cs
- basevalidator.cs
- SiteMapPath.cs
- ScopeElementCollection.cs
- ReaderWriterLockWrapper.cs
- ParserOptions.cs
- CryptoConfig.cs
- SingleObjectCollection.cs
- SchemaMerger.cs
- RoleGroupCollectionEditor.cs
- DocumentXPathNavigator.cs
- KoreanLunisolarCalendar.cs
- TimeSpanOrInfiniteValidator.cs
- RIPEMD160Managed.cs
- COM2ExtendedTypeConverter.cs
- BuildResultCache.cs
- WindowsListViewGroup.cs
- StylusPlugin.cs
- WebSysDefaultValueAttribute.cs
- TransformProviderWrapper.cs
- HtmlObjectListAdapter.cs
- StrongNameUtility.cs
- IDispatchConstantAttribute.cs
- CalendarDay.cs
- linebase.cs
- TransformPatternIdentifiers.cs
- ShutDownListener.cs
- DataTemplateSelector.cs
- KnowledgeBase.cs
- ServiceThrottlingElement.cs
- TemplateBindingExpressionConverter.cs
- thaishape.cs
- TimeSpanParse.cs
- CreateUserWizardStep.cs
- Logging.cs
- BaseCodeDomTreeGenerator.cs
- Int16Storage.cs
- XPathNodeHelper.cs
- HashCryptoHandle.cs
- SplitterCancelEvent.cs
- DSGeneratorProblem.cs
- dbenumerator.cs
- GenericsInstances.cs
- SystemColorTracker.cs
- Visual3D.cs
- Point3DCollection.cs
- XmlEntity.cs
- PolyLineSegment.cs
- DeploymentSection.cs
- DataGridViewColumnHeaderCell.cs
- SqlCrossApplyToCrossJoin.cs
- XmlUnspecifiedAttribute.cs
- WebBrowsableAttribute.cs
- FilterRepeater.cs
- DateTimeValueSerializerContext.cs
- GZipUtils.cs
- RC2.cs
- DbProviderSpecificTypePropertyAttribute.cs
- SspiNegotiationTokenProviderState.cs
- HttpClientCertificate.cs
- ConsumerConnectionPointCollection.cs
- TogglePattern.cs
- PrintPageEvent.cs
- FixedDocumentPaginator.cs
- BindingBase.cs
- ConfigurationStrings.cs
- EncoderParameter.cs
- BitmapEffectInput.cs
- OletxVolatileEnlistment.cs
- MetaModel.cs
- TextBlockAutomationPeer.cs
- PrintDocument.cs
- MetricEntry.cs
- Hashtable.cs
- CommonGetThemePartSize.cs
- WorkflowOperationBehavior.cs
- DataGridViewCellStyleContentChangedEventArgs.cs
- PartialCachingAttribute.cs
- WebHttpDispatchOperationSelector.cs
- TreeNodeStyleCollection.cs
- NullableDecimalSumAggregationOperator.cs
- FileDetails.cs
- ArgumentOutOfRangeException.cs
- RequestCachingSection.cs
- EntityClientCacheKey.cs
- HttpCachePolicy.cs
- SortedList.cs
- UnmanagedHandle.cs
- CodeTypeDeclaration.cs
- Exceptions.cs
- __Error.cs
- TreeViewCancelEvent.cs
- DbParameterHelper.cs
- PasswordBox.cs
- SHA384Managed.cs
- Evidence.cs