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.
 
 
 
 
 
 

514 lines
15 KiB

//// GLOBAL.H - Global variables for CSSAMP
//
//
//// Constants
//
//
#define APPNAMEA "TextTest"
#define APPTITLEA "TextTest - GdipPlus Text support (Text+) Tests"
#define APPNAMEW L"TextTest"
#define APPTITLEW L"TextTest - GdipPlus Text support (Text+) Tests"
const int MAX_STYLES = 5; // Better implementation would use dynamic memory
const int MAX_TEXT = 10000; // Fixed buffer size in Unicode characters
const int MAX_AUTO_FONTS = 20; // Maximum number of fonts to sequence through
const int MAX_AUTO_HEIGHTS = 20; // Maximum number of heights to sequence through
const int MAX_RANGE_COUNT = 10; // Maximum number of ranges
const int CARET_SECTION_LOGICAL = 0;
const int CARET_SECTION_PLAINTEXT = 1;
const int CARET_SECTION_FORMATTED = 2;
//// RUN - A run of characters with similar attributes
//
//
struct RUN {
struct RUN *pNext;
int iLen;
int iStyle; // Index to style sheet (global 'g_style').
SCRIPT_ANALYSIS analysis; // Uniscribe analysis
};
//// STYLE - Text attribute
//
struct STYLE {
WCHAR faceName[LF_FACESIZE];
REAL emSize;
INT style;
//HFONT hf; // Handle to font described by lf
//SCRIPT_CACHE sc; // Uniscribe cache associated with this style
};
//// Global variables
//
//
#ifdef GLOBALS_HERE
#define GLOBAL
#define GLOBALINIT(a) = a
#else
#define GLOBAL extern
#define GLOBALINIT(a)
#endif
// Read these from the settings file (command line) - auto-drive for profiling
GLOBAL char g_szProfileName[MAX_PATH]; // Profile File name
GLOBAL BOOL g_AutoDrive GLOBALINIT(FALSE); // Automatically run suite and exit
GLOBAL int g_iNumIterations GLOBALINIT(1); // Number of test iterations to execute
GLOBAL int g_iNumRepaints GLOBALINIT(1); // Number of re-paints to execute
GLOBAL int g_iNumRenders GLOBALINIT(1); // Number of API Render calls to execute
GLOBAL char g_szSourceTextFile[MAX_PATH]; // Source Text Filename
GLOBAL BOOL g_Offscreen GLOBALINIT(FALSE); // Use offscreen surface
GLOBAL ARGB g_TextColor GLOBALINIT(0xFF000000); // Text color
GLOBAL ARGB g_BackColor GLOBALINIT(0xFFFFFFFF); // Background color
// Automatic cycling data for font height/face
GLOBAL BOOL g_AutoFont GLOBALINIT(FALSE); // Sequence through fonts
GLOBAL BOOL g_AutoHeight GLOBALINIT(FALSE); // Sequence through all font heights
GLOBAL int g_iAutoFonts GLOBALINIT(0); // Number of fonts to sequence through
GLOBAL int g_iAutoHeights GLOBALINIT(0); // Number of heights to sequence through
GLOBAL TCHAR g_rgszAutoFontFacenames[MAX_AUTO_FONTS][MAX_PATH]; // Array of auto-font facenames
GLOBAL int g_rgiAutoHeights[MAX_AUTO_HEIGHTS]; // Array of auto-height sizes
// These correspond to bits in g_DriverOptions (enumeration)
GLOBAL BOOL g_CMapLookup GLOBALINIT(TRUE);
GLOBAL BOOL g_Vertical GLOBALINIT(FALSE);
GLOBAL BOOL g_RealizedAdvance GLOBALINIT(TRUE);
GLOBAL BOOL g_CompensateRes GLOBALINIT(FALSE);
// These correspond to bits in g_formatFlags
GLOBAL BOOL g_NoFitBB GLOBALINIT(FALSE);
GLOBAL BOOL g_NoWrap GLOBALINIT(FALSE);
GLOBAL BOOL g_NoClip GLOBALINIT(FALSE);
// Initial Font controls
GLOBAL BOOL g_FontOverride GLOBALINIT(FALSE); // Over-ride default font settings
GLOBAL TCHAR g_szFaceName[MAX_PATH]; // Font Face name
GLOBAL int g_iFontHeight GLOBALINIT(8); // Font Height
GLOBAL BOOL g_Bold GLOBALINIT(FALSE); // Bold flag
GLOBAL BOOL g_Italic GLOBALINIT(FALSE); // Italic flag
GLOBAL BOOL g_Underline GLOBALINIT(FALSE); // Underline
GLOBAL BOOL g_Strikeout GLOBALINIT(FALSE); // Strikeout
GLOBAL HINSTANCE g_hInstance GLOBALINIT(NULL); // The one and only instance
GLOBAL char g_szAppDir[MAX_PATH]; // Application directory
GLOBAL HWND g_hSettingsDlg GLOBALINIT(NULL); // Settings panel
GLOBAL HWND g_hGlyphSettingsDlg GLOBALINIT(NULL); // Settings panel
GLOBAL HWND g_hDriverSettingsDlg GLOBALINIT(NULL); // Settings panel
GLOBAL HWND g_hTextWnd GLOBALINIT(NULL); // Text display/editing panel
GLOBAL BOOL g_bUnicodeWnd GLOBALINIT(FALSE); // If text window is Unicode
GLOBAL int g_iSettingsWidth;
GLOBAL int g_iSettingsHeight;
GLOBAL BOOL g_fShowLevels GLOBALINIT(FALSE); // Show bidi levels for each codepoint
GLOBAL int g_iMinWidth; // Main window minimum size
GLOBAL int g_iMinHeight;
GLOBAL BOOL g_fPresentation GLOBALINIT(FALSE); // Hide settings, show text very large
GLOBAL BOOL g_ShowLogical GLOBALINIT(FALSE);
GLOBAL BOOL g_ShowGDI GLOBALINIT(FALSE); // Render text using GDI
GLOBAL BOOL g_UseDrawText GLOBALINIT(TRUE); // Render using DrawText
GLOBAL BOOL g_fOverrideDx GLOBALINIT(FALSE); // Provide UI for changing logical widths
GLOBAL SCRIPT_CONTROL g_ScriptControl GLOBALINIT({0});
GLOBAL SCRIPT_STATE g_ScriptState GLOBALINIT({0});
GLOBAL BOOL g_fNullState GLOBALINIT(FALSE);
GLOBAL DWORD g_dwSSAflags GLOBALINIT(SSA_FALLBACK);
GLOBAL STYLE g_style[MAX_STYLES]; // 0 for plaintext, 1-4 for formatted text
GLOBAL WCHAR g_wcBuf[MAX_TEXT];
GLOBAL int g_iWidthBuf[MAX_TEXT];
GLOBAL RUN *g_pFirstFormatRun GLOBALINIT(NULL); // Formatting info
GLOBAL int g_iTextLen GLOBALINIT(0);
GLOBAL int g_iCaretX GLOBALINIT(0); // Caret position in text window
GLOBAL int g_iCaretY GLOBALINIT(0); // Caret position in text window
GLOBAL int g_iCaretHeight GLOBALINIT(0); // Caret height in pixels
GLOBAL int g_fUpdateCaret GLOBALINIT(TRUE); // Caret requires updating
GLOBAL int g_iCaretSection GLOBALINIT(CARET_SECTION_LOGICAL); // Whether caret is in logical, plain or formatted text
GLOBAL int g_iCurChar GLOBALINIT(0); // Caret sits on leading edge of buffer[iCurChar]
GLOBAL int g_iMouseDownX GLOBALINIT(0);
GLOBAL int g_iMouseDownY GLOBALINIT(0);
GLOBAL BOOL g_fMouseDown GLOBALINIT(FALSE);
GLOBAL int g_iMouseUpX GLOBALINIT(0);
GLOBAL int g_iMouseUpY GLOBALINIT(0);
GLOBAL BOOL g_fMouseUp GLOBALINIT(FALSE);
GLOBAL int g_iFrom GLOBALINIT(0); // Highlight start
GLOBAL int g_iTo GLOBALINIT(0); // Highlight end
GLOBAL HFONT g_hfCaption GLOBALINIT(NULL); // Caption font
GLOBAL int g_iLogPixelsY GLOBALINIT(0);
GLOBAL Matrix g_WorldTransform;
GLOBAL Matrix g_FontTransform;
GLOBAL Matrix g_DriverTransform;
GLOBAL SmoothingMode g_SmoothingMode GLOBALINIT(SmoothingModeDefault);
// Font families
// Enumerate available families
GLOBAL InstalledFontCollection g_InstalledFontCollection;
GLOBAL FontFamily *g_families;
GLOBAL INT g_familyCount;
GLOBAL BOOL g_ShowFamilies GLOBALINIT(FALSE);
// Glyphs
GLOBAL BOOL g_ShowGlyphs GLOBALINIT(FALSE);
GLOBAL int g_GlyphRows GLOBALINIT(16);
GLOBAL int g_GlyphColumns GLOBALINIT(16);
GLOBAL int g_GlyphFirst GLOBALINIT(0);
GLOBAL BOOL g_CmapLookup GLOBALINIT(FALSE);
GLOBAL BOOL g_HorizontalChart GLOBALINIT(FALSE);
GLOBAL BOOL g_ShowCell GLOBALINIT(FALSE);
GLOBAL BOOL g_VerticalForms GLOBALINIT(FALSE);
// Driver string
GLOBAL BOOL g_ShowDriver GLOBALINIT(FALSE);
GLOBAL INT g_DriverOptions GLOBALINIT( DriverStringOptionsCmapLookup
| DriverStringOptionsRealizedAdvance);
GLOBAL REAL g_DriverDx GLOBALINIT(15.0);
GLOBAL REAL g_DriverDy GLOBALINIT(0.0);
GLOBAL REAL g_DriverPixels GLOBALINIT(13.0);
// DrawString
GLOBAL BOOL g_ShowDrawString GLOBALINIT(FALSE);
GLOBAL TextRenderingHint g_TextMode GLOBALINIT(TextRenderingHintSystemDefault);
GLOBAL UINT g_GammaValue GLOBALINIT(4);
GLOBAL INT g_formatFlags GLOBALINIT(0);
GLOBAL BOOL g_typographic GLOBALINIT(FALSE);
GLOBAL StringAlignment g_align GLOBALINIT(StringAlignmentNear);
GLOBAL HotkeyPrefix g_hotkey GLOBALINIT(HotkeyPrefixNone);
GLOBAL StringAlignment g_lineAlign GLOBALINIT(StringAlignmentNear);
GLOBAL StringTrimming g_lineTrim GLOBALINIT(StringTrimmingNone);
GLOBAL Unit g_fontUnit GLOBALINIT(UnitPoint);
GLOBAL Brush * g_textBrush GLOBALINIT(NULL);
GLOBAL Brush * g_textBackBrush GLOBALINIT(NULL);
GLOBAL BOOL g_testMetafile GLOBALINIT(FALSE);
// Path
GLOBAL BOOL g_ShowPath GLOBALINIT(FALSE);
// Metrics
GLOBAL BOOL g_ShowMetric GLOBALINIT(FALSE);
// Performance
GLOBAL BOOL g_ShowPerformance GLOBALINIT(FALSE);
GLOBAL INT g_PerfRepeat GLOBALINIT(2000);
// Scaling
GLOBAL BOOL g_ShowScaling GLOBALINIT(FALSE);
// String format digit substitution
GLOBAL StringDigitSubstitute g_DigitSubstituteMode GLOBALINIT(StringDigitSubstituteUser);
GLOBAL LANGID g_Language GLOBALINIT(LANG_NEUTRAL);
GLOBAL INT g_RangeCount GLOBALINIT(0);
GLOBAL CharacterRange g_Ranges[MAX_RANGE_COUNT];
/* obsolete
GLOBAL BOOL g_fFillLines GLOBALINIT(TRUE);
GLOBAL BOOL g_fLogicalOrder GLOBALINIT(FALSE);
GLOBAL BOOL g_fNoGlyphIndex GLOBALINIT(FALSE);
GLOBAL BOOL g_fShowWidths GLOBALINIT(FALSE);
GLOBAL BOOL g_fShowStyles GLOBALINIT(FALSE);
GLOBAL BOOL g_fShowPlainText GLOBALINIT(TRUE);
GLOBAL BOOL g_fShowFancyText GLOBALINIT(FALSE);
*/
//// Function prototypes
//
//
// DspGDI.cpp
void PaintGDI(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspFamly.cpp
void PaintFamilies(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
void InitializeLegacyFamilies();
// DspLogcl.cpp
void PaintLogical(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspDraws.cpp
void PaintDrawString(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspDriver.cpp
void PaintDrawDriverString(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspPerf.cpp
void PaintPerformance(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspPath.cpp
void PaintPath(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspGlyph.cpp
void PaintGlyphs(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspMetric.cpp
void PaintMetrics(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// DspScaling.cpp
void PaintScaling(
HDC hdc,
int *piY,
RECT *prc,
int iLineHeight);
// Settings.cpp
INT_PTR CALLBACK SettingsDlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
INT_PTR CALLBACK GlyphSettingsDlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
INT_PTR CALLBACK DriverSettingsDlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
void InsertText(HWND hDlg, char *textId);
// ReadSettings.cpp
void ReadProfileInfo(char *szProfileName);
// Text.cpp
void InitText(INT id);
BOOL TextInsert(
int iPos,
PWCH pwc,
int iLen);
BOOL TextDelete(
int iPos,
int iLen);
// TextWnd.cpp
HWND CreateTextWindow();
void ResetCaret(int iX, int iY, int iHeight);
LRESULT CALLBACK TextWndProc(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
void InvalidateText();
void PrintPage();
// Edit.cpp
BOOL EditChar(WCHAR wc);
BOOL EditKeyDown(WCHAR wc);
void EditFreeCaches();
void EditInsertUnicode();
// Style.cpp
void SetStyle(
int iStyle,
int iHeight,
int iWeight,
int iItalic,
int iUnderline,
int iStrikeout,
TCHAR *pcFaceName);
void InitStyles();
void FreeStyles();
void SetLogFont(
PLOGFONTA plf,
int iHeight,
int iWeight,
int iItalic,
int iUnderline,
char *pcFaceName);
void StyleDeleteRange(
int iDelPos,
int iDelLen);
void StyleExtendRange(
int iExtPos,
int iExtLen);
void StyleSetRange(
int iSetStyle,
int iSetPos,
int iSetLen);
BOOL StyleCheckRange();
// Debugging support
#define TRACEMSG(a) {DG.psFile=__FILE__; DG.iLine=__LINE__; DebugMsg a;}
#define ASSERT(a) {if (!(a)) TRACEMSG(("Assertion failure: "#a));}
#define ASSERTS(a,b) {if (!(a)) TRACEMSG(("Assertion failure: "#a" - "#b));}
#define ASSERTHR(a,b) {if (!SUCCEEDED(a)) {DG.psFile=__FILE__; \
DG.iLine=__LINE__; DG.hrLastError=a; DebugHr b;}}
/// Debug variables
//
struct DebugGlobals {
char *psFile;
int iLine;
HRESULT hrLastError; // Last hresult from GDI
CHAR sLastError[100]; // Last error string
};
/// Debug function prototypes
//
extern "C" void WINAPIV DebugMsg(char *fmt, ...);
extern "C" void WINAPIV DebugHr(char *fmt, ...);
GLOBAL DebugGlobals DG GLOBALINIT({0});
GLOBAL UINT debug GLOBALINIT(0);