https://git.reactos.org/?p=reactos.git;a=commitdiff;h=2e836fb339b89f3e97647…
commit 2e836fb339b89f3e97647d07425f66d3e72a6456
Author: Stanislav Motylkov <x86corez(a)gmail.com>
AuthorDate: Tue Jun 13 12:44:46 2023 +0300
Commit: Stanislav Motylkov <x86corez(a)gmail.com>
CommitDate: Tue Jun 13 12:44:46 2023 +0300
[FONTVIEW] Formatting only (for PR #5305)
---
base/applications/fontview/display.c | 842 +++++++++++++++++-----------------
base/applications/fontview/fontview.c | 759 +++++++++++++++---------------
2 files changed, 784 insertions(+), 817 deletions(-)
diff --git a/base/applications/fontview/display.c b/base/applications/fontview/display.c
index 7ffc9b10795..0c4f771b27e 100644
--- a/base/applications/fontview/display.c
+++ b/base/applications/fontview/display.c
@@ -1,23 +1,8 @@
/*
- * fontview display class
- *
- * display.c
- *
- * Copyright (C) 2007 Timo Kreuzer <timo <dot> kreuzer <at> reactos
<dot> org>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * PROJECT: ReactOS Font Viewer
+ * LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Display class
+ * COPYRIGHT: Copyright 2007 Timo Kreuzer <timo.kreuzer(a)reactos.org>
*/
#include "precomp.h"
@@ -37,488 +22,488 @@ LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM);
/* Internal data storage type */
typedef struct
{
- int nPageHeight;
- WCHAR szTypeFaceName[LF_FULLFACESIZE];
- WCHAR szFormat[MAX_FORMAT];
- WCHAR szString[MAX_STRING];
-
- HFONT hCaptionFont;
- HFONT hCharSetFont;
- HFONT hSizeFont;
- HFONT hFonts[MAX_SIZES];
- int nSizes[MAX_SIZES];
- int nHeights[MAX_SIZES];
+ int nPageHeight;
+ WCHAR szTypeFaceName[LF_FULLFACESIZE];
+ WCHAR szFormat[MAX_FORMAT];
+ WCHAR szString[MAX_STRING];
+
+ HFONT hCaptionFont;
+ HFONT hCharSetFont;
+ HFONT hSizeFont;
+ HFONT hFonts[MAX_SIZES];
+ int nSizes[MAX_SIZES];
+ int nHeights[MAX_SIZES];
} DISPLAYDATA;
/* This is the only public function, it registers the class */
BOOL
Display_InitClass(HINSTANCE hInstance)
{
- WNDCLASSEXW wincl;
-
- /* Set the fontdisplay window class structure */
- wincl.cbSize = sizeof(WNDCLASSEX);
- wincl.style = CS_DBLCLKS;
- wincl.lpfnWndProc = DisplayProc;
- wincl.cbClsExtra = 0;
- wincl.cbWndExtra = 0;
- wincl.hInstance = hInstance;
- wincl.hIcon = NULL;
- wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
- wincl.hbrBackground = GetStockObject(WHITE_BRUSH);
- wincl.lpszMenuName = NULL;
- wincl.lpszClassName = g_szFontDisplayClassName;
- wincl.hIconSm = NULL;
-
- /* Register the window class, and if it fails return FALSE */
- if (!RegisterClassExW (&wincl))
- {
- return FALSE;
- }
- return TRUE;
+ WNDCLASSEXW wincl;
+
+ /* Set the fontdisplay window class structure */
+ wincl.cbSize = sizeof(WNDCLASSEX);
+ wincl.style = CS_DBLCLKS;
+ wincl.lpfnWndProc = DisplayProc;
+ wincl.cbClsExtra = 0;
+ wincl.cbWndExtra = 0;
+ wincl.hInstance = hInstance;
+ wincl.hIcon = NULL;
+ wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
+ wincl.hbrBackground = GetStockObject(WHITE_BRUSH);
+ wincl.lpszMenuName = NULL;
+ wincl.lpszClassName = g_szFontDisplayClassName;
+ wincl.hIconSm = NULL;
+
+ /* Register the window class, and if it fails return FALSE */
+ if (!RegisterClassExW (&wincl))
+ {
+ return FALSE;
+ }
+ return TRUE;
}
static int
Display_DrawText(HDC hDC, DISPLAYDATA* pData, int nYPos)
{
- HFONT hOldFont;
- TEXTMETRIC tm;
- int i, y;
- WCHAR szSize[5];
- WCHAR szCaption[LF_FULLFACESIZE + 20];
-
- /* This is the location on the DC where we draw */
- y = -nYPos;
-
- hOldFont = SelectObject(hDC, pData->hCaptionFont);
- GetTextMetrics(hDC, &tm);
-
- swprintf(szCaption, L"%s%s", pData->szTypeFaceName, pData->szFormat);
- TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
- y += tm.tmHeight + SPACING1;
-
- /* Draw a separation Line */
- SelectObject(hDC, GetStockObject(BLACK_PEN));
- MoveToEx(hDC, 0, y, NULL);
- LineTo(hDC, 10000, y);
- y += SPACING2;
-
- /* TODO: Output font info */
-
- /* Output Character set */
- SelectObject(hDC, pData->hCharSetFont);
- GetTextMetrics(hDC, &tm);
- swprintf(szCaption, L"abcdefghijklmnopqrstuvwxyz");
- TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
- y += tm.tmHeight + 1;
-
- swprintf(szCaption, L"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
- TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
- y += tm.tmHeight + 1;
-
- swprintf(szCaption, L"0123456789.:,;(\"~!@#$%%^&*')");
- TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
- y += tm.tmHeight + 1;
-
- /* Draw a separation Line */
- SelectObject(hDC, GetStockObject(BLACK_PEN));
- MoveToEx(hDC, 0, y, NULL);
- LineTo(hDC, 10000, y);
- y += SPACING2;
-
- /* Output the strings for different sizes */
- for (i = 0; i < MAX_SIZES; i++)
- {
- SelectObject(hDC, pData->hFonts[i]);
- TextOutW(hDC, 20, y, pData->szString, (INT)wcslen(pData->szString));
- GetTextMetrics(hDC, &tm);
- y += tm.tmHeight + 1;
- SelectObject(hDC, pData->hSizeFont);
- swprintf(szSize, L"%d", pData->nSizes[i]);
- TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, (INT)wcslen(szSize));
- }
- SelectObject(hDC, hOldFont);
-
- return y;
+ HFONT hOldFont;
+ TEXTMETRIC tm;
+ int i, y;
+ WCHAR szSize[5];
+ WCHAR szCaption[LF_FULLFACESIZE + 20];
+
+ /* This is the location on the DC where we draw */
+ y = -nYPos;
+
+ hOldFont = SelectObject(hDC, pData->hCaptionFont);
+ GetTextMetrics(hDC, &tm);
+
+ swprintf(szCaption, L"%s%s", pData->szTypeFaceName,
pData->szFormat);
+ TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
+ y += tm.tmHeight + SPACING1;
+
+ /* Draw a separation Line */
+ SelectObject(hDC, GetStockObject(BLACK_PEN));
+ MoveToEx(hDC, 0, y, NULL);
+ LineTo(hDC, 10000, y);
+ y += SPACING2;
+
+ /* TODO: Output font info */
+
+ /* Output Character set */
+ SelectObject(hDC, pData->hCharSetFont);
+ GetTextMetrics(hDC, &tm);
+ swprintf(szCaption, L"abcdefghijklmnopqrstuvwxyz");
+ TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
+ y += tm.tmHeight + 1;
+
+ swprintf(szCaption, L"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
+ y += tm.tmHeight + 1;
+
+ swprintf(szCaption, L"0123456789.:,;(\"~!@#$%%^&*')");
+ TextOutW(hDC, 0, y, szCaption, (INT)wcslen(szCaption));
+ y += tm.tmHeight + 1;
+
+ /* Draw a separation Line */
+ SelectObject(hDC, GetStockObject(BLACK_PEN));
+ MoveToEx(hDC, 0, y, NULL);
+ LineTo(hDC, 10000, y);
+ y += SPACING2;
+
+ /* Output the strings for different sizes */
+ for (i = 0; i < MAX_SIZES; i++)
+ {
+ SelectObject(hDC, pData->hFonts[i]);
+ TextOutW(hDC, 20, y, pData->szString, (INT)wcslen(pData->szString));
+ GetTextMetrics(hDC, &tm);
+ y += tm.tmHeight + 1;
+ SelectObject(hDC, pData->hSizeFont);
+ swprintf(szSize, L"%d", pData->nSizes[i]);
+ TextOutW(hDC, 0, y - 13 - tm.tmDescent, szSize, (INT)wcslen(szSize));
+ }
+ SelectObject(hDC, hOldFont);
+
+ return y;
}
static int
CALLBACK
EnumFontFamProcW(
- const LOGFONTW *lpelfe,
- const TEXTMETRICW *lptm,
- DWORD FontType,
- LPARAM lParam)
+ const LOGFONTW *lpelfe,
+ const TEXTMETRICW *lptm,
+ DWORD FontType,
+ LPARAM lParam)
{
- PNEWTEXTMETRICW pntmw = (PNEWTEXTMETRICW)lptm;
- PBOOL pfOpenType = (PBOOL)lParam;
-
- if (FontType & TRUETYPE_FONTTYPE)
- {
- if (pntmw->ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
- {
- *pfOpenType = TRUE;
- return FALSE;
- }
- }
- return TRUE;
+ PNEWTEXTMETRICW pntmw = (PNEWTEXTMETRICW)lptm;
+ PBOOL pfOpenType = (PBOOL)lParam;
+
+ if (FontType & TRUETYPE_FONTTYPE)
+ {
+ if (pntmw->ntmFlags & (NTM_TT_OPENTYPE | NTM_PS_OPENTYPE))
+ {
+ *pfOpenType = TRUE;
+ return FALSE;
+ }
+ }
+ return TRUE;
}
static LRESULT
Display_SetTypeFace(HWND hwnd, PLOGFONTW pLogFont)
{
- DISPLAYDATA* pData;
- TEXTMETRIC tm;
- HDC hDC;
- RECT rect;
- SCROLLINFO si;
- int i;
- LOGFONTW logfont;
- BOOL fOpenType;
- BYTE Buffer[512];
- LPOUTLINETEXTMETRICW pOTM = (LPOUTLINETEXTMETRICW)Buffer;
- LPWSTR pch;
-
- /* Set the new type face name */
- pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- lstrcpynW(pData->szTypeFaceName, pLogFont->lfFaceName,
- ARRAYSIZE(pData->szTypeFaceName));
-
- /* Create the new fonts */
- hDC = GetDC(hwnd);
- DeleteObject(pData->hCharSetFont);
-
- logfont = *pLogFont;
- logfont.lfHeight = -MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
- pData->hCharSetFont = CreateFontIndirectW(&logfont);
-
- /* Get font format */
- SelectObject(hDC, pData->hCharSetFont);
- GetTextMetrics(hDC, &tm);
- if (tm.tmPitchAndFamily & TMPF_TRUETYPE)
- {
- if (GetOutlineTextMetricsW(hDC, sizeof(Buffer), pOTM))
- {
- LPBYTE pb = Buffer;
- pb += (WORD)(DWORD_PTR)pOTM->otmpStyleName;
- pch = (LPWSTR)pb;
- if (*pch)
- {
- lstrcatW(pData->szTypeFaceName, L" ");
- lstrcatW(pData->szTypeFaceName, pch);
- }
- }
-
- fOpenType = FALSE;
- EnumFontFamiliesExW(hDC, &logfont,
- EnumFontFamProcW, (LPARAM)&fOpenType, 0);
-
- if (fOpenType)
- swprintf(pData->szFormat, L" (OpenType)");
- else
- swprintf(pData->szFormat, L" (TrueType)");
- }
- else if (tm.tmPitchAndFamily & TMPF_VECTOR)
- {
- swprintf(pData->szFormat, L" (Vector)");
- }
- else
- {
- swprintf(pData->szFormat, L" (Raster)");
- }
-
- for (i = 0; i < MAX_SIZES; i++)
- {
- DeleteObject(pData->hFonts[i]);
- logfont.lfHeight = -MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY), 72);
- pData->hFonts[i] = CreateFontIndirectW(&logfont);
- }
-
- /* Calculate new page dimensions */
- pData->nPageHeight = Display_DrawText(hDC, pData, 0);
- ReleaseDC(hwnd, hDC);
-
- /* Set the vertical scrolling range and page size */
- GetClientRect(hwnd, &rect);
- si.cbSize = sizeof(si);
- si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
- si.nMin = 0;
- si.nMax = pData->nPageHeight;
- si.nPage = rect.bottom;
- si.nPos = 0;
- si.nTrackPos = 0;
- SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
-
- return 0;
+ DISPLAYDATA* pData;
+ TEXTMETRIC tm;
+ HDC hDC;
+ RECT rect;
+ SCROLLINFO si;
+ int i;
+ LOGFONTW logfont;
+ BOOL fOpenType;
+ BYTE Buffer[512];
+ LPOUTLINETEXTMETRICW pOTM = (LPOUTLINETEXTMETRICW)Buffer;
+ LPWSTR pch;
+
+ /* Set the new type face name */
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ lstrcpynW(pData->szTypeFaceName, pLogFont->lfFaceName,
+ ARRAYSIZE(pData->szTypeFaceName));
+
+ /* Create the new fonts */
+ hDC = GetDC(hwnd);
+ DeleteObject(pData->hCharSetFont);
+
+ logfont = *pLogFont;
+ logfont.lfHeight = -MulDiv(16, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
+ pData->hCharSetFont = CreateFontIndirectW(&logfont);
+
+ /* Get font format */
+ SelectObject(hDC, pData->hCharSetFont);
+ GetTextMetrics(hDC, &tm);
+ if (tm.tmPitchAndFamily & TMPF_TRUETYPE)
+ {
+ if (GetOutlineTextMetricsW(hDC, sizeof(Buffer), pOTM))
+ {
+ LPBYTE pb = Buffer;
+ pb += (WORD)(DWORD_PTR)pOTM->otmpStyleName;
+ pch = (LPWSTR)pb;
+ if (*pch)
+ {
+ lstrcatW(pData->szTypeFaceName, L" ");
+ lstrcatW(pData->szTypeFaceName, pch);
+ }
+ }
+
+ fOpenType = FALSE;
+ EnumFontFamiliesExW(hDC, &logfont,
+ EnumFontFamProcW, (LPARAM)&fOpenType, 0);
+
+ if (fOpenType)
+ swprintf(pData->szFormat, L" (OpenType)");
+ else
+ swprintf(pData->szFormat, L" (TrueType)");
+ }
+ else if (tm.tmPitchAndFamily & TMPF_VECTOR)
+ {
+ swprintf(pData->szFormat, L" (Vector)");
+ }
+ else
+ {
+ swprintf(pData->szFormat, L" (Raster)");
+ }
+
+ for (i = 0; i < MAX_SIZES; i++)
+ {
+ DeleteObject(pData->hFonts[i]);
+ logfont.lfHeight = -MulDiv(pData->nSizes[i], GetDeviceCaps(hDC, LOGPIXELSY),
72);
+ pData->hFonts[i] = CreateFontIndirectW(&logfont);
+ }
+
+ /* Calculate new page dimensions */
+ pData->nPageHeight = Display_DrawText(hDC, pData, 0);
+ ReleaseDC(hwnd, hDC);
+
+ /* Set the vertical scrolling range and page size */
+ GetClientRect(hwnd, &rect);
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS;
+ si.nMin = 0;
+ si.nMax = pData->nPageHeight;
+ si.nPage = rect.bottom;
+ si.nPos = 0;
+ si.nTrackPos = 0;
+ SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
+
+ return 0;
}
static LRESULT
Display_SetString(HWND hwnd, LPCWSTR pszString)
{
- DISPLAYDATA* pData;
+ DISPLAYDATA* pData;
- pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- lstrcpynW(pData->szString, pszString, ARRAYSIZE(pData->szString));
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ lstrcpynW(pData->szString, pszString, ARRAYSIZE(pData->szString));
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(hwnd, NULL, TRUE);
- return 0;
+ return 0;
}
static LRESULT
Display_OnCreate(HWND hwnd)
{
- DISPLAYDATA* pData;
- const int nSizes[MAX_SIZES] = {8, 12, 18, 24, 36, 48, 60, 72};
- int i;
- LOGFONTW LogFont = {50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
- ANSI_CHARSET, OUT_DEFAULT_PRECIS,
- CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
- DEFAULT_PITCH , L"MS Shell Dlg"};
-
- /* Create data structure */
- pData = malloc(sizeof(DISPLAYDATA));
- ZeroMemory(pData, sizeof(DISPLAYDATA));
-
- /* Set the window's GWLP_USERDATA to our data structure */
- SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
-
- for (i = 0; i < MAX_SIZES; i++)
- {
- pData->nSizes[i] = nSizes[i];
- }
+ DISPLAYDATA* pData;
+ const int nSizes[MAX_SIZES] = {8, 12, 18, 24, 36, 48, 60, 72};
+ int i;
+ LOGFONTW LogFont = {50, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
+ ANSI_CHARSET, OUT_DEFAULT_PRECIS,
+ CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
+ DEFAULT_PITCH , L"MS Shell Dlg"};
+
+ /* Create data structure */
+ pData = malloc(sizeof(DISPLAYDATA));
+ ZeroMemory(pData, sizeof(DISPLAYDATA));
+
+ /* Set the window's GWLP_USERDATA to our data structure */
+ SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pData);
+
+ for (i = 0; i < MAX_SIZES; i++)
+ {
+ pData->nSizes[i] = nSizes[i];
+ }
- pData->hCaptionFont = CreateFontIndirectW(&LogFont);
- LogFont.lfHeight = 12;
- pData->hSizeFont = CreateFontIndirectW(&LogFont);
+ pData->hCaptionFont = CreateFontIndirectW(&LogFont);
+ LogFont.lfHeight = 12;
+ pData->hSizeFont = CreateFontIndirectW(&LogFont);
- Display_SetString(hwnd,
- L"Jackdaws love my big sphinx of quartz. 1234567890");
+ Display_SetString(hwnd,
+ L"Jackdaws love my big sphinx of quartz. 1234567890");
- Display_SetTypeFace(hwnd, &LogFont);
+ Display_SetTypeFace(hwnd, &LogFont);
- return 0;
+ return 0;
}
static LRESULT
Display_OnPaint(HWND hwnd)
{
- DISPLAYDATA* pData;
- PAINTSTRUCT ps;
- SCROLLINFO si;
+ DISPLAYDATA* pData;
+ PAINTSTRUCT ps;
+ SCROLLINFO si;
- pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- /* Get the Scroll position */
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_VERT, &si);
+ /* Get the Scroll position */
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_POS;
+ GetScrollInfo(hwnd, SB_VERT, &si);
- BeginPaint(hwnd, &ps);
+ BeginPaint(hwnd, &ps);
- /* Erase background */
- FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
+ /* Erase background */
+ FillRect(ps.hdc, &ps.rcPaint, GetStockObject(WHITE_BRUSH));
- /* Draw the text */
- Display_DrawText(ps.hdc, pData, si.nPos);
+ /* Draw the text */
+ Display_DrawText(ps.hdc, pData, si.nPos);
- EndPaint(hwnd, &ps);
+ EndPaint(hwnd, &ps);
- return 0;
+ return 0;
}
static LRESULT
Display_OnSize(HWND hwnd)
{
- RECT rect;
- SCROLLINFO si;
- int nOldPos;
-
- GetClientRect(hwnd, &rect);
-
- /* Get the old scroll pos */
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_VERT, &si);
- nOldPos = si.nPos;
-
- /* Set the new page size */
- si.fMask = SIF_PAGE;
- si.nPage = rect.bottom;
- SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
-
- /* Get the new scroll pos */
- si.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_VERT, &si);
-
- /* If they don't match ... */
- if (nOldPos != si.nPos)
- {
- /* ... scroll the window */
- ScrollWindowEx(hwnd, 0, nOldPos - si.nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
- UpdateWindow(hwnd);
- }
-
- return 0;
+ RECT rect;
+ SCROLLINFO si;
+ int nOldPos;
+
+ GetClientRect(hwnd, &rect);
+
+ /* Get the old scroll pos */
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_POS;
+ GetScrollInfo(hwnd, SB_VERT, &si);
+ nOldPos = si.nPos;
+
+ /* Set the new page size */
+ si.fMask = SIF_PAGE;
+ si.nPage = rect.bottom;
+ SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
+
+ /* Get the new scroll pos */
+ si.fMask = SIF_POS;
+ GetScrollInfo(hwnd, SB_VERT, &si);
+
+ /* If they don't match ... */
+ if (nOldPos != si.nPos)
+ {
+ /* ... scroll the window */
+ ScrollWindowEx(hwnd, 0, nOldPos - si.nPos, NULL, NULL, NULL, NULL,
SW_INVALIDATE);
+ UpdateWindow(hwnd);
+ }
+
+ return 0;
}
static LRESULT
Display_OnVScroll(HWND hwnd, WPARAM wParam)
{
- SCROLLINFO si;
- int nPos;
-
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS | SIF_RANGE | SIF_TRACKPOS;
- GetScrollInfo(hwnd, SB_VERT, &si);
-
- switch(LOWORD(wParam))
- {
- case SB_PAGEUP:
- nPos = si.nPos - 50;
- break;
- case SB_PAGEDOWN:
- nPos = si.nPos + 50;
- break;
- case SB_LINEUP:
- nPos = si.nPos - 10;
- break;
- case SB_LINEDOWN:
- nPos = si.nPos + 10;
- break;
- case SB_THUMBTRACK:
- case SB_THUMBPOSITION:
- nPos = si.nTrackPos;
- break;
- default:
- nPos = si.nPos;
- }
-
- nPos = max(nPos, si.nMin);
- nPos = min(nPos, si.nMax);
- if (nPos != si.nPos)
- {
- ScrollWindowEx(hwnd, 0, si.nPos - nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
- si.cbSize = sizeof(si);
- si.nPos = nPos;
- si.fMask = SIF_POS;
- SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
- UpdateWindow(hwnd);
- }
-
- return 0;
+ SCROLLINFO si;
+ int nPos;
+
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_POS | SIF_RANGE | SIF_TRACKPOS;
+ GetScrollInfo(hwnd, SB_VERT, &si);
+
+ switch(LOWORD(wParam))
+ {
+ case SB_PAGEUP:
+ nPos = si.nPos - 50;
+ break;
+ case SB_PAGEDOWN:
+ nPos = si.nPos + 50;
+ break;
+ case SB_LINEUP:
+ nPos = si.nPos - 10;
+ break;
+ case SB_LINEDOWN:
+ nPos = si.nPos + 10;
+ break;
+ case SB_THUMBTRACK:
+ case SB_THUMBPOSITION:
+ nPos = si.nTrackPos;
+ break;
+ default:
+ nPos = si.nPos;
+ }
+
+ nPos = max(nPos, si.nMin);
+ nPos = min(nPos, si.nMax);
+ if (nPos != si.nPos)
+ {
+ ScrollWindowEx(hwnd, 0, si.nPos - nPos, NULL, NULL, NULL, NULL, SW_INVALIDATE);
+ si.cbSize = sizeof(si);
+ si.nPos = nPos;
+ si.fMask = SIF_POS;
+ SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
+ UpdateWindow(hwnd);
+ }
+
+ return 0;
}
static LRESULT
Display_OnDestroy(HWND hwnd)
{
- DISPLAYDATA* pData;
- int i;
+ DISPLAYDATA* pData;
+ int i;
- pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- /* Delete the fonts */
- DeleteObject(pData->hCaptionFont);
- DeleteObject(pData->hCharSetFont);
- DeleteObject(pData->hSizeFont);
+ /* Delete the fonts */
+ DeleteObject(pData->hCaptionFont);
+ DeleteObject(pData->hCharSetFont);
+ DeleteObject(pData->hSizeFont);
- for (i = 0; i < MAX_SIZES; i++)
- {
- DeleteObject(pData->hFonts[i]);
- }
+ for (i = 0; i < MAX_SIZES; i++)
+ {
+ DeleteObject(pData->hFonts[i]);
+ }
- /* Free the data structure */
- free(pData);
+ /* Free the data structure */
+ free(pData);
- return 0;
+ return 0;
}
LRESULT
Display_OnPrint(HWND hwnd)
{
- PRINTDLG pfont;
- TEXTMETRIC tm;
- int copies, yPos;
-
- /* Clears the memory before using it */
- ZeroMemory(&pfont, sizeof(pfont));
-
- pfont.lStructSize = sizeof(pfont);
- pfont.hwndOwner = hwnd;
- pfont.hDevMode = NULL;
- pfont.hDevNames = NULL;
- pfont.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
- pfont.nCopies = 1;
- pfont.nFromPage = 0xFFFF;
- pfont.nToPage = 0xFFFF;
- pfont.nMinPage = 1;
- pfont.nMaxPage = 0xFFFF;
-
- /* Opens up the print dialog box */
- if (PrintDlg(&pfont))
- {
- DOCINFO docinfo;
+ PRINTDLG pfont;
+ TEXTMETRIC tm;
+ int copies, yPos;
+
+ /* Clears the memory before using it */
+ ZeroMemory(&pfont, sizeof(pfont));
+
+ pfont.lStructSize = sizeof(pfont);
+ pfont.hwndOwner = hwnd;
+ pfont.hDevMode = NULL;
+ pfont.hDevNames = NULL;
+ pfont.Flags = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
+ pfont.nCopies = 1;
+ pfont.nFromPage = 0xFFFF;
+ pfont.nToPage = 0xFFFF;
+ pfont.nMinPage = 1;
+ pfont.nMaxPage = 0xFFFF;
+
+ /* Opens up the print dialog box */
+ if (PrintDlg(&pfont))
+ {
+ DOCINFO docinfo;
#if 0
- DISPLAYDATA* pData;
+ DISPLAYDATA* pData;
- pData = malloc(sizeof(DISPLAYDATA));
- ZeroMemory(pData, sizeof(DISPLAYDATA));
+ pData = malloc(sizeof(DISPLAYDATA));
+ ZeroMemory(pData, sizeof(DISPLAYDATA));
- /* Sets up the font layout */
- pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
+ /* Sets up the font layout */
+ pData = (DISPLAYDATA*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
#endif
- docinfo.cbSize = sizeof(DOCINFO);
- docinfo.lpszDocName = L"Printing Font";
- docinfo.lpszOutput = NULL;
- docinfo.lpszDatatype = NULL;
- docinfo.fwType = 0;
+ docinfo.cbSize = sizeof(DOCINFO);
+ docinfo.lpszDocName = L"Printing Font";
+ docinfo.lpszOutput = NULL;
+ docinfo.lpszDatatype = NULL;
+ docinfo.fwType = 0;
- /* We start printing */
- StartDoc(pfont.hDC, &docinfo);
+ /* We start printing */
+ StartDoc(pfont.hDC, &docinfo);
- /* Grabs the text metrics for the printer */
- GetTextMetrics(pfont.hDC, &tm);
+ /* Grabs the text metrics for the printer */
+ GetTextMetrics(pfont.hDC, &tm);
- /* Start out with 0 for the y position for the page */
- yPos = 0;
+ /* Start out with 0 for the y position for the page */
+ yPos = 0;
- /* Starts out with the current page */
- StartPage(pfont.hDC);
+ /* Starts out with the current page */
+ StartPage(pfont.hDC);
- /* Used when printing for more than one copy */
- for (copies = 0; copies < pfont.nCopies; copies++)
- {
- /* Test output */
- TextOutW(pfont.hDC, 10, yPos, L"Testing...1...2...3", 19);
+ /* Used when printing for more than one copy */
+ for (copies = 0; copies < pfont.nCopies; copies++)
+ {
+ /* Test output */
+ TextOutW(pfont.hDC, 10, yPos, L"Testing...1...2...3", 19);
- /* TODO: Determine if using Display_DrawText() will work for both rendering out to
the
- window and to the printer output */
+ /* TODO: Determine if using Display_DrawText() will work for both rendering
out to the
+ window and to the printer output */
#if 0
- Display_DrawText(pfont.hDC, pData, yPos);
+ Display_DrawText(pfont.hDC, pData, yPos);
#endif
- /* Ends the current page */
- EndPage(pfont.hDC);
+ /* Ends the current page */
+ EndPage(pfont.hDC);
- /* If we are making more than one copy, start a new page */
- if (copies != pfont.nCopies)
- {
- yPos = 0;
- StartPage(pfont.hDC);
- }
- }
+ /* If we are making more than one copy, start a new page */
+ if (copies != pfont.nCopies)
+ {
+ yPos = 0;
+ StartPage(pfont.hDC);
+ }
+ }
- /* The printing is now over */
- EndDoc(pfont.hDC);
+ /* The printing is now over */
+ EndDoc(pfont.hDC);
- DeleteDC(pfont.hDC);
+ DeleteDC(pfont.hDC);
#if 0
- /* Frees the memory since we no longer need it for now */
- free(pData);
+ /* Frees the memory since we no longer need it for now */
+ free(pData);
#endif
- }
+ }
- return 0;
+ return 0;
}
LRESULT
@@ -542,36 +527,35 @@ Display_GetFullName(HWND hwnd, INT length, PWSTR ptr)
LRESULT CALLBACK
DisplayProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
- switch (message)
- {
- case WM_CREATE:
- return Display_OnCreate(hwnd);
+ switch (message)
+ {
+ case WM_CREATE:
+ return Display_OnCreate(hwnd);
- case WM_PAINT:
- return Display_OnPaint(hwnd);
+ case WM_PAINT:
+ return Display_OnPaint(hwnd);
- case WM_SIZE:
- return Display_OnSize(hwnd);
+ case WM_SIZE:
+ return Display_OnSize(hwnd);
- case WM_VSCROLL:
- return Display_OnVScroll(hwnd, wParam);
+ case WM_VSCROLL:
+ return Display_OnVScroll(hwnd, wParam);
- case FVM_SETTYPEFACE:
- return Display_SetTypeFace(hwnd, (PLOGFONTW)lParam);
+ case FVM_SETTYPEFACE:
+ return Display_SetTypeFace(hwnd, (PLOGFONTW)lParam);
- case FVM_SETSTRING:
- return Display_SetString(hwnd, (WCHAR *)lParam);
+ case FVM_SETSTRING:
+ return Display_SetString(hwnd, (WCHAR *)lParam);
- case FVM_GETFULLNAME:
- return Display_GetFullName(hwnd, (INT)wParam, (PWSTR)lParam);
+ case FVM_GETFULLNAME:
+ return Display_GetFullName(hwnd, (INT)wParam, (PWSTR)lParam);
- case WM_DESTROY:
- return Display_OnDestroy(hwnd);
+ case WM_DESTROY:
+ return Display_OnDestroy(hwnd);
- default:
- return DefWindowProcW(hwnd, message, wParam, lParam);
- }
+ default:
+ return DefWindowProcW(hwnd, message, wParam, lParam);
+ }
- return 0;
+ return 0;
}
-
diff --git a/base/applications/fontview/fontview.c
b/base/applications/fontview/fontview.c
index 1ad824f786d..da6a2bc5d79 100644
--- a/base/applications/fontview/fontview.c
+++ b/base/applications/fontview/fontview.c
@@ -1,24 +1,9 @@
/*
- * fontview
- *
- * fontview.c
- *
- * Copyright (C) 2007 Timo Kreuzer <timo <dot> kreuzer <at> reactos
<dot> org>
- * Copyright (C) 2016-2017 Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ * PROJECT: ReactOS Font Viewer
+ * LICENSE: GPL-2.0-or-later (
https://spdx.org/licenses/GPL-2.0-or-later)
+ * PURPOSE: Main source file
+ * COPYRIGHT: Copyright 2007 Timo Kreuzer <timo.kreuzer(a)reactos.org>
+ * Copyright 2016-2017 Katayama Hirofumi MZ
<katayama.hirofumi.mz(a)gmail.com>
*/
#include "precomp.h"
@@ -47,50 +32,50 @@ BOOL WINAPI GetFontResourceInfoW(LPCWSTR lpFileName, DWORD
*pdwBufSize, void* lp
DWORD
FormatString(
- DWORD dwFlags,
- HINSTANCE hInstance,
- DWORD dwStringId,
- DWORD dwLanguageId,
- LPWSTR lpBuffer,
- DWORD nSize,
- va_list* Arguments
+ DWORD dwFlags,
+ HINSTANCE hInstance,
+ DWORD dwStringId,
+ DWORD dwLanguageId,
+ LPWSTR lpBuffer,
+ DWORD nSize,
+ va_list* Arguments
)
{
- DWORD dwRet;
- int len;
- WCHAR Buffer[1000];
-
- len = LoadStringW(hInstance, dwStringId, (LPWSTR)Buffer, 1000);
-
- if (len)
- {
- dwFlags |= FORMAT_MESSAGE_FROM_STRING;
- dwFlags &= ~(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM);
- dwRet = FormatMessageW(dwFlags, Buffer, 0, dwLanguageId, lpBuffer, nSize, Arguments);
- return dwRet;
- }
- return 0;
+ DWORD dwRet;
+ int len;
+ WCHAR Buffer[1000];
+
+ len = LoadStringW(hInstance, dwStringId, (LPWSTR)Buffer, 1000);
+
+ if (len)
+ {
+ dwFlags |= FORMAT_MESSAGE_FROM_STRING;
+ dwFlags &= ~(FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_FROM_SYSTEM);
+ dwRet = FormatMessageW(dwFlags, Buffer, 0, dwLanguageId, lpBuffer, nSize,
Arguments);
+ return dwRet;
+ }
+ return 0;
}
static void
ErrorMsgBox(HWND hParent, DWORD dwMessageId, ...)
{
- HLOCAL hMemCaption = NULL;
- HLOCAL hMemText = NULL;
- va_list args;
+ HLOCAL hMemCaption = NULL;
+ HLOCAL hMemText = NULL;
+ va_list args;
- va_start(args, dwMessageId);
- FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL, dwMessageId, 0, (LPWSTR)&hMemText, 0, &args);
- va_end(args);
+ va_start(args, dwMessageId);
+ FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL, dwMessageId, 0, (LPWSTR)&hMemText, 0, &args);
+ va_end(args);
- FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
- NULL, IDS_ERROR, 0, (LPWSTR)&hMemCaption, 0, NULL);
+ FormatString(FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL, IDS_ERROR, 0, (LPWSTR)&hMemCaption, 0, NULL);
- MessageBoxW(hParent, hMemText, hMemCaption, MB_ICONERROR);
+ MessageBoxW(hParent, hMemText, hMemCaption, MB_ICONERROR);
- LocalFree(hMemCaption);
- LocalFree(hMemText);
+ LocalFree(hMemCaption);
+ LocalFree(hMemText);
}
int WINAPI
@@ -99,14 +84,14 @@ wWinMain(HINSTANCE hThisInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
- int argc;
- INT i;
- WCHAR** argv;
- DWORD dwSize;
- HWND hMainWnd;
- MSG msg;
- WNDCLASSEXW wincl;
- LPCWSTR fileName;
+ int argc;
+ INT i;
+ WCHAR** argv;
+ DWORD dwSize;
+ HWND hMainWnd;
+ MSG msg;
+ WNDCLASSEXW wincl;
+ LPCWSTR fileName;
switch (GetUserDefaultUILanguage())
{
@@ -118,48 +103,48 @@ wWinMain(HINSTANCE hThisInstance,
break;
}
- g_hInstance = hThisInstance;
+ g_hInstance = hThisInstance;
- /* Get unicode command line */
- argv = CommandLineToArgvW(GetCommandLineW(), &argc);
- if (argc < 2)
- {
+ /* Get unicode command line */
+ argv = CommandLineToArgvW(GetCommandLineW(), &argc);
+ if (argc < 2)
+ {
#if 0
- WCHAR szFileName[MAX_PATH] = L"";
- OPENFILENAMEW fontOpen;
+ WCHAR szFileName[MAX_PATH] = L"";
+ OPENFILENAMEW fontOpen;
WCHAR filter[MAX_PATH*2] = {0}, dialogTitle[MAX_PATH];
- LoadStringW(NULL, IDS_OPEN, dialogTitle, ARRAYSIZE(dialogTitle));
- LoadStringW(NULL, IDS_FILTER_LIST, filter, ARRAYSIZE(filter) - 1);
-
- /* Clears out any values of fontOpen before we use it */
- ZeroMemory(&fontOpen, sizeof(fontOpen));
-
- /* Sets up the open dialog box */
- fontOpen.lStructSize = sizeof(fontOpen);
- fontOpen.hwndOwner = NULL;
- fontOpen.lpstrFilter = filter;
- fontOpen.lpstrFile = szFileName;
- fontOpen.lpstrTitle = dialogTitle;
- fontOpen.nMaxFile = MAX_PATH;
- fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
- fontOpen.lpstrDefExt = L"ttf";
-
- /* Opens up the Open File dialog box in order to chose a font file. */
- if(GetOpenFileNameW(&fontOpen))
- {
- fileName = fontOpen.lpstrFile;
- g_fileName = fileName;
- } else {
- /* If the user decides to close out of the open dialog effectively
- exiting the program altogether */
- return 0;
- }
+ LoadStringW(NULL, IDS_OPEN, dialogTitle, ARRAYSIZE(dialogTitle));
+ LoadStringW(NULL, IDS_FILTER_LIST, filter, ARRAYSIZE(filter) - 1);
+
+ /* Clears out any values of fontOpen before we use it */
+ ZeroMemory(&fontOpen, sizeof(fontOpen));
+
+ /* Sets up the open dialog box */
+ fontOpen.lStructSize = sizeof(fontOpen);
+ fontOpen.hwndOwner = NULL;
+ fontOpen.lpstrFilter = filter;
+ fontOpen.lpstrFile = szFileName;
+ fontOpen.lpstrTitle = dialogTitle;
+ fontOpen.nMaxFile = MAX_PATH;
+ fontOpen.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
+ fontOpen.lpstrDefExt = L"ttf";
+
+ /* Opens up the Open File dialog box in order to chose a font file. */
+ if(GetOpenFileNameW(&fontOpen))
+ {
+ fileName = fontOpen.lpstrFile;
+ g_fileName = fileName;
+ } else {
+ /* If the user decides to close out of the open dialog effectively
+ exiting the program altogether */
+ return 0;
+ }
#endif
- }
- else
- {
- /* Try to add the font resource from command line */
+ }
+ else
+ {
+ /* Try to add the font resource from command line */
for (i = 1; i < argc; ++i)
{
// Treat the last argument as filename
@@ -189,269 +174,269 @@ wWinMain(HINSTANCE hThisInstance,
fileName = argv[i];
}
}
- g_fileName = fileName;
- }
-
- if (!AddFontResourceW(g_fileName))
- {
- ErrorMsgBox(0, IDS_ERROR_NOFONT, g_fileName);
- return -1;
- }
-
- /* Get the font name */
- dwSize = sizeof(g_LogFonts);
- ZeroMemory(g_LogFonts, sizeof(g_LogFonts));
- if (!GetFontResourceInfoW(fileName, &dwSize, g_LogFonts, 2))
- {
- ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
- return -1;
- }
- g_NumFonts = 0;
- for (i = 0; i < ARRAYSIZE(g_LogFonts); ++i)
- {
- if (g_LogFonts[i].lfFaceName[0] == 0)
- break;
-
- ++g_NumFonts;
- }
- if (g_NumFonts == 0)
- {
- ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
- return -1;
- }
-
- /* get font title */
- dwSize = sizeof(g_FontTitle);
- ZeroMemory(g_FontTitle, sizeof(g_FontTitle));
- GetFontResourceInfoW(fileName, &dwSize, g_FontTitle, 1);
-
- if (!Display_InitClass(hThisInstance))
- {
- ErrorMsgBox(0, IDS_ERROR_NOCLASS);
- return -1;
- }
-
- /* The main window class */
- wincl.cbSize = sizeof (WNDCLASSEXW);
- wincl.style = CS_DBLCLKS;
- wincl.lpfnWndProc = MainWndProc;
- wincl.cbClsExtra = 0;
- wincl.cbWndExtra = 0;
- wincl.hInstance = hThisInstance;
- wincl.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
- wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
- wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
- wincl.lpszMenuName = NULL;
- wincl.lpszClassName = g_szFontViewClassName;
- wincl.hIconSm = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
-
- /* Register the window class, and if it fails quit the program */
- if (!RegisterClassExW (&wincl))
- {
- ErrorMsgBox(0, IDS_ERROR_NOCLASS);
- return 0;
- }
-
- /* The class is registered, let's create the main window */
- hMainWnd = CreateWindowExW(
- 0, /* Extended possibilities for variation */
- g_szFontViewClassName, /* Classname */
- g_FontTitle, /* Title Text */
- WS_OVERLAPPEDWINDOW, /* default window */
- CW_USEDEFAULT, /* Windows decides the position */
- CW_USEDEFAULT, /* where the window ends up on the screen */
- 544, /* The programs width */
- 375, /* and height in pixels */
- HWND_DESKTOP, /* The window is a child-window to desktop */
- NULL, /* No menu */
- hThisInstance, /* Program Instance handler */
- NULL /* No Window Creation data */
- );
- ShowWindow(hMainWnd, nCmdShow);
-
- /* Main message loop */
- while (GetMessage (&msg, NULL, 0, 0))
- {
- if (IsDialogMessage(hMainWnd, &msg))
- continue;
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
-
- RemoveFontResourceW(argv[1]);
-
- return (int)msg.wParam;
+ g_fileName = fileName;
+ }
+
+ if (!AddFontResourceW(g_fileName))
+ {
+ ErrorMsgBox(0, IDS_ERROR_NOFONT, g_fileName);
+ return -1;
+ }
+
+ /* Get the font name */
+ dwSize = sizeof(g_LogFonts);
+ ZeroMemory(g_LogFonts, sizeof(g_LogFonts));
+ if (!GetFontResourceInfoW(fileName, &dwSize, g_LogFonts, 2))
+ {
+ ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
+ return -1;
+ }
+ g_NumFonts = 0;
+ for (i = 0; i < ARRAYSIZE(g_LogFonts); ++i)
+ {
+ if (g_LogFonts[i].lfFaceName[0] == 0)
+ break;
+
+ ++g_NumFonts;
+ }
+ if (g_NumFonts == 0)
+ {
+ ErrorMsgBox(0, IDS_ERROR_NOFONT, fileName);
+ return -1;
+ }
+
+ /* get font title */
+ dwSize = sizeof(g_FontTitle);
+ ZeroMemory(g_FontTitle, sizeof(g_FontTitle));
+ GetFontResourceInfoW(fileName, &dwSize, g_FontTitle, 1);
+
+ if (!Display_InitClass(hThisInstance))
+ {
+ ErrorMsgBox(0, IDS_ERROR_NOCLASS);
+ return -1;
+ }
+
+ /* The main window class */
+ wincl.cbSize = sizeof (WNDCLASSEXW);
+ wincl.style = CS_DBLCLKS;
+ wincl.lpfnWndProc = MainWndProc;
+ wincl.cbClsExtra = 0;
+ wincl.cbWndExtra = 0;
+ wincl.hInstance = hThisInstance;
+ wincl.hIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
+ wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
+ wincl.hbrBackground = (HBRUSH)COLOR_BACKGROUND;
+ wincl.lpszMenuName = NULL;
+ wincl.lpszClassName = g_szFontViewClassName;
+ wincl.hIconSm = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TT));
+
+ /* Register the window class, and if it fails quit the program */
+ if (!RegisterClassExW (&wincl))
+ {
+ ErrorMsgBox(0, IDS_ERROR_NOCLASS);
+ return 0;
+ }
+
+ /* The class is registered, let's create the main window */
+ hMainWnd = CreateWindowExW(
+ 0, /* Extended possibilities for variation */
+ g_szFontViewClassName, /* Classname */
+ g_FontTitle, /* Title Text */
+ WS_OVERLAPPEDWINDOW, /* default window */
+ CW_USEDEFAULT, /* Windows decides the position */
+ CW_USEDEFAULT, /* where the window ends up on the screen */
+ 544, /* The programs width */
+ 375, /* and height in pixels */
+ HWND_DESKTOP, /* The window is a child-window to desktop */
+ NULL, /* No menu */
+ hThisInstance, /* Program Instance handler */
+ NULL /* No Window Creation data */
+ );
+ ShowWindow(hMainWnd, nCmdShow);
+
+ /* Main message loop */
+ while (GetMessage (&msg, NULL, 0, 0))
+ {
+ if (IsDialogMessage(hMainWnd, &msg))
+ continue;
+ TranslateMessage(&msg);
+ DispatchMessage(&msg);
+ }
+
+ RemoveFontResourceW(argv[1]);
+
+ return (int)msg.wParam;
}
static LRESULT
MainWnd_OnCreate(HWND hwnd)
{
- WCHAR szQuit[MAX_BUTTONNAME];
- WCHAR szPrint[MAX_BUTTONNAME];
- WCHAR szString[MAX_STRING];
- WCHAR szPrevious[MAX_STRING];
- WCHAR szNext[MAX_STRING];
- HWND hDisplay, hButtonInstall, hButtonPrint, hButtonPrev, hButtonNext;
-
- /* create the display window */
- hDisplay = CreateWindowExW(
- 0, /* Extended style */
- g_szFontDisplayClassName, /* Classname */
- L"", /* Title text */
- WS_CHILD | WS_VSCROLL, /* Window style */
- 0, /* X-pos */
- HEADER_SIZE, /* Y-Pos */
- 550, /* Width */
- 370-HEADER_SIZE, /* Height */
- hwnd, /* Parent */
- (HMENU)IDC_DISPLAY, /* Identifier */
- g_hInstance, /* Program Instance handler */
- NULL /* Window Creation data */
- );
-
- LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
- SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
-
- /* Create the install button */
- LoadStringW(g_hInstance, IDS_INSTALL, szQuit, MAX_BUTTONNAME);
- hButtonInstall = CreateWindowExW(
- 0, /* Extended style */
- L"button", /* Classname */
- szQuit, /* Title text */
- WS_CHILD | WS_VISIBLE, /* Window style */
- BUTTON_POS_X, /* X-pos */
- BUTTON_POS_Y, /* Y-Pos */
- BUTTON_WIDTH, /* Width */
- BUTTON_HEIGHT, /* Height */
- hwnd, /* Parent */
- (HMENU)IDC_INSTALL, /* Identifier */
- g_hInstance, /* Program Instance handler */
- NULL /* Window Creation data */
- );
- SendMessage(hButtonInstall, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
+ WCHAR szQuit[MAX_BUTTONNAME];
+ WCHAR szPrint[MAX_BUTTONNAME];
+ WCHAR szString[MAX_STRING];
+ WCHAR szPrevious[MAX_STRING];
+ WCHAR szNext[MAX_STRING];
+ HWND hDisplay, hButtonInstall, hButtonPrint, hButtonPrev, hButtonNext;
+
+ /* create the display window */
+ hDisplay = CreateWindowExW(
+ 0, /* Extended style */
+ g_szFontDisplayClassName, /* Classname */
+ L"", /* Title text */
+ WS_CHILD | WS_VSCROLL, /* Window style */
+ 0, /* X-pos */
+ HEADER_SIZE, /* Y-Pos */
+ 550, /* Width */
+ 370-HEADER_SIZE, /* Height */
+ hwnd, /* Parent */
+ (HMENU)IDC_DISPLAY, /* Identifier */
+ g_hInstance, /* Program Instance handler */
+ NULL /* Window Creation data */
+ );
+
+ LoadStringW(g_hInstance, IDS_STRING, szString, MAX_STRING);
+ SendMessage(hDisplay, FVM_SETSTRING, 0, (LPARAM)szString);
+
+ /* Create the install button */
+ LoadStringW(g_hInstance, IDS_INSTALL, szQuit, MAX_BUTTONNAME);
+ hButtonInstall = CreateWindowExW(
+ 0, /* Extended style */
+ L"button", /* Classname */
+ szQuit, /* Title text */
+ WS_CHILD | WS_VISIBLE, /* Window style */
+ BUTTON_POS_X, /* X-pos */
+ BUTTON_POS_Y, /* Y-Pos */
+ BUTTON_WIDTH, /* Width */
+ BUTTON_HEIGHT, /* Height */
+ hwnd, /* Parent */
+ (HMENU)IDC_INSTALL, /* Identifier */
+ g_hInstance, /* Program Instance handler */
+ NULL /* Window Creation data */
+ );
+ SendMessage(hButtonInstall, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
EnableWindow(hButtonInstall, !g_DisableInstall);
- /* Create the print button */
- LoadStringW(g_hInstance, IDS_PRINT, szPrint, MAX_BUTTONNAME);
- hButtonPrint = CreateWindowExW(
- 0, /* Extended style */
- L"button", /* Classname */
- szPrint, /* Title text */
- WS_CHILD | WS_VISIBLE, /* Window style */
- 450, /* X-pos */
- BUTTON_POS_Y, /* Y-Pos */
- BUTTON_WIDTH, /* Width */
- BUTTON_HEIGHT, /* Height */
- hwnd, /* Parent */
- (HMENU)IDC_PRINT, /* Identifier */
- g_hInstance, /* Program Instance handler */
- NULL /* Window Creation data */
- );
- SendMessage(hButtonPrint, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
-
- /* Create the previous button */
- LoadStringW(g_hInstance, IDS_PREVIOUS, szPrevious, MAX_BUTTONNAME);
- hButtonPrev = CreateWindowExW(
- 0, /* Extended style */
- L"button", /* Classname */
- szPrevious, /* Title text */
- WS_CHILD | WS_VISIBLE, /* Window style */
- 450, /* X-pos */
- BUTTON_POS_Y, /* Y-Pos */
- BUTTON_WIDTH, /* Width */
- BUTTON_HEIGHT, /* Height */
- hwnd, /* Parent */
- (HMENU)IDC_PREV, /* Identifier */
- g_hInstance, /* Program Instance handler */
- NULL /* Window Creation data */
- );
- SendMessage(hButtonPrev, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
-
- /* Create the next button */
- LoadStringW(g_hInstance, IDS_NEXT, szNext, MAX_BUTTONNAME);
- hButtonNext = CreateWindowExW(
- 0, /* Extended style */
- L"button", /* Classname */
- szNext, /* Title text */
- WS_CHILD | WS_VISIBLE, /* Window style */
- 450, /* X-pos */
- BUTTON_POS_Y, /* Y-Pos */
- BUTTON_WIDTH, /* Width */
- BUTTON_HEIGHT, /* Height */
- hwnd, /* Parent */
- (HMENU)IDC_NEXT, /* Identifier */
- g_hInstance, /* Program Instance handler */
- NULL /* Window Creation data */
- );
- SendMessage(hButtonNext, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
-
- EnableWindow(hButtonPrev, FALSE);
- if (g_NumFonts <= 1)
- EnableWindow(hButtonNext, FALSE);
-
- /* Init the display window with the font name */
- g_FontIndex = 0;
- SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
- ShowWindow(hDisplay, SW_SHOWNORMAL);
-
- if (g_FontPrint)
- PostMessage(hwnd, WM_COMMAND, IDC_PRINT, 0);
-
- return 0;
+ /* Create the print button */
+ LoadStringW(g_hInstance, IDS_PRINT, szPrint, MAX_BUTTONNAME);
+ hButtonPrint = CreateWindowExW(
+ 0, /* Extended style */
+ L"button", /* Classname */
+ szPrint, /* Title text */
+ WS_CHILD | WS_VISIBLE, /* Window style */
+ 450, /* X-pos */
+ BUTTON_POS_Y, /* Y-Pos */
+ BUTTON_WIDTH, /* Width */
+ BUTTON_HEIGHT, /* Height */
+ hwnd, /* Parent */
+ (HMENU)IDC_PRINT, /* Identifier */
+ g_hInstance, /* Program Instance handler */
+ NULL /* Window Creation data */
+ );
+ SendMessage(hButtonPrint, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
+
+ /* Create the previous button */
+ LoadStringW(g_hInstance, IDS_PREVIOUS, szPrevious, MAX_BUTTONNAME);
+ hButtonPrev = CreateWindowExW(
+ 0, /* Extended style */
+ L"button", /* Classname */
+ szPrevious, /* Title text */
+ WS_CHILD | WS_VISIBLE, /* Window style */
+ 450, /* X-pos */
+ BUTTON_POS_Y, /* Y-Pos */
+ BUTTON_WIDTH, /* Width */
+ BUTTON_HEIGHT, /* Height */
+ hwnd, /* Parent */
+ (HMENU)IDC_PREV, /* Identifier */
+ g_hInstance, /* Program Instance handler */
+ NULL /* Window Creation data */
+ );
+ SendMessage(hButtonPrev, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
+
+ /* Create the next button */
+ LoadStringW(g_hInstance, IDS_NEXT, szNext, MAX_BUTTONNAME);
+ hButtonNext = CreateWindowExW(
+ 0, /* Extended style */
+ L"button", /* Classname */
+ szNext, /* Title text */
+ WS_CHILD | WS_VISIBLE, /* Window style */
+ 450, /* X-pos */
+ BUTTON_POS_Y, /* Y-Pos */
+ BUTTON_WIDTH, /* Width */
+ BUTTON_HEIGHT, /* Height */
+ hwnd, /* Parent */
+ (HMENU)IDC_NEXT, /* Identifier */
+ g_hInstance, /* Program Instance handler */
+ NULL /* Window Creation data */
+ );
+ SendMessage(hButtonNext, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),
(LPARAM)TRUE);
+
+ EnableWindow(hButtonPrev, FALSE);
+ if (g_NumFonts <= 1)
+ EnableWindow(hButtonNext, FALSE);
+
+ /* Init the display window with the font name */
+ g_FontIndex = 0;
+ SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
+ ShowWindow(hDisplay, SW_SHOWNORMAL);
+
+ if (g_FontPrint)
+ PostMessage(hwnd, WM_COMMAND, IDC_PRINT, 0);
+
+ return 0;
}
static LRESULT
MainWnd_OnSize(HWND hwnd)
{
- RECT rc;
- HWND hInstall, hPrint, hPrev, hNext, hDisplay;
- HDWP hDWP;
+ RECT rc;
+ HWND hInstall, hPrint, hPrev, hNext, hDisplay;
+ HDWP hDWP;
- GetClientRect(hwnd, &rc);
+ GetClientRect(hwnd, &rc);
- hDWP = BeginDeferWindowPos(5);
+ hDWP = BeginDeferWindowPos(5);
- hInstall = GetDlgItem(hwnd, IDC_INSTALL);
- if (hDWP)
- hDWP = DeferWindowPos(hDWP, hInstall, NULL, BUTTON_POS_X, BUTTON_POS_Y, BUTTON_WIDTH,
BUTTON_HEIGHT, SWP_NOZORDER);
+ hInstall = GetDlgItem(hwnd, IDC_INSTALL);
+ if (hDWP)
+ hDWP = DeferWindowPos(hDWP, hInstall, NULL, BUTTON_POS_X, BUTTON_POS_Y,
BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
- hPrint = GetDlgItem(hwnd, IDC_PRINT);
- if (hDWP)
- hDWP = DeferWindowPos(hDWP, hPrint, NULL, BUTTON_POS_X + BUTTON_WIDTH + BUTTON_PADDING,
BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
+ hPrint = GetDlgItem(hwnd, IDC_PRINT);
+ if (hDWP)
+ hDWP = DeferWindowPos(hDWP, hPrint, NULL, BUTTON_POS_X + BUTTON_WIDTH +
BUTTON_PADDING, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
- hPrev = GetDlgItem(hwnd, IDC_PREV);
- if (hDWP)
- hDWP = DeferWindowPos(hDWP, hPrev, NULL, rc.right - (BUTTON_WIDTH * 2 + BUTTON_PADDING
+ BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
+ hPrev = GetDlgItem(hwnd, IDC_PREV);
+ if (hDWP)
+ hDWP = DeferWindowPos(hDWP, hPrev, NULL, rc.right - (BUTTON_WIDTH * 2 +
BUTTON_PADDING + BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
- hNext = GetDlgItem(hwnd, IDC_NEXT);
- if (hDWP)
- hDWP = DeferWindowPos(hDWP, hNext, NULL, rc.right - (BUTTON_WIDTH + BUTTON_POS_X),
BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
+ hNext = GetDlgItem(hwnd, IDC_NEXT);
+ if (hDWP)
+ hDWP = DeferWindowPos(hDWP, hNext, NULL, rc.right - (BUTTON_WIDTH +
BUTTON_POS_X), BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, SWP_NOZORDER);
- hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
- if (hDWP)
- hDWP = DeferWindowPos(hDWP, hDisplay, NULL, 0, HEADER_SIZE, rc.right, rc.bottom -
HEADER_SIZE, SWP_NOZORDER);
+ hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
+ if (hDWP)
+ hDWP = DeferWindowPos(hDWP, hDisplay, NULL, 0, HEADER_SIZE, rc.right, rc.bottom -
HEADER_SIZE, SWP_NOZORDER);
- EndDeferWindowPos(hDWP);
+ EndDeferWindowPos(hDWP);
- InvalidateRect(hwnd, NULL, TRUE);
+ InvalidateRect(hwnd, NULL, TRUE);
- return 0;
+ return 0;
}
static LRESULT
MainWnd_OnPaint(HWND hwnd)
{
- HDC hDC;
- PAINTSTRUCT ps;
- RECT rc;
-
- hDC = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rc);
- rc.top = HEADER_SIZE - 2;
- rc.bottom = HEADER_SIZE;
- FillRect(hDC, &rc, GetStockObject(GRAY_BRUSH));
- EndPaint(hwnd, &ps);
- return 0;
+ HDC hDC;
+ PAINTSTRUCT ps;
+ RECT rc;
+
+ hDC = BeginPaint(hwnd, &ps);
+ GetClientRect(hwnd, &rc);
+ rc.top = HEADER_SIZE - 2;
+ rc.bottom = HEADER_SIZE;
+ FillRect(hDC, &rc, GetStockObject(GRAY_BRUSH));
+ EndPaint(hwnd, &ps);
+ return 0;
}
static LRESULT
@@ -542,37 +527,37 @@ MainWnd_OnInstall(HWND hwnd)
static LRESULT
MainWnd_OnPrev(HWND hwnd)
{
- HWND hDisplay;
- if (g_FontIndex > 0)
- {
- --g_FontIndex;
- EnableWindow(GetDlgItem(hwnd, IDC_NEXT), TRUE);
- if (g_FontIndex == 0)
- EnableWindow(GetDlgItem(hwnd, IDC_PREV), FALSE);
-
- hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
- SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
- InvalidateRect(hDisplay, NULL, TRUE);
- }
- return 0;
+ HWND hDisplay;
+ if (g_FontIndex > 0)
+ {
+ --g_FontIndex;
+ EnableWindow(GetDlgItem(hwnd, IDC_NEXT), TRUE);
+ if (g_FontIndex == 0)
+ EnableWindow(GetDlgItem(hwnd, IDC_PREV), FALSE);
+
+ hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
+ SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
+ InvalidateRect(hDisplay, NULL, TRUE);
+ }
+ return 0;
}
static LRESULT
MainWnd_OnNext(HWND hwnd)
{
- HWND hDisplay;
- if (g_FontIndex + 1 < g_NumFonts)
- {
- ++g_FontIndex;
- EnableWindow(GetDlgItem(hwnd, IDC_PREV), TRUE);
- if (g_FontIndex == g_NumFonts - 1)
- EnableWindow(GetDlgItem(hwnd, IDC_NEXT), FALSE);
-
- hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
- SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
- InvalidateRect(hDisplay, NULL, TRUE);
- }
- return 0;
+ HWND hDisplay;
+ if (g_FontIndex + 1 < g_NumFonts)
+ {
+ ++g_FontIndex;
+ EnableWindow(GetDlgItem(hwnd, IDC_PREV), TRUE);
+ if (g_FontIndex == g_NumFonts - 1)
+ EnableWindow(GetDlgItem(hwnd, IDC_NEXT), FALSE);
+
+ hDisplay = GetDlgItem(hwnd, IDC_DISPLAY);
+ SendMessage(hDisplay, FVM_SETTYPEFACE, 0, (LPARAM)&g_LogFonts[g_FontIndex]);
+ InvalidateRect(hDisplay, NULL, TRUE);
+ }
+ return 0;
}
LRESULT CALLBACK
@@ -580,41 +565,39 @@ MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
- case WM_CREATE:
- return MainWnd_OnCreate(hwnd);
+ case WM_CREATE:
+ return MainWnd_OnCreate(hwnd);
- case WM_PAINT:
- return MainWnd_OnPaint(hwnd);
+ case WM_PAINT:
+ return MainWnd_OnPaint(hwnd);
- case WM_SIZE:
- return MainWnd_OnSize(hwnd);
+ case WM_SIZE:
+ return MainWnd_OnSize(hwnd);
- case WM_COMMAND:
- switch(LOWORD(wParam))
- {
- case IDC_INSTALL:
- return MainWnd_OnInstall(hwnd);
+ case WM_COMMAND:
+ switch(LOWORD(wParam))
+ {
+ case IDC_INSTALL:
+ return MainWnd_OnInstall(hwnd);
- case IDC_PRINT:
- return Display_OnPrint(hwnd);
+ case IDC_PRINT:
+ return Display_OnPrint(hwnd);
- case IDC_PREV:
- return MainWnd_OnPrev(hwnd);
+ case IDC_PREV:
+ return MainWnd_OnPrev(hwnd);
- case IDC_NEXT:
- return MainWnd_OnNext(hwnd);
- }
- break;
+ case IDC_NEXT:
+ return MainWnd_OnNext(hwnd);
+ }
+ break;
- case WM_DESTROY:
- PostQuitMessage (0); /* send a WM_QUIT to the message queue */
- break;
+ case WM_DESTROY:
+ PostQuitMessage (0); /* send a WM_QUIT to the message queue */
+ break;
- default: /* for messages that we don't deal with */
- return DefWindowProcW(hwnd, message, wParam, lParam);
- }
+ default: /* for messages that we don't deal with */
+ return DefWindowProcW(hwnd, message, wParam, lParam);
+ }
- return 0;
+ return 0;
}
-
-/* EOF */