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.

275 lines
5.9 KiB

  1. //// GLOBAL.H - Global variables for CSSAMP
  2. //
  3. //
  4. //// Constants
  5. //
  6. //
  7. #define APPNAMEA "autoText"
  8. #define APPTITLEA "autoText - GdipPlus Text support (Text+) regression test"
  9. #define APPNAMEW L"autoText"
  10. #define APPTITLEW L"autoText - GdipPlus Text support (Text+) regression test"
  11. //// Global variables
  12. //
  13. //
  14. struct GlobalVariables
  15. {
  16. HINSTANCE Instance;
  17. HWND Window;
  18. BOOL Unicode;
  19. INT TestPage; // Selected with test menu
  20. BOOL RunAllTests; // When set, cycles through all test pages
  21. FontFamily *InstalledFamilies;
  22. INT InstalledFamilyCount;
  23. // Parameter flags
  24. BOOL Help;
  25. BOOL AutoDisplayRegress;
  26. BOOL AutoPrintRegress;
  27. HANDLE ghPrinter;
  28. BOOL PSLevel2;
  29. };
  30. extern HANDLE ghPrinter;
  31. #ifdef GLOBALS_HERE
  32. GlobalVariables G = {0};
  33. #else
  34. extern GlobalVariables G;
  35. #endif
  36. void GetInstalledFamilies();
  37. void ReleaseInstalledFamilies();
  38. class TextTest
  39. {
  40. public:
  41. virtual INT GetPageCount() = 0;
  42. virtual void GetPageTitle(INT i, WCHAR *title) = 0;
  43. virtual void DrawPage(
  44. IN Graphics *graphics,
  45. IN INT pageNumber,
  46. IN REAL pageWidth,
  47. IN REAL pageHeight
  48. ) = 0;
  49. };
  50. class FormatTest: public TextTest
  51. {
  52. public:
  53. virtual INT GetPageCount();
  54. virtual void GetPageTitle(INT i, WCHAR *title);
  55. virtual void DrawPage(
  56. IN Graphics *graphics,
  57. IN INT pageNumber,
  58. IN REAL pageWidth,
  59. IN REAL pageHeight
  60. );
  61. };
  62. class BrushTest: public TextTest
  63. {
  64. public:
  65. virtual INT GetPageCount();
  66. virtual void GetPageTitle(INT i, WCHAR *title);
  67. virtual void DrawPage(
  68. IN Graphics *graphics,
  69. IN INT pageNumber,
  70. IN REAL pageWidth,
  71. IN REAL pageHeight
  72. );
  73. };
  74. class FamilyTest: public TextTest
  75. {
  76. public:
  77. virtual INT GetPageCount();
  78. virtual void GetPageTitle(INT i, WCHAR *title);
  79. virtual void DrawPage(
  80. IN Graphics *graphics,
  81. IN INT pageNumber,
  82. IN REAL pageWidth,
  83. IN REAL pageHeight
  84. );
  85. };
  86. HWND CreateTextWindow();
  87. void DrawFormatPage(
  88. IN Graphics *graphics,
  89. IN INT pageNumber,
  90. IN REAL pageWidth,
  91. IN REAL pageHeight
  92. );
  93. ///// PageLayout - All the page coordinate calculations in one place
  94. //
  95. // The PageLayout constructor takes page dimensions and required
  96. // layout.
  97. //
  98. // Pagelayout functions return item and title rectangles.
  99. class PageLayout
  100. {
  101. public:
  102. PageLayout(
  103. IN REAL pageWidth,
  104. IN REAL pageHeight,
  105. IN INT columnCount = 8,
  106. IN INT rowCount = 12,
  107. IN REAL pageMargin = -1,
  108. IN REAL gutter = -1,
  109. IN REAL columnTitle = -1,
  110. IN REAL rowTitle = -1,
  111. IN REAL footer = -1
  112. ) :
  113. PageWidth (pageWidth),
  114. PageHeight (pageHeight),
  115. ColumnCount (columnCount),
  116. RowCount (rowCount),
  117. PageMargin (pageMargin),
  118. Gutter (gutter),
  119. ColumnTitle (columnTitle),
  120. RowTitle (rowTitle),
  121. Footer (footer)
  122. {
  123. if (pageMargin < 0) PageMargin = REAL(PageWidth / 32);
  124. if (gutter < 0) Gutter = REAL(PageWidth / 128);
  125. if (columnTitle < 0) ColumnTitle= REAL(PageHeight / 20);
  126. if (rowTitle < 0) RowTitle = REAL(PageWidth / 20);
  127. if (footer < 0) Footer = REAL(PageHeight / 20);
  128. }
  129. void GetItemSize(SizeF *item)
  130. {
  131. item->Width = ((PageWidth - (RowTitle + 2*PageMargin + ColumnCount*Gutter)) / ColumnCount);
  132. item->Height = ((PageHeight - (ColumnTitle+Footer + 2*PageMargin + RowCount*Gutter)) / RowCount);
  133. }
  134. void GetItemRect(
  135. IN INT column,
  136. IN INT row,
  137. OUT RectF *item
  138. )
  139. {
  140. SizeF itemSize;
  141. GetItemSize(&itemSize);
  142. item->X = PageMargin + RowTitle + Gutter + column * (itemSize.Width + Gutter);
  143. item->Y = PageMargin + ColumnTitle + Gutter + row * (itemSize.Height + Gutter);
  144. item->Width = itemSize.Width;
  145. item->Height = itemSize.Height;
  146. }
  147. void GetItemGutterRect(
  148. IN INT column,
  149. IN INT row,
  150. OUT RectF *gutterRect
  151. )
  152. {
  153. RectF item;
  154. GetItemRect(column, row, &item);
  155. gutterRect->X = item.X - Gutter;
  156. gutterRect->Y = item.Y - Gutter;
  157. gutterRect->Width = item.Width + 2*Gutter;
  158. gutterRect->Height = item.Height + 2*Gutter;
  159. }
  160. void GetColumnTitleRect(
  161. IN INT column,
  162. OUT RectF *title
  163. )
  164. {
  165. RectF item;
  166. GetItemRect(column, 0, &item);
  167. title->X = item.X;
  168. title->Y = PageMargin;
  169. title->Width = item.Width;
  170. title->Height = ColumnTitle;
  171. }
  172. void GetRowTitleRect(
  173. IN INT row,
  174. OUT RectF *title
  175. )
  176. {
  177. RectF item;
  178. GetItemRect(0, row, &item);
  179. title->X = PageMargin;
  180. title->Y = item.Y;
  181. title->Width = RowTitle;
  182. title->Height = item.Height;
  183. }
  184. void GetFooterRect(
  185. OUT RectF *footer
  186. )
  187. {
  188. footer->X = PageMargin;
  189. footer->Y = PageHeight - (PageMargin + Footer);
  190. footer->Width = PageWidth - 2 * PageMargin;
  191. footer->Height = Footer;
  192. }
  193. private:
  194. REAL PageWidth;
  195. REAL PageHeight;
  196. INT ColumnCount;
  197. INT RowCount;
  198. REAL PageMargin;
  199. REAL Gutter;
  200. REAL ColumnTitle;
  201. REAL RowTitle;
  202. REAL Footer;
  203. REAL ItemWidth;
  204. REAL ItemHeight;
  205. };