Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

131 lines
4.0 KiB

//// DspFamly.CPP - Display available font families
//
//
#include "precomp.hxx"
#include "global.h"
void PaintFamilies(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight) {
// Establish available width and height in device coordinates
int DrawingWidth = prc->right - prc->left;
int DrawingHeight = DrawingWidth/2;
// Establish a Graphics with 0,0 at the top left of the drawing area
Graphics g(hdc);
Matrix matrix;
g.ResetTransform();
g.TranslateTransform(REAL(prc->left), REAL(*piY));
// Clear the background
RectF rEntire(0, 0, REAL(DrawingWidth), REAL(DrawingHeight));
SolidBrush whiteBrush(Color(0xff, 0xff, 0xff));
g.FillRectangle(&whiteBrush, rEntire);
// Leave a little space for right and bottom margins
DrawingWidth -= DrawingWidth/40;
DrawingHeight -= DrawingHeight/40;
// Display face names sized to fit: allow 1.5 ems vertical x 20 ems horizontal per char.
// Thus failyCount fonts will take familyCount*30 square ems.
INT emSize = (INT)sqrt(DrawingWidth*DrawingHeight/(g_familyCount*30));
if (emSize < 6)
emSize = 6; // we need a reasonable lower limit otherwise we may div by zero
INT columnCount = DrawingWidth / (emSize*15);
// HFONT hfont = CreateFont(-emSize, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, "Tahoma");
// HFONT hOldFont = (HFONT) SelectObject(hdc, hfont);
Color blackColor(0, 0, 0);
SolidBrush blackBrush(blackColor);
Pen blackPen(&blackBrush, 1);
StringFormat format(g_formatFlags);
for (INT i=0; i<g_familyCount; i++) {
WCHAR facename[LF_FACESIZE];
g_families[i].GetFamilyName(facename);
RectF textRect(
REAL(emSize*15*(i%columnCount)),
REAL(emSize*3*(i/columnCount)/2),
REAL(emSize*15),
REAL(emSize*3/2));
g.DrawString(
facename, -1,
&Font(&FontFamily(L"Tahoma"),REAL(emSize), 0, UnitWorld),
textRect,
&format,
&blackBrush);
/*
TextOutW(
hdc,
prc->left + emSize*15*(i%columnCount),
*piY + emSize*3*(i/columnCount)/2,
facename,
lstrlenW(facename)
);
*/
// Do some metric analysis
#ifdef TEXTV2
char str[200];
for (INT style = 0; style < 3; style++)
{
if (g_families[i].IsStyleAvailable(style))
{
if (g_families[i].GetTypographicDescent(style) >= 0)
{
wsprintf(str, "%S: typo descent(%d) >= 0\n", facename, g_families[i].GetTypographicDescent(style));
OutputDebugString(str);
}
if (g_families[i].GetTypographicAscent(style) <= 0)
{
wsprintf(str, "%S: typo ascent(%d) <= 0\n", facename, g_families[i].GetTypographicAscent(style));
OutputDebugString(str);
}
if (g_families[i].GetTypographicAscent(style) > g_families[i].GetCellAscent(style))
{
wsprintf(str, "%S: typo ascent(%d) > cell ascent (%d)\n", facename, g_families[i].GetTypographicAscent(style), g_families[i].GetCellAscent(style));
OutputDebugString(str);
}
if (-g_families[i].GetTypographicDescent(style) > g_families[i].GetCellDescent(style))
{
wsprintf(str, "%S: -typo descent(%d) > cell descent (%d)\n", facename, -g_families[i].GetTypographicDescent(style), g_families[i].GetCellDescent(style));
OutputDebugString(str);
}
}
}
#endif
}
// DeleteObject(SelectObject(hdc, hOldFont));
*piY += emSize*3*(1+((g_familyCount-1)/columnCount))/2;
}