Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / Ink / HighContrastHelper.cs / 1305600 / HighContrastHelper.cs
//---------------------------------------------------------------------------- // // File: HighContrastHelper.cs // // Description: // A helper class for tracking the change of the system high contrast setting. // // Features: // // History: // 06/15/2005 waynezen: Created // // Copyright (C) 2001 by Microsoft Corporation. All rights reserved. // //--------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.Security; using System.Security.Permissions; using System.Windows; using System.Windows.Media; using System.Windows.Threading; namespace MS.Internal.Ink { ////// HighContrastCallback Classs - An abstract helper class /// internal abstract class HighContrastCallback { ////// TurnHighContrastOn /// /// internal abstract void TurnHighContrastOn(Color highContrastColor); ////// TurnHighContrastOff /// internal abstract void TurnHighContrastOff(); ////// Returns the dispatcher if the object is associated to a UIContext. /// internal abstract Dispatcher Dispatcher { get; } } ////// StylusEditingBehavior - a base class for all stylus related editing behaviors /// internal static class HighContrastHelper { //------------------------------------------------------------------------------- // // Constructors // //------------------------------------------------------------------------------- #region Constructors ////// Constructor /// static HighContrastHelper() { __highContrastCallbackList = new List(); __increaseCount = 0; } #endregion Constructors //-------------------------------------------------------------------------------- // // Internal Methods // //------------------------------------------------------------------------------- #region Internal Methods /// /// Register the weak references for HighContrastCallback /// /// internal static void RegisterHighContrastCallback(HighContrastCallback highContrastCallback) { lock ( __lock ) { int count = __highContrastCallbackList.Count; int i = 0; int j = 0; // Every 100 items, We go through the list to remove the references // which have been collected by GC. if ( __increaseCount > CleanTolerance ) { while ( i < count ) { WeakReference weakRef = __highContrastCallbackList[j]; if ( weakRef.IsAlive ) { j++; } else { // Remove the unavaliable reference from the list __highContrastCallbackList.RemoveAt(j); } i++; } // Reset the count __increaseCount = 0; } __highContrastCallbackList.Add(new WeakReference(highContrastCallback)); __increaseCount++; } } ////// The method is called from SystemResources.SystemThemeFilterMessage /// internal static void OnSettingChanged() { UpdateHighContrast(); } #endregion Internal Methods //-------------------------------------------------------------------------------- // // Private Methods // //-------------------------------------------------------------------------------- #region Private Methods ////// UpdateHighContrast which calls out all the registered callbacks. /// private static void UpdateHighContrast() { lock ( __lock ) { int count = __highContrastCallbackList.Count; int i = 0; int j = 0; // Now go through the list, // And we will notify the alive callbacks // or remove the references which have been collected by GC. while ( i < count ) { WeakReference weakRef = __highContrastCallbackList[j]; if ( weakRef.IsAlive ) { HighContrastCallback highContrastCallback = weakRef.Target as HighContrastCallback; if ( highContrastCallback.Dispatcher != null ) { highContrastCallback.Dispatcher.BeginInvoke(DispatcherPriority.Background, new UpdateHighContrastCallback(OnUpdateHighContrast), highContrastCallback); } else { OnUpdateHighContrast(highContrastCallback); } j++; } else { // Remove the dead ones __highContrastCallbackList.RemoveAt(j); } i++; } // Reset the count __increaseCount = 0; } } private delegate void UpdateHighContrastCallback(HighContrastCallback highContrastCallback); ////// Invoke the callback /// /// private static void OnUpdateHighContrast(HighContrastCallback highContrastCallback) { // Get the current setting. bool isHighContrast = SystemParameters.HighContrast; Color windowTextColor = SystemColors.WindowTextColor; if ( isHighContrast ) { highContrastCallback.TurnHighContrastOn(windowTextColor); } else { highContrastCallback.TurnHighContrastOff(); } } #endregion Private Methods //------------------------------------------------------------------------------- // // Private Fields // //-------------------------------------------------------------------------------- #region Private Fields private static object __lock = new object(); private static List__highContrastCallbackList; private static int __increaseCount; private const int CleanTolerance = 100; #endregion Private Fields } } // 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
- UInt32.cs
- MemberRelationshipService.cs
- BitmapEffectGroup.cs
- FileEnumerator.cs
- TextDocumentView.cs
- ShapeTypeface.cs
- SqlMethodTransformer.cs
- AvTraceFormat.cs
- XsltQilFactory.cs
- LoginUtil.cs
- AbandonedMutexException.cs
- DocComment.cs
- AnnotationHelper.cs
- ToolboxComponentsCreatingEventArgs.cs
- TextTreeFixupNode.cs
- TreeViewItemAutomationPeer.cs
- TakeQueryOptionExpression.cs
- ServiceCredentialsElement.cs
- DiscardableAttribute.cs
- BitmapEffectState.cs
- AssertSection.cs
- XmlElementList.cs
- CmsUtils.cs
- PageCodeDomTreeGenerator.cs
- XamlTypeMapperSchemaContext.cs
- DataSysAttribute.cs
- CheckBoxList.cs
- TreeNodeCollection.cs
- ProtocolElementCollection.cs
- AnnotationResourceCollection.cs
- PageParserFilter.cs
- IChannel.cs
- BoundPropertyEntry.cs
- NavigationWindow.cs
- AppDomainProtocolHandler.cs
- DispatcherFrame.cs
- MarkupExtensionReturnTypeAttribute.cs
- SerialErrors.cs
- MgmtConfigurationRecord.cs
- FillBehavior.cs
- SystemIPAddressInformation.cs
- HopperCache.cs
- CrossSiteScriptingValidation.cs
- GradientStop.cs
- XmlNodeReader.cs
- ZipIORawDataFileBlock.cs
- WsrmFault.cs
- PreviewControlDesigner.cs
- ShowExpandedMultiValueConverter.cs
- EditorZone.cs
- DataGridViewCellPaintingEventArgs.cs
- DataGridViewCellFormattingEventArgs.cs
- DocumentSchemaValidator.cs
- RefreshPropertiesAttribute.cs
- EventMappingSettings.cs
- NegotiateStream.cs
- LoginCancelEventArgs.cs
- HttpDictionary.cs
- IpcClientManager.cs
- ZeroOpNode.cs
- TextBoxDesigner.cs
- WindowsSlider.cs
- ArrayHelper.cs
- DataFormat.cs
- EventLogPermissionEntry.cs
- DataTrigger.cs
- DataGridViewColumnHeaderCell.cs
- StrokeRenderer.cs
- DataGridCommandEventArgs.cs
- PersistenceContext.cs
- PLINQETWProvider.cs
- AlignmentYValidation.cs
- BinaryFormatterSinks.cs
- NumericExpr.cs
- DataServiceQueryProvider.cs
- TreeIterators.cs
- LOSFormatter.cs
- ReturnValue.cs
- ManagementClass.cs
- CellParaClient.cs
- MetafileHeaderWmf.cs
- WebPartsPersonalizationAuthorization.cs
- MemoryFailPoint.cs
- Regex.cs
- InternalDispatchObject.cs
- PeerNodeTraceRecord.cs
- VisualTarget.cs
- SqlWriter.cs
- Menu.cs
- HttpModuleAction.cs
- Compiler.cs
- Rules.cs
- Vector3DAnimationBase.cs
- DefinitionBase.cs
- RequiredFieldValidator.cs
- DashStyles.cs
- DataGridLinkButton.cs
- CompositeControl.cs
- GenericPrincipal.cs
- PolyLineSegment.cs