1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154
|
//------------------------------------------------------------------------------
// <copyright file="ImageCreator.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation. All rights reserved.
// </copyright>
//------------------------------------------------------------------------------
namespace System.Web.UI.Design.MobileControls.Util
{
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
[
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
]
[Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
internal sealed class ImageCreator
{
const String _fontFamily = "Tahoma"; // default font used for the
// title and error message
private static int GetHeight(
String text,
Font font,
int width
) {
// THIS----S: I need a bitmap to get a graphics object to measure
// the string, but I can not create the bitmap I intend to return
// until I know how big it needs to be...
using(Bitmap bmp = new Bitmap(1,1))
{
using(Graphics g = Graphics.FromImage(bmp))
{
SizeF size = new SizeF(width, 0);
size = g.MeasureString(text, font, size);
return (int) (size.Height + 1);
}} // using bmp, g
}
internal static void CreateBackgroundImage(
ref TemporaryBitmapFile bmpFile,
String controlID,
String title,
String message,
bool infoMode,
int controlWidth
) {
// Really, anything this small is not practically going to
// show readable text. Truncate instead of trying to display
// the string vertically.
if(controlWidth < 75)
{
controlWidth = 75;
}
Bitmap errorIcon = infoMode? GenericUI.InfoIcon : GenericUI.ErrorIcon;
bool showMessage = message != null && message.Length != 0;
bool showTitle = (title != null && title.Length != 0)
|| (controlID != null && controlID.Length != 0);
Debug.Assert(showMessage || showTitle);
//
using(
Font normalFont = new Font(_fontFamily, 8, FontStyle.Regular),
boldFont = new Font(normalFont.FontFamily, 8, FontStyle.Bold)
) {
using(
Brush controlTextBrush = new SolidBrush(SystemColors.ControlText),
controlDarkBrush = new SolidBrush(SystemColors.ControlDark),
controlBrush = new SolidBrush(SystemColors.Control),
windowBrush = new SolidBrush(SystemColors.Window)
) {
using(
Pen controlDarkPen = new Pen(SystemColors.ControlDark),
windowPen = new Pen(SystemColors.Window)
) {
int barHeight = 0;
if(showTitle)
{
// We do not measure the height of the real title because
// we inted to truncate rather than wrap.
barHeight = GetHeight(
"'",
normalFont,
(controlWidth - 30)
) + 6;
}
int messageHeight = 0;
if(showMessage)
{
int textHeight = GetHeight(
message,
normalFont,
(controlWidth - 30)
);
messageHeight = (textHeight < (errorIcon.Height + 6)) ?
(errorIcon.Height + 6) : textHeight + 3;
}
int width = 500; // normally only 300px visible.
int height = barHeight + messageHeight;
Bitmap bitmap = new Bitmap(width, height);
using(Graphics g = Graphics.FromImage(bitmap))
{
if (showTitle)
{
// The rectangle area
g.FillRectangle(controlBrush, 0, 0, width, barHeight);
// The gray line below the controlID
g.DrawLine(controlDarkPen, 0, barHeight - 1, width, barHeight - 1);
// Draw the text "controlTypeName - controlID"
g.DrawString(controlID, boldFont, controlTextBrush, 2, 2);
if(title != null && title.Length > 0)
{
int strPelLen = (int) g.MeasureString(controlID, boldFont).Width;
g.DrawString(" - " + title, normalFont, controlTextBrush, 4 + strPelLen, 2);
}
}
if (showMessage)
{
// The transparent line between controlID and errormessage.
g.DrawLine(windowPen, 0, barHeight, width, barHeight);
// The message rectangle area
g.FillRectangle(controlDarkBrush, 0, barHeight + 1, width, messageHeight - 1);
// Draw the message text
g.DrawString(message, normalFont, windowBrush,
new RectangleF(20, barHeight + 1, controlWidth - 30, messageHeight - 1));
// Draw the icon
g.DrawImage(errorIcon, 2, barHeight + 3);
}
if(bmpFile == null)
{
bmpFile = new TemporaryBitmapFile(bitmap);
}
else
{
bmpFile.UnderlyingBitmap = bitmap;
}
} // using g
}}} // using Fonts, Brushes, and Pens
}
}
}
|