Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CommonUI / System / Drawing / SolidBrush.cs / 1305376 / SolidBrush.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Drawing { using System.Runtime.InteropServices; using System.Diagnostics; using System; using Microsoft.Win32; using System.ComponentModel; using System.Drawing.Internal; using System.Runtime.Versioning; ////// /// public sealed class SolidBrush : Brush, ISystemColorTracker { // GDI+ doesn't understand system colors, so we need to cache the value here private Color color = Color.Empty; private bool immutable; /** * Create a new solid fill brush object */ ////// Defines a brush made up of a single color. Brushes are /// used to fill graphics shapes such as rectangles, ellipses, pies, polygons, and paths. /// ////// /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public SolidBrush(Color color) { this.color = color; IntPtr brush = IntPtr.Zero; int status = SafeNativeMethods.Gdip.GdipCreateSolidFill(this.color.ToArgb(), out brush); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); SetNativeBrushInternal(brush); if (color.IsSystemColor) SystemColorTracker.Add(this); } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] internal SolidBrush(Color color, bool immutable) : this(color) { this.immutable = immutable; } ////// Initializes a new instance of the ///class of the specified /// color. /// /// Constructor to initialized this object from a GDI+ Brush native pointer. /// internal SolidBrush( IntPtr nativeBrush ) { Debug.Assert( nativeBrush != IntPtr.Zero, "Initializing native brush with null." ); SetNativeBrushInternal( nativeBrush ); } ////// /// Creates an exact copy of this [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public override object Clone() { IntPtr cloneBrush = IntPtr.Zero; int status = SafeNativeMethods.Gdip.GdipCloneBrush(new HandleRef(this, this.NativeBrush), out cloneBrush); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); // We intentionally lose the "immutable" bit. return new SolidBrush(cloneBrush); } ///. /// protected override void Dispose(bool disposing) { if (!disposing) { immutable = false; } else if (immutable) { throw new ArgumentException(SR.GetString(SR.CantChangeImmutableObjects, "Brush")); } base.Dispose(disposing); } /// /// /// public Color Color { get { if (this.color == Color.Empty) { int colorARGB = 0; int status = SafeNativeMethods.Gdip.GdipGetSolidFillColor(new HandleRef(this, this.NativeBrush), out colorARGB); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); this.color = Color.FromArgb(colorARGB); } // GDI+ doesn't understand system colors, so we can't use GdipGetSolidFillColor in the general case return this.color; } set { if (immutable) { throw new ArgumentException(SR.GetString(SR.CantChangeImmutableObjects, "Brush")); } if( this.color != value ) { Color oldColor = this.color; InternalSetColor(value); // if (value.IsSystemColor && !oldColor.IsSystemColor) { SystemColorTracker.Add(this); } } } } // Sets the color even if the brush is considered immutable private void InternalSetColor(Color value) { int status = SafeNativeMethods.Gdip.GdipSetSolidFillColor(new HandleRef(this, this.NativeBrush), value.ToArgb()); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); this.color = value; } ////// The color of this ///. /// /// void ISystemColorTracker.OnSystemColorChanged() { if( this.NativeBrush != IntPtr.Zero ){ InternalSetColor(color); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Drawing { using System.Runtime.InteropServices; using System.Diagnostics; using System; using Microsoft.Win32; using System.ComponentModel; using System.Drawing.Internal; using System.Runtime.Versioning; ////// /// public sealed class SolidBrush : Brush, ISystemColorTracker { // GDI+ doesn't understand system colors, so we need to cache the value here private Color color = Color.Empty; private bool immutable; /** * Create a new solid fill brush object */ ////// Defines a brush made up of a single color. Brushes are /// used to fill graphics shapes such as rectangles, ellipses, pies, polygons, and paths. /// ////// /// [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public SolidBrush(Color color) { this.color = color; IntPtr brush = IntPtr.Zero; int status = SafeNativeMethods.Gdip.GdipCreateSolidFill(this.color.ToArgb(), out brush); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); SetNativeBrushInternal(brush); if (color.IsSystemColor) SystemColorTracker.Add(this); } [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] internal SolidBrush(Color color, bool immutable) : this(color) { this.immutable = immutable; } ////// Initializes a new instance of the ///class of the specified /// color. /// /// Constructor to initialized this object from a GDI+ Brush native pointer. /// internal SolidBrush( IntPtr nativeBrush ) { Debug.Assert( nativeBrush != IntPtr.Zero, "Initializing native brush with null." ); SetNativeBrushInternal( nativeBrush ); } ////// /// Creates an exact copy of this [ResourceExposure(ResourceScope.Process)] [ResourceConsumption(ResourceScope.Process)] public override object Clone() { IntPtr cloneBrush = IntPtr.Zero; int status = SafeNativeMethods.Gdip.GdipCloneBrush(new HandleRef(this, this.NativeBrush), out cloneBrush); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); // We intentionally lose the "immutable" bit. return new SolidBrush(cloneBrush); } ///. /// protected override void Dispose(bool disposing) { if (!disposing) { immutable = false; } else if (immutable) { throw new ArgumentException(SR.GetString(SR.CantChangeImmutableObjects, "Brush")); } base.Dispose(disposing); } /// /// /// public Color Color { get { if (this.color == Color.Empty) { int colorARGB = 0; int status = SafeNativeMethods.Gdip.GdipGetSolidFillColor(new HandleRef(this, this.NativeBrush), out colorARGB); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); this.color = Color.FromArgb(colorARGB); } // GDI+ doesn't understand system colors, so we can't use GdipGetSolidFillColor in the general case return this.color; } set { if (immutable) { throw new ArgumentException(SR.GetString(SR.CantChangeImmutableObjects, "Brush")); } if( this.color != value ) { Color oldColor = this.color; InternalSetColor(value); // if (value.IsSystemColor && !oldColor.IsSystemColor) { SystemColorTracker.Add(this); } } } } // Sets the color even if the brush is considered immutable private void InternalSetColor(Color value) { int status = SafeNativeMethods.Gdip.GdipSetSolidFillColor(new HandleRef(this, this.NativeBrush), value.ToArgb()); if (status != SafeNativeMethods.Gdip.Ok) throw SafeNativeMethods.Gdip.StatusException(status); this.color = value; } ////// The color of this ///. /// /// void ISystemColorTracker.OnSystemColorChanged() { if( this.NativeBrush != IntPtr.Zero ){ InternalSetColor(color); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TreeBuilderBamlTranslator.cs
- DocumentXmlWriter.cs
- StateChangeEvent.cs
- MetadataUtilsSmi.cs
- FormatConvertedBitmap.cs
- PieceDirectory.cs
- XPathNavigator.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- HandleCollector.cs
- ContractSearchPattern.cs
- SystemThemeKey.cs
- Nodes.cs
- DbProviderFactories.cs
- UInt64.cs
- SimpleApplicationHost.cs
- SchemaImporterExtensionElement.cs
- ExceptionAggregator.cs
- MsmqMessageProperty.cs
- HttpProcessUtility.cs
- EventManager.cs
- CompareInfo.cs
- SQLMoneyStorage.cs
- TimeSpanMinutesConverter.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- CatalogZone.cs
- FixedSOMLineCollection.cs
- TargetException.cs
- StringResourceManager.cs
- SmtpFailedRecipientsException.cs
- IntranetCredentialPolicy.cs
- PipeStream.cs
- WebServiceEnumData.cs
- AvTrace.cs
- CollectionDataContract.cs
- BinaryKeyIdentifierClause.cs
- UnsafeNativeMethods.cs
- CompensationHandlingFilter.cs
- DataGridCellEditEndingEventArgs.cs
- SingleResultAttribute.cs
- WSHttpSecurity.cs
- EventLogPermissionEntry.cs
- SafeThemeHandle.cs
- ManualResetEvent.cs
- DataList.cs
- validationstate.cs
- EmulateRecognizeCompletedEventArgs.cs
- DetailsViewInsertedEventArgs.cs
- UserControl.cs
- SqlDataSourceAdvancedOptionsForm.cs
- PropertyNames.cs
- TextWriter.cs
- Viewport3DAutomationPeer.cs
- FillRuleValidation.cs
- CodeObjectCreateExpression.cs
- DesignerDataSchemaClass.cs
- Vector3DIndependentAnimationStorage.cs
- StrokeNodeEnumerator.cs
- NavigationPropertySingletonExpression.cs
- ProxyHwnd.cs
- CustomErrorCollection.cs
- OdbcConnectionFactory.cs
- WebPartConnectVerb.cs
- DefaultPropertiesToSend.cs
- SmiRequestExecutor.cs
- WorkflowMarkupSerializationManager.cs
- CodeTypeReferenceSerializer.cs
- AttributeCollection.cs
- OleServicesContext.cs
- AnnotationComponentChooser.cs
- ImageAnimator.cs
- SmiContext.cs
- XmlBoundElement.cs
- UnsafeNativeMethodsCLR.cs
- CodeGenerator.cs
- XmlNavigatorStack.cs
- ReadOnlyPropertyMetadata.cs
- OledbConnectionStringbuilder.cs
- FlowSwitch.cs
- ValueUtilsSmi.cs
- Parameter.cs
- ZipIOExtraField.cs
- SignedInfo.cs
- TextTrailingCharacterEllipsis.cs
- ApplicationServicesHostFactory.cs
- PointCollectionValueSerializer.cs
- GPRECT.cs
- IconConverter.cs
- CodePrimitiveExpression.cs
- GrowingArray.cs
- XsltSettings.cs
- XmlSequenceWriter.cs
- TextOptionsInternal.cs
- CharacterString.cs
- KeyBinding.cs
- PropertyChangedEventArgs.cs
- CategoryGridEntry.cs
- MembershipPasswordException.cs
- GeometryCollection.cs
- DesignTimeParseData.cs
- IndexedWhereQueryOperator.cs