Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / Drawing / System / Drawing / Design / FontNameEditor.cs / 1 / FontNameEditor.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
*/
namespace System.Drawing.Design {
using Microsoft.Win32;
using System;
using System.Collections;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using System.IO;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Windows.Forms.ComponentModel;
using System.Windows.Forms.Design;
///
///
///
/// Provides an editor that paints a glyph for the font name.
///
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")]
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.InheritanceDemand, Name="FullTrust")]
[System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name="FullTrust")]
public class FontNameEditor : UITypeEditor {
///
///
/// Determines if this editor supports the painting of a representation
/// of an object's value.
///
public override bool GetPaintValueSupported(ITypeDescriptorContext context) {
return true;
}
///
///
///
/// Paints a representative value of the given object to the provided
/// canvas. Painting should be done within the boundaries of the
/// provided rectangle.
///
///
[SuppressMessage("Microsoft.Security", "CA2109:ReviewVisibleEventHandlers")]
[SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
public override void PaintValue(PaintValueEventArgs e) {
string fontName = e.Value as string;
if (fontName != null) {
if (fontName == "") {
// don't draw anything if we don't have a value.
return;
}
e.Graphics.FillRectangle(SystemBrushes.ActiveCaption, e.Bounds);
FontFamily family = null;
try {
family = new FontFamily(fontName);
}
catch {
// Ignore the exception if the fontName does not exist or is invalid...
// we just won't render a preview of the font at all
}
if (family != null) {
// Believe it or not, not all font families have a "normal" face. Try normal, then italic,
// then bold, then bold italic, then give up.
try {
DrawFontSample(e, family, FontStyle.Regular);
}
catch {
try {
DrawFontSample(e, family, FontStyle.Italic);
}
catch {
try {
DrawFontSample(e, family, FontStyle.Bold);
}
catch {
try {
DrawFontSample(e, family, FontStyle.Bold | FontStyle.Italic);
}
catch {
// No font style we can think of is supported
}
}
}
}
}
e.Graphics.DrawLine(SystemPens.WindowFrame, e.Bounds.Right, e.Bounds.Y, e.Bounds.Right, e.Bounds.Bottom);
}
}
// Tries to render sample of text in specified font and style,
// throwing exception if specified font does not support that style...
//
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:DisposeObjectsBeforeLosingScope")]
static private void DrawFontSample(PaintValueEventArgs e, FontFamily fontFamily, FontStyle fontStyle) {
float fontSize = (float) (e.Bounds.Height / 1.2);
Font font = new Font(fontFamily, fontSize, fontStyle, GraphicsUnit.Pixel);
if (font == null) {
return;
}
try {
e.Graphics.DrawString("abcd", font, SystemBrushes.ActiveCaptionText, e.Bounds);
}
finally {
font.Dispose();
}
}
}
}
// 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
- DescendantOverDescendantQuery.cs
- ArraySegment.cs
- BindingsCollection.cs
- Popup.cs
- ScrollBar.cs
- XPathPatternParser.cs
- TransactionInformation.cs
- ViewDesigner.cs
- TypeListConverter.cs
- MimeFormImporter.cs
- ProfileProvider.cs
- OutputCacheSection.cs
- WindowsTab.cs
- DataContractSet.cs
- SponsorHelper.cs
- DataGridRow.cs
- WindowsContainer.cs
- AsynchronousChannel.cs
- ExecutionContext.cs
- DeviceContext2.cs
- NetNamedPipeSecurityMode.cs
- PropertyGrid.cs
- MembershipSection.cs
- ZipIOCentralDirectoryBlock.cs
- StylusPointProperty.cs
- FunctionOverloadResolver.cs
- DataObjectCopyingEventArgs.cs
- NamespaceEmitter.cs
- CryptoSession.cs
- Point3D.cs
- IEnumerable.cs
- PrintPageEvent.cs
- XmlLoader.cs
- PixelFormatConverter.cs
- ACL.cs
- XamlBrushSerializer.cs
- TextServicesHost.cs
- Tag.cs
- XmlSchemaSimpleContentExtension.cs
- OpCodes.cs
- ObjectStorage.cs
- ActivityTrace.cs
- CacheAxisQuery.cs
- SecurityHelper.cs
- CompiledXpathExpr.cs
- AssemblyResourceLoader.cs
- HiddenFieldDesigner.cs
- ApplicationId.cs
- AmbientValueAttribute.cs
- ColorTranslator.cs
- MSAAEventDispatcher.cs
- DesignerTextViewAdapter.cs
- ChangeTracker.cs
- HtmlTextArea.cs
- WebEvents.cs
- AutomationElementIdentifiers.cs
- TriState.cs
- ControlHelper.cs
- GACMembershipCondition.cs
- View.cs
- activationcontext.cs
- TypeDescriptorContext.cs
- UndoEngine.cs
- SystemIPGlobalProperties.cs
- AllMembershipCondition.cs
- AuthenticatedStream.cs
- WorkflowPersistenceContext.cs
- AutomationAttributeInfo.cs
- BaseCodeDomTreeGenerator.cs
- ElementHost.cs
- DataRelationPropertyDescriptor.cs
- coordinator.cs
- PointAnimationUsingKeyFrames.cs
- HtmlInputReset.cs
- CurrentChangedEventManager.cs
- DataGridRelationshipRow.cs
- MenuAutomationPeer.cs
- DescendantQuery.cs
- DynamicContractTypeBuilder.cs
- WebHttpSecurity.cs
- XmlAtomicValue.cs
- DecodeHelper.cs
- SlotInfo.cs
- List.cs
- XmlSchemaImport.cs
- TableLayoutStyleCollection.cs
- MethodRental.cs
- XsdBuildProvider.cs
- Model3DGroup.cs
- ScalarOps.cs
- SafeIUnknown.cs
- DesignSurfaceEvent.cs
- ListParagraph.cs
- ProfileModule.cs
- JpegBitmapDecoder.cs
- RotateTransform.cs
- HttpModuleCollection.cs
- RetrieveVirtualItemEventArgs.cs
- QilNode.cs
- QueryContinueDragEvent.cs