269 lines
7.9 KiB
C
269 lines
7.9 KiB
C
/*
|
|
* The distinction between the desired and actual font dimensions obtained
|
|
* is important in the case of TrueType fonts, in which there is no guarantee
|
|
* that what you ask for is what you will get.
|
|
*
|
|
* Note that the correspondence between "Desired" and "Actual" is broken
|
|
* whenever the user changes his display driver, because GDI uses driver
|
|
* parameters to control the font rasterization.
|
|
*
|
|
* The SizeDesired is {0, 0} if the font is a raster font.
|
|
*/
|
|
typedef struct {
|
|
HFONT hFont;
|
|
COORD Size; // font size obtained
|
|
COORD SizeWant; // 0;0 if Raster font
|
|
LONG Weight;
|
|
LPTSTR FaceName;
|
|
BYTE Family;
|
|
BYTE tmCharSet;
|
|
} FONT_INFO;
|
|
|
|
typedef struct tagFACENODE {
|
|
struct tagFACENODE *pNext;
|
|
DWORD dwFlag;
|
|
TCHAR atch[];
|
|
} FACENODE;
|
|
|
|
//
|
|
// TrueType font list
|
|
// This structure shares in windows\inc\wincon.w file
|
|
//
|
|
|
|
// we don't make bold available if BOLD_MARK is in the face name.
|
|
#define BOLD_MARK (L'*')
|
|
|
|
typedef struct _TT_FONT_LIST {
|
|
SINGLE_LIST_ENTRY List;
|
|
UINT CodePage;
|
|
BOOL fDisableBold;
|
|
TCHAR FaceName1[LF_FACESIZE];
|
|
TCHAR FaceName2[LF_FACESIZE];
|
|
} TTFONTLIST;
|
|
|
|
#ifdef MAX_TITLE_LEN
|
|
#undef MAX_TITLE_LEN
|
|
#endif
|
|
#define MAX_TITLE_LEN 256
|
|
#define MAXDIMENSTRING 40 // max text in combo box
|
|
#define DX_TTBITMAP 20
|
|
#define DY_TTBITMAP 12
|
|
#define CCH_RASTERFONTS 24
|
|
#define CCH_SELECTEDFONT 30
|
|
|
|
typedef struct {
|
|
IShellLink * psl;
|
|
LPNT_CONSOLE_PROPS lpConsole;
|
|
LPNT_FE_CONSOLE_PROPS lpFEConsole;
|
|
BOOL bConDirty;
|
|
int xScreen;
|
|
int yScreen;
|
|
POINT NonClientSize;
|
|
RECT WindowRect;
|
|
DWORD PreviewFlags;
|
|
FONT_INFO *FontInfo;
|
|
ULONG FontInfoLength;
|
|
ULONG NumberOfFonts;
|
|
BOOL gbEnumerateFaces;
|
|
BOOL gbPointSizeError;
|
|
BOOL gbBold;
|
|
BOOL bFontInit;
|
|
BOOL bColorInit;
|
|
FACENODE *gpFaceNames;
|
|
TCHAR DefaultFaceName[LF_FACESIZE];
|
|
LPTSTR lpFaceName;
|
|
#ifndef UNICODE
|
|
CHAR szFaceName[LF_FACESIZE];
|
|
#endif
|
|
COORD DefaultFontSize;
|
|
BYTE DefaultFontFamily;
|
|
ULONG DefaultFontIndex;
|
|
ULONG CurrentFontIndex;
|
|
LONG FontLong;
|
|
int Index;
|
|
BYTE ColorArray[4];
|
|
TCHAR ConsoleTitle[ MAX_TITLE_LEN + 1 ];
|
|
BOOL fChangeCodePage;
|
|
UINT uOEMCP;
|
|
SINGLE_LIST_ENTRY gTTFontList; // This list contain TTFONTLIST data.
|
|
} CONSOLEPROP_DATA;
|
|
|
|
// got this from wingdip.h so we don't have to compile it all
|
|
#define IS_ANY_DBCS_CHARSET( CharSet ) \
|
|
( ((CharSet) == SHIFTJIS_CHARSET) ? TRUE : \
|
|
((CharSet) == HANGEUL_CHARSET) ? TRUE : \
|
|
((CharSet) == CHINESEBIG5_CHARSET) ? TRUE : \
|
|
((CharSet) == GB2312_CHARSET) ? TRUE : FALSE )
|
|
|
|
#define TM_IS_TT_FONT(x) (((x) & TMPF_TRUETYPE) == TMPF_TRUETYPE)
|
|
#define IS_BOLD(w) ((w) >= FW_SEMIBOLD)
|
|
#define SIZE_EQUAL(s1, s2) (((s1).X == (s2).X) && ((s1).Y == (s2).Y))
|
|
#define POINTS_PER_INCH 72
|
|
#define MIN_PIXEL_HEIGHT 5
|
|
#define MAX_PIXEL_HEIGHT 72
|
|
#define CONSOLE_REGISTRY_CURRENTPAGE (L"CurrentPage")
|
|
|
|
|
|
#define MAX_SCRBUF_WIDTH 9999
|
|
#define MAX_SCRBUF_HEIGHT 9999
|
|
|
|
#define INITIAL_FONTS 20
|
|
#define FONT_INCREMENT 3
|
|
#define CONSOLE_MAX_FONT_NAME_LENGTH 256
|
|
|
|
#define CM_SETCOLOR (WM_USER+1)
|
|
#define CM_PREVIEW_UPDATE (WM_USER+2)
|
|
#define CM_PREVIEW_INIT (WM_USER+3)
|
|
#define CM_COLOR_INIT (WM_USER+4)
|
|
|
|
|
|
#define PREVIEW_HSCROLL 0x01
|
|
#define PREVIEW_VSCROLL 0x02
|
|
|
|
#define FE_ABANDONFONT 0
|
|
#define FE_SKIPFONT 1
|
|
#define FE_FONTOK 2
|
|
|
|
|
|
#define EF_NEW 0x0001 // a newly available face
|
|
#define EF_OLD 0x0002 // a previously available face
|
|
#define EF_ENUMERATED 0x0004 // all sizes have been enumerated
|
|
#define EF_OEMFONT 0x0008 // an OEM face
|
|
#define EF_TTFONT 0x0010 // a TT face
|
|
#define EF_DEFFACE 0x0020 // the default face
|
|
#define EF_DBCSFONT 0x0040 // the DBCS font
|
|
|
|
|
|
/* ----- Macros ----- */
|
|
/*
|
|
* High-level macros
|
|
*
|
|
* These macros handle the SendMessages that go tofrom list boxes
|
|
* and combo boxes.
|
|
*
|
|
* The "xxx_lcb" prefix stands for leaves CritSect & "list or combo box".
|
|
*
|
|
* Basically, we're providing mnemonic names for what would otherwise
|
|
* look like a whole slew of confusing SendMessage's.
|
|
*
|
|
*/
|
|
#define lcbRESETCONTENT(hWnd, bLB) \
|
|
SendMessage(hWnd, bLB ? LB_RESETCONTENT : CB_RESETCONTENT, 0, 0L)
|
|
|
|
#define lcbFINDSTRINGEXACT(hWnd, bLB, pwsz) \
|
|
SendMessage(hWnd, bLB ? LB_FINDSTRINGEXACT : CB_FINDSTRINGEXACT, \
|
|
(DWORD)-1, (LPARAM)pwsz)
|
|
|
|
#define lcbADDSTRING(hWnd, bLB, pwsz) \
|
|
SendMessage(hWnd, bLB ? LB_ADDSTRING : CB_ADDSTRING, 0, (LPARAM)pwsz)
|
|
|
|
#define lcbSETITEMDATA(hWnd, bLB, w, nFont) \
|
|
SendMessage(hWnd, bLB ? LB_SETITEMDATA : CB_SETITEMDATA, w, nFont)
|
|
|
|
#define lcbGETITEMDATA(hWnd, bLB, w) \
|
|
SendMessage(hWnd, bLB ? LB_GETITEMDATA : CB_GETITEMDATA, w, 0L)
|
|
|
|
#define lcbGETCOUNT(hWnd, bLB) \
|
|
SendMessage(hWnd, bLB ? LB_GETCOUNT : CB_GETCOUNT, 0, 0L)
|
|
|
|
#define lcbGETCURSEL(hWnd, bLB) \
|
|
SendMessage(hWnd, bLB ? LB_GETCURSEL : CB_GETCURSEL, 0, 0L)
|
|
|
|
#define lcbSETCURSEL(hWnd, bLB, w) \
|
|
SendMessage(hWnd, bLB ? LB_SETCURSEL : CB_SETCURSEL, w, 0L)
|
|
|
|
#define NELEM(array) (sizeof(array)/sizeof(array[0]))
|
|
#define AttrToRGB(Attr) (pcpd->lpConsole->ColorTable[(Attr) & 0x0F])
|
|
#define ScreenTextColor(pcpd) \
|
|
(AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute) & 0x0F))
|
|
#define ScreenBkColor(pcpd) \
|
|
(AttrToRGB(LOBYTE(pcpd->lpConsole->wFillAttribute >> 4)))
|
|
#define PopupTextColor(pcpd) \
|
|
(AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute) & 0x0F))
|
|
#define PopupBkColor(pcpd) \
|
|
(AttrToRGB(LOBYTE(pcpd->lpConsole->wPopupFillAttribute >> 4)))
|
|
|
|
|
|
NTSTATUS InitializeFonts( CONSOLEPROP_DATA *pcpd );
|
|
|
|
STDAPI_(void) DestroyFonts( CONSOLEPROP_DATA *pcpd );
|
|
|
|
NTSTATUS EnumerateFonts( CONSOLEPROP_DATA *pcpd, DWORD Flags);
|
|
|
|
int FindCreateFont(
|
|
CONSOLEPROP_DATA *pcpd,
|
|
DWORD Family,
|
|
LPTSTR ptszFace,
|
|
COORD Size,
|
|
LONG Weight);
|
|
|
|
BOOL DoFontEnum(
|
|
CONSOLEPROP_DATA *pcpd,
|
|
HDC hDC,
|
|
LPTSTR ptszFace,
|
|
PSHORT pTTPoints,
|
|
UINT nTTPoints);
|
|
|
|
void GetTitleFromLinkName(LPTSTR szLinkName, LPTSTR szTitle, UINT cchTitle);
|
|
void SetRegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void GetRegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void InitRegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void GetRegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void SetFERegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void GetFERegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
void InitFERegistryValues(CONSOLEPROP_DATA *pcpd);
|
|
|
|
NTSTATUS MakeAltRasterFont(
|
|
CONSOLEPROP_DATA *pcpd,
|
|
UINT CodePage,
|
|
COORD *AltFontSize,
|
|
BYTE *AltFontFamily,
|
|
ULONG *AltFontIndex,
|
|
LPTSTR AltFaceName,
|
|
UINT cchFaceName
|
|
);
|
|
|
|
NTSTATUS InitializeDbcsMisc(CONSOLEPROP_DATA *pcpd);
|
|
|
|
BYTE CodePageToCharSet(UINT CodePage);
|
|
|
|
TTFONTLIST *SearchTTFont(CONSOLEPROP_DATA *pcpd, LPTSTR ptszFace, BOOL fCodePage, UINT CodePage);
|
|
|
|
BOOL IsAvailableTTFont(CONSOLEPROP_DATA *pcpd, LPTSTR ptszFace);
|
|
BOOL IsAvailableTTFontCP(CONSOLEPROP_DATA *pcpd, LPTSTR pwszFace, UINT CodePage);
|
|
BOOL IsDisableBoldTTFont(CONSOLEPROP_DATA *pcpd, LPTSTR ptszFace);
|
|
LPTSTR GetAltFaceName(CONSOLEPROP_DATA *pcpd, LPTSTR ptszFace);
|
|
|
|
int LanguageListCreate(HWND hDlg, UINT CodePage);
|
|
|
|
typedef struct
|
|
{
|
|
LONG _cRef;
|
|
// input params
|
|
IShellLink *psl;
|
|
// local state variables
|
|
HWND hDlg;
|
|
HWND hDlgAdvanced;
|
|
BOOL bIsFile;
|
|
BOOL bIsDirty;
|
|
int iIconIndex;
|
|
BOOL bLinkThreadIsAlive;
|
|
BOOL bCheckRunInSep;
|
|
HANDLE hCheckNow;
|
|
BOOL bEnableRunInSepVDM;
|
|
BOOL bRunInSepVDM;
|
|
BOOL bRunAsUser;
|
|
TCHAR szFile[MAX_PATH];
|
|
TCHAR szIconPath[MAX_PATH];
|
|
} LINKPROP_DATA;
|
|
|
|
|
|
typedef struct {
|
|
LINKPROP_DATA *plpd;
|
|
CONSOLEPROP_DATA cpd;
|
|
} LINKDATA;
|
|
|
|
STDAPI SaveLink(LINKDATA *pld);
|
|
STDAPI_(void) LinkConsolePagesSave(LINKDATA *pld);
|
|
STDAPI_(void) AddLinkConsolePages(LINKDATA *pld, IShellLink * psl, LPCTSTR pszFile, LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam);
|