summaryrefslogtreecommitdiff
path: root/src/windows/wintel/font.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/windows/wintel/font.c')
-rw-r--r--src/windows/wintel/font.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/windows/wintel/font.c b/src/windows/wintel/font.c
new file mode 100644
index 000000000000..9224c41f7ba0
--- /dev/null
+++ b/src/windows/wintel/font.c
@@ -0,0 +1,100 @@
+/* font.c */
+
+#include <windows.h>
+#include <commdlg.h>
+#include <assert.h>
+#include "screen.h"
+#include "ini.h"
+
+void ProcessFontChange(
+ HWND hWnd)
+{
+ static DWORD dwFontColor; /* Color of font if one has been selected */
+ CHOOSEFONT cf;
+ HDC hDC;
+ SCREEN *pScr;
+ TEXTMETRIC tm;
+ char buf[16];
+ char szStyle[LF_FACESIZE];
+
+ pScr = (SCREEN *) GetWindowLong(hWnd, SCREEN_HANDLE);
+ assert(pScr != NULL);
+
+ cf.lStructSize = sizeof(cf);
+ cf.hwndOwner = hWnd;
+ cf.lpLogFont = (LPLOGFONT) &(pScr->lf);
+ cf.lpszStyle = szStyle;
+ cf.Flags = CF_INITTOLOGFONTSTRUCT; /* | CF_USESTYLE; */
+ cf.Flags |= CF_SCREENFONTS;
+#if 0
+ cf.Flags |= CF_ANSIONLY;
+#endif
+ cf.Flags |= CF_FORCEFONTEXIST;
+ cf.Flags |= CF_FIXEDPITCHONLY;
+ cf.Flags |= CF_NOSIMULATIONS;
+
+ if (ChooseFont(&cf)) {
+ if (pScr->hSelectedFont)
+ DeleteObject(pScr->hSelectedFont);
+
+ pScr->hSelectedFont = CreateFontIndirect(&(pScr->lf));
+ pScr->lf.lfUnderline = TRUE;
+ pScr->hSelectedULFont = CreateFontIndirect(&(pScr->lf));
+ pScr->lf.lfUnderline = FALSE;
+ hDC = GetDC(hWnd);
+ SelectObject(hDC, pScr->hSelectedFont);
+ GetTextMetrics(hDC, &tm);
+ pScr->cxChar = tm.tmAveCharWidth;
+ pScr->cyChar = tm.tmHeight + tm.tmExternalLeading;
+ ReleaseDC(hWnd, hDC);
+ SetWindowPos(hWnd, NULL, 0, 0, pScr->cxChar * pScr->width +
+ FRAME_WIDTH, pScr->cyChar * pScr->height +
+ FRAME_HEIGHT, SWP_NOMOVE | SWP_NOZORDER);
+
+ dwFontColor = RGB(255, 255, 255);
+ InvalidateRect(hWnd, NULL, TRUE);
+ }
+
+ WritePrivateProfileString(INI_FONT, "FaceName", pScr->lf.lfFaceName, TELNET_INI);
+ wsprintf(buf, "%d", (int) pScr->lf.lfHeight);
+ WritePrivateProfileString(INI_FONT, "Height", buf, TELNET_INI);
+ wsprintf(buf, "%d", (int) pScr->lf.lfWidth);
+ WritePrivateProfileString(INI_FONT, "Width", buf, TELNET_INI);
+ wsprintf(buf, "%d", (int) pScr->lf.lfEscapement);
+ WritePrivateProfileString(INI_FONT, "Escapement", buf, TELNET_INI);
+ wsprintf(buf, "%d", (int) pScr->lf.lfCharSet);
+ WritePrivateProfileString(INI_FONT, "CharSet", buf, TELNET_INI);
+ wsprintf(buf, "%d", (int) pScr->lf.lfPitchAndFamily);
+ WritePrivateProfileString(INI_FONT, "PitchAndFamily", buf, TELNET_INI);
+
+ return;
+
+} /* ProcessFontChange */
+
+
+void InitializeStruct(
+ WORD wCommDlgType,
+ LPSTR lpStruct,
+ HWND hWnd)
+{
+ LPCHOOSEFONT lpFontChunk;
+
+ if (wCommDlgType == IDC_FONT) {
+ lpFontChunk = (LPCHOOSEFONT) lpStruct;
+
+ lpFontChunk->lStructSize = sizeof(CHOOSEFONT);
+ lpFontChunk->hwndOwner = hWnd;
+ lpFontChunk->Flags = CF_SCREENFONTS | CF_FIXEDPITCHONLY
+ | CF_INITTOLOGFONTSTRUCT | CF_APPLY;
+ lpFontChunk->rgbColors = RGB(0, 0, 255);
+ lpFontChunk->lCustData = 0L;
+ lpFontChunk->lpfnHook = NULL;
+ lpFontChunk->lpTemplateName = NULL;
+ lpFontChunk->hInstance = NULL;
+ lpFontChunk->lpszStyle = NULL;
+ lpFontChunk->nFontType = SCREEN_FONTTYPE;
+ lpFontChunk->nSizeMin = 0;
+ lpFontChunk->nSizeMax = 0;
+ }
+
+} /* InitialiseStruct */