Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / CommonUI / System / Drawing / SolidBrush.cs / 1 / SolidBrush.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*************************************************************************\
*
* Copyright (c) 1998-1999, Microsoft Corp. All Rights Reserved.
*
* Module Name:
*
* SolidBrush.cs
*
* Abstract:
*
* COM+ wrapper for GDI+ SolidBrush objects
*
* Revision History:
*
* 12/15/1998 [....]
* Created it.
*
\**************************************************************************/
namespace System.Drawing {
using System.Runtime.InteropServices;
using System.Diagnostics;
using System;
using Microsoft.Win32;
using System.ComponentModel;
using System.Drawing.Internal;
///
///
///
/// Defines a brush made up of a single color. Brushes are
/// used to fill graphics shapes such as rectangles, ellipses, pies, polygons, and paths.
///
///
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
*/
///
///
///
/// Initializes a new instance of the class of the specified
/// color.
///
///
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);
SetNativeBrush(brush);
if (color.IsSystemColor)
SystemColorTracker.Add(this);
}
internal SolidBrush(Color color, bool immutable) : this(color) {
this.immutable = immutable;
}
///
/// 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." );
SetNativeBrush( nativeBrush );
}
///
///
/// Creates an exact copy of this .
///
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);
}
///
///
///
/// The color of this .
///
///
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;
}
///
///
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SocketPermission.cs
- ImmutableCommunicationTimeouts.cs
- ReferenceEqualityComparer.cs
- RawStylusInput.cs
- _AutoWebProxyScriptEngine.cs
- DataGridViewDataConnection.cs
- ApplicationManager.cs
- EdmEntityTypeAttribute.cs
- XsdBuildProvider.cs
- SystemUdpStatistics.cs
- MsmqQueue.cs
- HostingMessageProperty.cs
- ApplicationDirectoryMembershipCondition.cs
- ReferencedType.cs
- CompiledQueryCacheEntry.cs
- HyperlinkAutomationPeer.cs
- LayoutEngine.cs
- StrongBox.cs
- AsymmetricSignatureDeformatter.cs
- TextRangeEdit.cs
- TextDecoration.cs
- ConnectionManagementElementCollection.cs
- XmlChildEnumerator.cs
- ToolStripSystemRenderer.cs
- PropertyChangedEventManager.cs
- ObservableDictionary.cs
- CommandDesigner.cs
- Panel.cs
- MethodBuilder.cs
- DSASignatureDeformatter.cs
- WindowsGrip.cs
- TabControlCancelEvent.cs
- RightNameExpirationInfoPair.cs
- SafeRightsManagementSessionHandle.cs
- Accessors.cs
- Transform3DGroup.cs
- SplineKeyFrames.cs
- OperationDescription.cs
- TrueReadOnlyCollection.cs
- __Filters.cs
- WebErrorHandler.cs
- MsmqIntegrationSecurityElement.cs
- PnrpPermission.cs
- CookieProtection.cs
- TypeReference.cs
- SafeViewOfFileHandle.cs
- NullableDoubleSumAggregationOperator.cs
- RuntimeVariablesExpression.cs
- CultureInfoConverter.cs
- DynamicPropertyReader.cs
- IISUnsafeMethods.cs
- AmbientLight.cs
- WebHeaderCollection.cs
- ActivationServices.cs
- ChooseAction.cs
- ProtectedConfiguration.cs
- ListViewInsertedEventArgs.cs
- TraceShell.cs
- assertwrapper.cs
- ProtocolsConfigurationEntry.cs
- Panel.cs
- HyperLinkStyle.cs
- RegisteredExpandoAttribute.cs
- DataBoundLiteralControl.cs
- MobileUserControlDesigner.cs
- ConfigurationManagerHelperFactory.cs
- AddingNewEventArgs.cs
- WorkflowOperationBehavior.cs
- SourceCollection.cs
- RegexCompilationInfo.cs
- ThousandthOfEmRealPoints.cs
- InvalidEnumArgumentException.cs
- SqlDataSourceCache.cs
- WebConfigurationManager.cs
- CheckBoxPopupAdapter.cs
- Errors.cs
- WorkingDirectoryEditor.cs
- ElementNotEnabledException.cs
- ObjectSecurity.cs
- AccessibleObject.cs
- PartialClassGenerationTaskInternal.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- HttpWebRequest.cs
- Win32Native.cs
- StandardToolWindows.cs
- DataStorage.cs
- RegexGroupCollection.cs
- DataTableTypeConverter.cs
- MULTI_QI.cs
- IncrementalCompileAnalyzer.cs
- WeakEventTable.cs
- WebConfigurationManager.cs
- QilLiteral.cs
- SimpleMailWebEventProvider.cs
- ByteStack.cs
- Expressions.cs
- grammarelement.cs
- WindowsTab.cs
- ProviderConnectionPoint.cs
- TypeListConverter.cs