//// family.cpp - String format tests // // #include "precomp.hpp" #include "global.h" #include "gdiplus.h" ///// Family tests // // Test combinations of style with each family // // 2 rows for each family using all style combinations // // 6 families per page void GetInstalledFamilies() { InstalledFontCollection installedFonts; G.InstalledFamilyCount = installedFonts.GetFamilyCount(); G.InstalledFamilies = new FontFamily[G.InstalledFamilyCount]; installedFonts.GetFamilies( G.InstalledFamilyCount, G.InstalledFamilies, &G.InstalledFamilyCount ); } void ReleaseInstalledFamilies() { G.InstalledFamilyCount = 0; delete [] G.InstalledFamilies; } INT FamilyTest::GetPageCount() { return (G.InstalledFamilyCount + 5) / 6; } void FamilyTest::GetPageTitle(INT pageNumber, WCHAR *title) { title[0] = 0; wcscat(title, L"AutoText family test."); } Font *GetItemFont(INT page, INT row, INT column) { INT familyIndex = page*6 + row/2; if (familyIndex < G.InstalledFamilyCount) { return new Font( G.InstalledFamilies + familyIndex, 9, FontStyle(((row & 1) << 4) + column), UnitPoint ); } else { return NULL; } } /// DrawPage - draw one page of the test // // void FamilyTest::DrawPage( IN Graphics *graphics, IN INT page, IN REAL pageWidth, IN REAL pageHeight ) { PageLayout pageLayout(pageWidth, pageHeight, 8, 12); SolidBrush blackBrush(Color(0, 0, 0)); Pen blackPen(&blackBrush, 1.0); // Display title at bottom of page StringFormat titleFormat(StringFormat::GenericDefault()); titleFormat.SetAlignment(StringAlignmentCenter); titleFormat.SetLineAlignment(StringAlignmentCenter); RectF titleRect; pageLayout.GetFooterRect(&titleRect); Font pageTitleFont(L"Microsoft Sans Serif", 12, FontStyleBold); WCHAR title[200]; GetPageTitle(page, title); graphics->DrawString( title, -1, &pageTitleFont, titleRect, &titleFormat, &blackBrush ); // Display row titles Font titleFont( &FontFamily(L"Microsoft Sans Serif"), 9, 0, UnitPoint ); for (INT i=0; i<12; i++) { pageLayout.GetRowTitleRect(i, &titleRect); Font *rowFont = GetItemFont(page, i, 3); // bold/italic available if any are! if (rowFont) { FontFamily rowFamily; rowFont->GetFamily(&rowFamily); delete rowFont; rowFamily.GetFamilyName(title); graphics->DrawString( title, -1, &titleFont, titleRect, &titleFormat, &blackBrush ); } } // Display column titles for (INT i=0; i<8; i++) { pageLayout.GetColumnTitleRect(i, &titleRect); title[0] = 0; if (i==0) { wcscat(title, L"regular"); } else { if (i & 1) { wcscat(title, L"bold "); } if (i & 2) { wcscat(title, L"italic "); } if (i & 4) { wcscat(title, L"underline "); } } graphics->DrawString( title, -1, &titleFont, titleRect, &titleFormat, &blackBrush ); } // Prepare common string format for this page StringFormat stringFormat(StringFormat::GenericDefault()); // The tests themselves for (INT row=0; row<12; row++) { for (INT column=0; column<8; column++) { Font *itemFont = GetItemFont(page, row, column); if (itemFont) { RectF itemRect; pageLayout.GetItemRect(column, row, &itemRect); graphics->DrawRectangle(&blackPen, itemRect); graphics->DrawString( L"There was an Old Man of the Coast\n\ Who placidly sat on a post;\n\ But when it was cold,\n\ He relinquished his hold,\n\ And called for some hot buttered toast.\n", -1, itemFont, itemRect, &stringFormat, &blackBrush ); delete itemFont; } } } }