Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / CommonUI / System / Drawing / ToolboxBitmapAttribute.cs / 1305376 / ToolboxBitmapAttribute.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Drawing {
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System;
using System.IO;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Runtime.Versioning;
///
///
/// ToolboxBitmapAttribute defines the images associated with
/// a specified component. The component can offer a small
/// and large image (large is optional).
///
///
[AttributeUsage(AttributeTargets.Class)]
public class ToolboxBitmapAttribute : Attribute {
///
///
/// The small image for this component
///
private Image smallImage;
///
///
/// The large image for this component.
///
private Image largeImage;
///
///
/// The default size of the large image.
///
private static readonly Point largeDim = new Point(32, 32);
///
///
/// The default size of the large image.
///
private static readonly Point smallDim = new Point(16, 16);
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(string imageFile)
: this(GetImageFromFile(imageFile, false), GetImageFromFile(imageFile, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(Type t)
: this(GetImageFromResource(t, null, false), GetImageFromResource(t, null, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(Type t, string name)
: this(GetImageFromResource(t, name, false), GetImageFromResource(t, name, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
private ToolboxBitmapAttribute(Image smallImage, Image largeImage) {
this.smallImage = smallImage;
this.largeImage = largeImage;
}
///
///
/// [To be supplied.]
///
public override bool Equals(object value) {
if (value == this) {
return true;
}
ToolboxBitmapAttribute attr = value as ToolboxBitmapAttribute;
if (attr != null) {
return attr.smallImage == smallImage && attr.largeImage == largeImage;
}
return false;
}
///
///
/// [To be supplied.]
///
public override int GetHashCode() {
return base.GetHashCode();
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(object component) {
return GetImage(component, true);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(object component, bool large) {
if (component != null) {
return GetImage(component.GetType(), large);
}
return null;
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type) {
return GetImage(type, false);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type, bool large) {
return GetImage(type, null, large);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type, string imgName, bool large) {
if ((large && largeImage == null) ||
(!large && smallImage == null)) {
Point largeDim = new Point(32, 32);
Image img = null;
if (large) {
img = largeImage;
}
else {
img = smallImage;
}
if (img == null) {
img = GetImageFromResource(type, imgName, large);
}
//last resort for large images.
if (large && largeImage == null && smallImage != null) {
img = new Bitmap((Bitmap)smallImage, largeDim.X, largeDim.Y);
}
Bitmap b = img as Bitmap;
if (b != null) {
MakeBackgroundAlphaZero(b);
}
if (img == null) {
img = DefaultComponent.GetImage(type, large);
}
if (large) {
largeImage = img;
}
else {
smallImage = img;
}
}
Image toReturn = (large) ? largeImage : smallImage;
if (this.Equals(Default)) {
largeImage = null;
smallImage = null;
}
return toReturn;
}
//helper to get the right icon from the given stream that represents an icon
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
private static Image GetIconFromStream(Stream stream, bool large) {
if (stream == null) {
return null;
}
Icon ico = new Icon(stream);
Icon sizedico = new Icon(ico, large ? new Size(largeDim.X, largeDim.Y):new Size(smallDim.X, smallDim.Y));
return sizedico.ToBitmap();
}
// Just forwards to Image.FromFile eating any non-critical exceptions that may result.
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
private static Image GetImageFromFile(string imageFile, bool large) {
Image image = null;
try {
if (imageFile != null) {
string ext = Path.GetExtension(imageFile);
if (ext != null && string.Equals(ext, ".ico", StringComparison.OrdinalIgnoreCase))
{
//ico files support both large and small, so we respec the large flag here.
FileStream reader = System.IO.File.Open(imageFile, FileMode.Open);
if (reader != null) {
try {
image = GetIconFromStream(reader, large);
}
finally {
reader.Close();
}
}
}
else if (!large) {
//we only read small from non-ico files.
image = Image.FromFile(imageFile);
}
}
} catch (Exception e) {
if (ClientUtils.IsCriticalException(e)) {
throw;
}
Debug.Fail("Failed to load toolbox image '" + imageFile + "':\r\n" + e.ToString());
}
return image;
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static private Image GetBitmapFromResource(Type t, string bitmapname, bool large) {
if (bitmapname == null) {
return null;
}
Image img = null;
// load the image from the manifest resources.
//
Stream stream = t.Module.Assembly.GetManifestResourceStream(t, bitmapname);
if (stream != null) {
Bitmap b = new Bitmap(stream);
img = b;
MakeBackgroundAlphaZero(b);
if (large) {
img = new Bitmap(b, largeDim.X, largeDim.Y);
}
}
return img;
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static private Image GetIconFromResource(Type t, string bitmapname, bool large) {
if (bitmapname == null) {
return null;
}
return GetIconFromStream(t.Module.Assembly.GetManifestResourceStream(t, bitmapname), large);
}
///
///
/// [To be supplied.]
///
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public static Image GetImageFromResource(Type t, string imageName, bool large) {
Image img = null;
try {
string name = imageName;
string iconname = null;
string bmpname = null;
string rawbmpname = null;
// if we didn't get a name, use the class name
//
if (name == null) {
name = t.FullName;
int indexDot = name.LastIndexOf('.');
if (indexDot != -1) {
name = name.Substring(indexDot + 1);
}
iconname = name + ".ico";
bmpname = name + ".bmp";
}
else {
if (String.Compare(Path.GetExtension(imageName), ".ico", true, CultureInfo.CurrentCulture) == 0) {
iconname = name;
}
else if (String.Compare(Path.GetExtension(imageName), ".bmp", true, CultureInfo.CurrentCulture) == 0) {
bmpname = name;
}
else {
//we dont recognize the name as either bmp or ico. we need to try three things.
//1. the name as a bitmap (back compat)
//2. name+.bmp
//3. name+.ico
rawbmpname = name;
bmpname = name + ".bmp";
iconname = name + ".ico";
}
}
img = GetBitmapFromResource(t, rawbmpname, large);
if (img == null) {
img = GetBitmapFromResource(t, bmpname, large);
}
if (img == null) {
img = GetIconFromResource(t, iconname, large);
}
}
catch (Exception e) {
if (t == null) {
Debug.Fail("Failed to load toolbox image for null type:\r\n" + e.ToString());
}
else {
Debug.Fail("Failed to load toolbox image for '" + t.FullName + "':\r\n" + e.ToString());
}
}
return img;
}
private static void MakeBackgroundAlphaZero(Bitmap img) {
Color bottomLeft = img.GetPixel(0, img.Height - 1);
img.MakeTransparent();
Color newBottomLeft = Color.FromArgb(0, bottomLeft);
img.SetPixel(0, img.Height - 1, newBottomLeft);
}
///
///
/// Default name is null
///
[SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
public static readonly ToolboxBitmapAttribute Default = new ToolboxBitmapAttribute((Image)null, (Image)null);
private static readonly ToolboxBitmapAttribute DefaultComponent;
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static ToolboxBitmapAttribute() {
//Fix for Dev10 560430. When we call Gdip.DummyFunction, JIT will make sure Gdip..cctor will be called before
SafeNativeMethods.Gdip.DummyFunction();
Bitmap bitmap = null;
Stream stream = typeof(ToolboxBitmapAttribute).Module.Assembly.GetManifestResourceStream(typeof(ToolboxBitmapAttribute), "DefaultComponent.bmp");
if (stream != null) {
bitmap = new Bitmap(stream);
MakeBackgroundAlphaZero(bitmap);
}
DefaultComponent = new ToolboxBitmapAttribute(bitmap, null);
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Drawing {
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System;
using System.IO;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using System.Globalization;
using System.Runtime.Versioning;
///
///
/// ToolboxBitmapAttribute defines the images associated with
/// a specified component. The component can offer a small
/// and large image (large is optional).
///
///
[AttributeUsage(AttributeTargets.Class)]
public class ToolboxBitmapAttribute : Attribute {
///
///
/// The small image for this component
///
private Image smallImage;
///
///
/// The large image for this component.
///
private Image largeImage;
///
///
/// The default size of the large image.
///
private static readonly Point largeDim = new Point(32, 32);
///
///
/// The default size of the large image.
///
private static readonly Point smallDim = new Point(16, 16);
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(string imageFile)
: this(GetImageFromFile(imageFile, false), GetImageFromFile(imageFile, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(Type t)
: this(GetImageFromResource(t, null, false), GetImageFromResource(t, null, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public ToolboxBitmapAttribute(Type t, string name)
: this(GetImageFromResource(t, name, false), GetImageFromResource(t, name, true)) {
}
///
///
/// Constructs a new ToolboxBitmapAttribute.
///
private ToolboxBitmapAttribute(Image smallImage, Image largeImage) {
this.smallImage = smallImage;
this.largeImage = largeImage;
}
///
///
/// [To be supplied.]
///
public override bool Equals(object value) {
if (value == this) {
return true;
}
ToolboxBitmapAttribute attr = value as ToolboxBitmapAttribute;
if (attr != null) {
return attr.smallImage == smallImage && attr.largeImage == largeImage;
}
return false;
}
///
///
/// [To be supplied.]
///
public override int GetHashCode() {
return base.GetHashCode();
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(object component) {
return GetImage(component, true);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(object component, bool large) {
if (component != null) {
return GetImage(component.GetType(), large);
}
return null;
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type) {
return GetImage(type, false);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type, bool large) {
return GetImage(type, null, large);
}
///
///
/// [To be supplied.]
///
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public Image GetImage(Type type, string imgName, bool large) {
if ((large && largeImage == null) ||
(!large && smallImage == null)) {
Point largeDim = new Point(32, 32);
Image img = null;
if (large) {
img = largeImage;
}
else {
img = smallImage;
}
if (img == null) {
img = GetImageFromResource(type, imgName, large);
}
//last resort for large images.
if (large && largeImage == null && smallImage != null) {
img = new Bitmap((Bitmap)smallImage, largeDim.X, largeDim.Y);
}
Bitmap b = img as Bitmap;
if (b != null) {
MakeBackgroundAlphaZero(b);
}
if (img == null) {
img = DefaultComponent.GetImage(type, large);
}
if (large) {
largeImage = img;
}
else {
smallImage = img;
}
}
Image toReturn = (large) ? largeImage : smallImage;
if (this.Equals(Default)) {
largeImage = null;
smallImage = null;
}
return toReturn;
}
//helper to get the right icon from the given stream that represents an icon
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
private static Image GetIconFromStream(Stream stream, bool large) {
if (stream == null) {
return null;
}
Icon ico = new Icon(stream);
Icon sizedico = new Icon(ico, large ? new Size(largeDim.X, largeDim.Y):new Size(smallDim.X, smallDim.Y));
return sizedico.ToBitmap();
}
// Just forwards to Image.FromFile eating any non-critical exceptions that may result.
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
private static Image GetImageFromFile(string imageFile, bool large) {
Image image = null;
try {
if (imageFile != null) {
string ext = Path.GetExtension(imageFile);
if (ext != null && string.Equals(ext, ".ico", StringComparison.OrdinalIgnoreCase))
{
//ico files support both large and small, so we respec the large flag here.
FileStream reader = System.IO.File.Open(imageFile, FileMode.Open);
if (reader != null) {
try {
image = GetIconFromStream(reader, large);
}
finally {
reader.Close();
}
}
}
else if (!large) {
//we only read small from non-ico files.
image = Image.FromFile(imageFile);
}
}
} catch (Exception e) {
if (ClientUtils.IsCriticalException(e)) {
throw;
}
Debug.Fail("Failed to load toolbox image '" + imageFile + "':\r\n" + e.ToString());
}
return image;
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static private Image GetBitmapFromResource(Type t, string bitmapname, bool large) {
if (bitmapname == null) {
return null;
}
Image img = null;
// load the image from the manifest resources.
//
Stream stream = t.Module.Assembly.GetManifestResourceStream(t, bitmapname);
if (stream != null) {
Bitmap b = new Bitmap(stream);
img = b;
MakeBackgroundAlphaZero(b);
if (large) {
img = new Bitmap(b, largeDim.X, largeDim.Y);
}
}
return img;
}
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static private Image GetIconFromResource(Type t, string bitmapname, bool large) {
if (bitmapname == null) {
return null;
}
return GetIconFromStream(t.Module.Assembly.GetManifestResourceStream(t, bitmapname), large);
}
///
///
/// [To be supplied.]
///
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
public static Image GetImageFromResource(Type t, string imageName, bool large) {
Image img = null;
try {
string name = imageName;
string iconname = null;
string bmpname = null;
string rawbmpname = null;
// if we didn't get a name, use the class name
//
if (name == null) {
name = t.FullName;
int indexDot = name.LastIndexOf('.');
if (indexDot != -1) {
name = name.Substring(indexDot + 1);
}
iconname = name + ".ico";
bmpname = name + ".bmp";
}
else {
if (String.Compare(Path.GetExtension(imageName), ".ico", true, CultureInfo.CurrentCulture) == 0) {
iconname = name;
}
else if (String.Compare(Path.GetExtension(imageName), ".bmp", true, CultureInfo.CurrentCulture) == 0) {
bmpname = name;
}
else {
//we dont recognize the name as either bmp or ico. we need to try three things.
//1. the name as a bitmap (back compat)
//2. name+.bmp
//3. name+.ico
rawbmpname = name;
bmpname = name + ".bmp";
iconname = name + ".ico";
}
}
img = GetBitmapFromResource(t, rawbmpname, large);
if (img == null) {
img = GetBitmapFromResource(t, bmpname, large);
}
if (img == null) {
img = GetIconFromResource(t, iconname, large);
}
}
catch (Exception e) {
if (t == null) {
Debug.Fail("Failed to load toolbox image for null type:\r\n" + e.ToString());
}
else {
Debug.Fail("Failed to load toolbox image for '" + t.FullName + "':\r\n" + e.ToString());
}
}
return img;
}
private static void MakeBackgroundAlphaZero(Bitmap img) {
Color bottomLeft = img.GetPixel(0, img.Height - 1);
img.MakeTransparent();
Color newBottomLeft = Color.FromArgb(0, bottomLeft);
img.SetPixel(0, img.Height - 1, newBottomLeft);
}
///
///
/// Default name is null
///
[SuppressMessage("Microsoft.Security", "CA2104:DoNotDeclareReadOnlyMutableReferenceTypes")]
public static readonly ToolboxBitmapAttribute Default = new ToolboxBitmapAttribute((Image)null, (Image)null);
private static readonly ToolboxBitmapAttribute DefaultComponent;
[ResourceExposure(ResourceScope.Machine)]
[ResourceConsumption(ResourceScope.Machine)]
static ToolboxBitmapAttribute() {
//Fix for Dev10 560430. When we call Gdip.DummyFunction, JIT will make sure Gdip..cctor will be called before
SafeNativeMethods.Gdip.DummyFunction();
Bitmap bitmap = null;
Stream stream = typeof(ToolboxBitmapAttribute).Module.Assembly.GetManifestResourceStream(typeof(ToolboxBitmapAttribute), "DefaultComponent.bmp");
if (stream != null) {
bitmap = new Bitmap(stream);
MakeBackgroundAlphaZero(bitmap);
}
DefaultComponent = new ToolboxBitmapAttribute(bitmap, null);
}
}
}
// 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
- DependencyProperty.cs
- CultureData.cs
- GPRECT.cs
- Helper.cs
- ConfigurationHandlersInstallComponent.cs
- TextLineResult.cs
- PanelDesigner.cs
- InternalTypeHelper.cs
- DynamicPropertyReader.cs
- BuildProvider.cs
- DoWorkEventArgs.cs
- URI.cs
- DesignerView.xaml.cs
- GroupQuery.cs
- EncryptedPackageFilter.cs
- DesignerLoader.cs
- XmlName.cs
- WindowsGrip.cs
- Win32Native.cs
- MenuCommand.cs
- TextView.cs
- PageThemeBuildProvider.cs
- DbUpdateCommandTree.cs
- ApplicationFileParser.cs
- SqlConnectionPoolGroupProviderInfo.cs
- MenuItemStyle.cs
- WebPartCancelEventArgs.cs
- AutomationPatternInfo.cs
- XmlAttributes.cs
- AncestorChangedEventArgs.cs
- Operand.cs
- TabletCollection.cs
- QueryModel.cs
- DataTrigger.cs
- SHA384Managed.cs
- ApplyHostConfigurationBehavior.cs
- RectAnimationUsingKeyFrames.cs
- XPathNodePointer.cs
- GridItemPattern.cs
- ContentOperations.cs
- TextTreeRootNode.cs
- httpstaticobjectscollection.cs
- Expressions.cs
- DataViewManagerListItemTypeDescriptor.cs
- DescendentsWalkerBase.cs
- UrlAuthorizationModule.cs
- ReferencedType.cs
- InProcStateClientManager.cs
- Border.cs
- mda.cs
- PerformanceCounterCategory.cs
- TableChangeProcessor.cs
- CheckBoxRenderer.cs
- Rect.cs
- PackagePartCollection.cs
- MonthCalendarDesigner.cs
- ProcessThreadCollection.cs
- ToolStripCustomTypeDescriptor.cs
- SoapSchemaExporter.cs
- ThreadSafeList.cs
- ListViewDeleteEventArgs.cs
- TheQuery.cs
- Form.cs
- SqlResolver.cs
- SearchForVirtualItemEventArgs.cs
- DesignerActionVerbList.cs
- ComponentCollection.cs
- ContainerParaClient.cs
- Quad.cs
- XPathException.cs
- SequenceQuery.cs
- LineGeometry.cs
- CalendarDay.cs
- ListenDesigner.cs
- PrintControllerWithStatusDialog.cs
- HijriCalendar.cs
- FacetEnabledSchemaElement.cs
- HttpPostedFile.cs
- SQLGuid.cs
- Pens.cs
- CommentEmitter.cs
- TrustManager.cs
- EntityCollection.cs
- WinInet.cs
- ToolStripDropDown.cs
- ThreadStaticAttribute.cs
- WebServiceHostFactory.cs
- SpellerHighlightLayer.cs
- ExtenderProviderService.cs
- dsa.cs
- MemberExpression.cs
- WebPartUtil.cs
- TypedRowHandler.cs
- SourceInterpreter.cs
- ExplicitDiscriminatorMap.cs
- GeometryHitTestResult.cs
- DrawListViewItemEventArgs.cs
- CompModSwitches.cs
- VarRemapper.cs
- DesignSurfaceEvent.cs