Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/teraterm/teraterm/font_pp.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10390 - (hide annotations) (download) (as text)
Tue Nov 29 14:30:13 2022 UTC (16 months, 1 week ago) by zmatsuo
File MIME type: text/x-c++src
File size: 11242 byte(s)
フォントダイアログの親子関係を修正した

- 「その他の設定」ダイアログの「フォント」タブの「VTウィンドウフォント」
- trunkのみ

ticket #46078
1 zmatsuo 8771 /*
2 nmaya 9048 * (C) 2020- TeraTerm Project
3 zmatsuo 8771 * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without
6     * modification, are permitted provided that the following conditions
7     * are met:
8     *
9     * 1. Redistributions of source code must retain the above copyright
10     * notice, this list of conditions and the following disclaimer.
11     * 2. Redistributions in binary form must reproduce the above copyright
12     * notice, this list of conditions and the following disclaimer in the
13     * documentation and/or other materials provided with the distribution.
14     * 3. The name of the author may not be used to endorse or promote products
15     * derived from this software without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18     * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19     * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20     * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22     * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23     * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26     * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    
29     /* font property page */
30    
31     #include <stdio.h>
32     #define _CRTDBG_MAP_ALLOC
33     #include <stdlib.h>
34     #include <crtdbg.h>
35     #include <assert.h>
36    
37     #include "tttypes.h"
38     #include "font_pp_res.h"
39     #include "dlglib.h"
40     #include "setting.h"
41     #include "vtdisp.h" // for DispSetupFontDlg()
42     #include "buffer.h"
43     #include "compat_win.h" // for CF_INACTIVEFONTS
44 zmatsuo 10047 #include "helpid.h"
45 zmatsuo 10150 #include "codeconv.h"
46 zmatsuo 8771
47     #include "font_pp.h"
48    
49     // �e���v���[�g�������������s��
50     #define REWRITE_TEMPLATE
51    
52     struct FontPPData {
53     HINSTANCE hInst;
54 zmatsuo 9549 const wchar_t *UILanguageFileW;
55 zmatsuo 8771 TTTSet *pts;
56     DLGTEMPLATE *dlg_templ;
57     // LOGFONTA VTFont;
58 zmatsuo 10150 LOGFONTW DlgFont;
59 zmatsuo 8771 };
60    
61 zmatsuo 10150 static void GetDlgLogFont(HWND hWnd, const TTTSet *ts, LOGFONTW *logfont)
62 zmatsuo 8771 {
63     memset(logfont, 0, sizeof(*logfont));
64     logfont->lfHeight = -GetFontPixelFromPoint(hWnd, ts->DialogFontPoint);
65 zmatsuo 10150 wcsncpy_s(logfont->lfFaceName, _countof(logfont->lfFaceName),ts->DialogFontNameW, _TRUNCATE);
66 zmatsuo 8771 logfont->lfCharSet = ts->DialogFontCharSet;
67     }
68    
69 zmatsuo 10150 static void SetDlgLogFont(HWND hWnd, const LOGFONTW *logfont, TTTSet *ts)
70 zmatsuo 8771 {
71 zmatsuo 10150 wcsncpy_s(ts->DialogFontNameW, _countof(ts->DialogFontNameW), logfont->lfFaceName, _TRUNCATE);
72 zmatsuo 8771 ts->DialogFontPoint = GetFontPointFromPixel(hWnd, -logfont->lfHeight);
73     ts->DialogFontCharSet = logfont->lfCharSet;
74     }
75    
76     static UINT_PTR CALLBACK TFontHook(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
77     {
78     if (Message == WM_INITDIALOG) {
79     FontPPData *dlg_data = (FontPPData *)(((CHOOSEFONTA *)lParam)->lCustData);
80 zmatsuo 9549 wchar_t *uimsg;
81     static const wchar_t def[] = L"\"Font style\" selection here won't affect actual font appearance.";
82     GetI18nStrWW("Tera Term", "DLG_CHOOSEFONT_STC6", def, dlg_data->UILanguageFileW, &uimsg);
83 zmatsuo 9324 SetDlgItemTextW(Dialog, stc6, uimsg);
84 zmatsuo 9549 free(uimsg);
85 zmatsuo 8771
86     SetFocus(GetDlgItem(Dialog,cmb1));
87    
88     CenterWindow(Dialog, GetParent(Dialog));
89     }
90     return FALSE;
91     }
92    
93 zmatsuo 8832 static BOOL ChooseDlgFont(HWND hWnd, FontPPData *dlg_data)
94 zmatsuo 8771 {
95     const TTTSet *ts = dlg_data->pts;
96    
97     // �_�C�A���O�\��
98 zmatsuo 10150 CHOOSEFONTW cf = {};
99 zmatsuo 8771 cf.lStructSize = sizeof(cf);
100     cf.hwndOwner = hWnd;
101     cf.lpLogFont = &dlg_data->DlgFont;
102     cf.Flags =
103     CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT |
104     CF_SHOWHELP | CF_NOVERTFONTS |
105     CF_ENABLEHOOK;
106     if (IsWindows7OrLater() && ts->ListHiddenFonts) {
107     cf.Flags |= CF_INACTIVEFONTS;
108     }
109     cf.lpfnHook = &TFontHook;
110     cf.nFontType = REGULAR_FONTTYPE;
111     cf.hInstance = dlg_data->hInst;
112     cf.lCustData = (LPARAM)dlg_data;
113 zmatsuo 10150 BOOL result = ChooseFontW(&cf);
114 zmatsuo 8832 return result;
115 zmatsuo 8771 }
116    
117     static void EnableCodePage(HWND hWnd, BOOL enable)
118     {
119 zmatsuo 10056 EnableWindow(GetDlgItem(hWnd, IDC_VTFONT_CODEPAGE_LABEL), enable);
120     EnableWindow(GetDlgItem(hWnd, IDC_VTFONT_CODEPAGE_EDIT), enable);
121 zmatsuo 8771 }
122    
123 zmatsuo 10150 static void SetFontString(HWND hWnd, int item, const LOGFONTW *logfont)
124 zmatsuo 8771 {
125     // https://docs.microsoft.com/en-us/windows/win32/api/dimm/ns-dimm-logfonta
126     // http://www.coara.or.jp/~tkuri/D/015.htm#D2002-09-14
127 zmatsuo 10150 wchar_t b[128];
128     swprintf_s(b, L"%s (%d,%d) %d", logfont->lfFaceName, logfont->lfWidth, logfont->lfHeight, logfont->lfCharSet);
129     SetDlgItemTextW(hWnd, item, b);
130 zmatsuo 8771 }
131    
132     static void SetVTFontString(HWND hWnd, int item, const TTTSet *ts)
133     {
134 zmatsuo 10150 LOGFONTW logfont = {};
135 zmatsuo 8771 logfont.lfWidth = ts->VTFontSize.x;
136     logfont.lfHeight = ts->VTFontSize.y;
137 zmatsuo 10150 ACPToWideChar_t(ts->VTFont, logfont.lfFaceName, _countof(logfont.lfFaceName));
138 zmatsuo 8771 logfont.lfCharSet = ts->VTFontCharSet;
139     SetFontString(hWnd, item, &logfont);
140     }
141    
142     static INT_PTR CALLBACK Proc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
143     {
144     static const DlgTextInfo TextInfos[] = {
145 zmatsuo 10056 { IDC_VTWINFONT, "DLG_TAB_FONT_VTWINFONT" },
146     { IDC_VTFONT_CHOOSE, "DLG_TAB_FONT_BTN_SELECT" },
147     { IDC_VTFONT_TITLE, "DLG_TAB_FONT_VTFONT_TITLE" },
148     { IDC_VTFONT_CODEPAGE_LABEL, "DLG_TAB_FONT_CODEPAGE_LABEL" },
149     { IDC_FONT_QUALITY_LABEL, "DLG_TAB_VISUAL_FONT_QUALITY" },
150     { IDC_DLGFONT, "DLG_TAB_FONT_DLGFONT"},
151     { IDC_DLGFONT_CHOOSE, "DLG_TAB_FONT_BTN_SELECT" },
152     { IDC_DLGFONT_DEFAULT, "DLG_TAB_FONT_BTN_DEFAULT" },
153 zmatsuo 10048 { IDC_LIST_HIDDEN_FONTS, "DLG_TAB_GENERAL_LIST_HIDDEN_FONTS" },
154 zmatsuo 10056 { IDC_LIST_PRO_FONTS, "DLG_TAB_FONT_LIST_PRO_FONTS" },
155     { IDC_CHARACTER_SPACE_TITLE, "DLG_TAB_FONT_CHARACTER_SPACE" },
156 zmatsuo 8771 };
157     FontPPData *dlg_data = (FontPPData *)GetWindowLongPtr(hWnd, DWLP_USER);
158     TTTSet *ts = dlg_data == NULL ? NULL : dlg_data->pts;
159    
160     switch (msg) {
161     case WM_INITDIALOG: {
162     dlg_data = (FontPPData *)(((PROPSHEETPAGEW_V1 *)lp)->lParam);
163     ts = dlg_data->pts;
164     SetWindowLongPtr(hWnd, DWLP_USER, (LONG_PTR)dlg_data);
165 zmatsuo 9359 SetDlgTextsW(hWnd, TextInfos, _countof(TextInfos), dlg_data->pts->UILanguageFileW);
166 zmatsuo 8771
167     GetDlgLogFont(GetParent(hWnd), ts, &dlg_data->DlgFont);
168    
169     SetVTFontString(hWnd, IDC_VTFONT_EDIT, ts);
170    
171     CheckDlgButton(hWnd,
172     UnicodeDebugParam.UseUnicodeApi ? IDC_VTFONT_UNICODE : IDC_VTFONT_ANSI,
173     BST_CHECKED);
174 zmatsuo 10056 SetDlgItemInt(hWnd, IDC_VTFONT_CODEPAGE_EDIT, UnicodeDebugParam.CodePageForANSIDraw, FALSE);
175 zmatsuo 8771 EnableCodePage(hWnd, UnicodeDebugParam.UseUnicodeApi ? FALSE : TRUE);
176    
177     CheckDlgButton(hWnd, IDC_LIST_HIDDEN_FONTS, ts->ListHiddenFonts);
178     EnableWindow(GetDlgItem(hWnd, IDC_LIST_HIDDEN_FONTS), IsWindows7OrLater() ? TRUE : FALSE);
179    
180     SetDlgItemInt(hWnd, IDC_SPACE_RIGHT, ts->FontDW, FALSE);
181     SetDlgItemInt(hWnd, IDC_SPACE_LEFT, ts->FontDH, FALSE);
182     SetDlgItemInt(hWnd, IDC_SPACE_TOP, ts->FontDX, FALSE);
183     SetDlgItemInt(hWnd, IDC_SPACE_BOTTOM, ts->FontDY, FALSE);
184    
185     const static I18nTextInfo visual_font_quality[] = {
186     { "DLG_TAB_VISUAL_FONT_QUALITY_DEFAULT", L"Default" },
187     { "DLG_TAB_VISUAL_FONT_QUALITY_NONANTIALIASED", L"Non-Antialiased" },
188     { "DLG_TAB_VISUAL_FONT_QUALITY_ANTIALIASED", L"Antialiased" },
189     { "DLG_TAB_VISUAL_FONT_QUALITY_CLEARTYPE", L"ClearType" },
190     };
191 zmatsuo 9359 SetI18nListW("Tera Term", hWnd, IDC_FONT_QUALITY, visual_font_quality, _countof(visual_font_quality),
192     ts->UILanguageFileW, 0);
193 zmatsuo 8771 int cur =
194     ts->FontQuality == DEFAULT_QUALITY ? 0 :
195     ts->FontQuality == NONANTIALIASED_QUALITY ? 1 :
196     ts->FontQuality == ANTIALIASED_QUALITY ? 2 :
197     /*ts->FontQuality == CLEARTYPE_QUALITY ? */ 3;
198     SendDlgItemMessage(hWnd, IDC_FONT_QUALITY, CB_SETCURSEL, cur, 0);
199    
200     SetFontString(hWnd, IDC_DLGFONT_EDIT, &dlg_data->DlgFont);
201 zmatsuo 8832
202     break;
203 zmatsuo 8771 }
204     case WM_NOTIFY: {
205     NMHDR *nmhdr = (NMHDR *)lp;
206     switch (nmhdr->code) {
207     case PSN_APPLY: {
208     UnicodeDebugParam.UseUnicodeApi =
209     IsDlgButtonChecked(hWnd, IDC_VTFONT_UNICODE) == BST_CHECKED;
210     UnicodeDebugParam.CodePageForANSIDraw =
211 zmatsuo 10056 GetDlgItemInt(hWnd, IDC_VTFONT_CODEPAGE_EDIT, NULL, FALSE);
212 zmatsuo 8771 // ANSI�\���p���R�[�h�y�[�W����������
213     BuffSetDispCodePage(UnicodeDebugParam.CodePageForANSIDraw);
214     ts->ListHiddenFonts = IsDlgButtonChecked(hWnd, IDC_LIST_HIDDEN_FONTS) == BST_CHECKED;
215    
216     SetDlgLogFont(GetParent(hWnd), &dlg_data->DlgFont, ts);
217    
218 zmatsuo 9549 // font quality
219     int cur = (int)SendDlgItemMessageA(hWnd, IDC_FONT_QUALITY, CB_GETCURSEL, 0, 0);
220     ts->FontQuality =
221     cur == 0 ? DEFAULT_QUALITY :
222     cur == 1 ? NONANTIALIASED_QUALITY :
223     cur == 2 ? ANTIALIASED_QUALITY :
224     CLEARTYPE_QUALITY;
225    
226 zmatsuo 8771 break;
227     }
228 zmatsuo 10047 case PSN_HELP: {
229     HWND vtwin = GetParent(hWnd);
230     vtwin = GetParent(vtwin);
231     PostMessage(vtwin, WM_USER_DLGHELP2, HlpMenuSetupAdditionalFont, 0);
232 zmatsuo 8771 break;
233 zmatsuo 10047 }
234 zmatsuo 8771 default:
235     break;
236     }
237     break;
238     }
239     case WM_COMMAND: {
240     switch (wp) {
241     case IDC_VTFONT_ANSI | (BN_CLICKED << 16):
242     case IDC_VTFONT_UNICODE | (BN_CLICKED << 16): {
243     BOOL enable = (wp & 0xffff) == IDC_VTFONT_ANSI ? TRUE : FALSE;
244     EnableCodePage(hWnd, enable);
245     break;
246     }
247     case IDC_VTFONT_CHOOSE | (BN_CLICKED << 16): {
248 zmatsuo 10390 DispSetupFontDlg(hWnd);
249 zmatsuo 10056 SetDlgItemInt(hWnd, IDC_VTFONT_CODEPAGE_EDIT, UnicodeDebugParam.CodePageForANSIDraw, FALSE);
250 zmatsuo 8771 SetVTFontString(hWnd, IDC_VTFONT_EDIT, ts);
251     break;
252     }
253     case IDC_DLGFONT_CHOOSE | (BN_CLICKED << 16):
254 zmatsuo 8832 if (ChooseDlgFont(hWnd, dlg_data) != FALSE) {
255     SetFontString(hWnd, IDC_DLGFONT_EDIT, &dlg_data->DlgFont);
256     }
257 zmatsuo 8771 break;
258    
259     case IDC_DLGFONT_DEFAULT | (BN_CLICKED << 16): {
260 zmatsuo 10150 GetMessageboxFontW(&dlg_data->DlgFont);
261 zmatsuo 8771 SetFontString(hWnd, IDC_DLGFONT_EDIT, &dlg_data->DlgFont);
262     }
263    
264     default:
265     break;
266     }
267     break;
268     }
269     default:
270     return FALSE;
271     }
272     return FALSE;
273     }
274    
275 zmatsuo 9936 static UINT CALLBACK CallBack(HWND hwnd, UINT uMsg, struct _PROPSHEETPAGEW *ppsp)
276 zmatsuo 9923 {
277     (void)hwnd;
278     UINT ret_val = 0;
279     switch (uMsg) {
280     case PSPCB_CREATE:
281     ret_val = 1;
282     break;
283     case PSPCB_RELEASE:
284     free((void *)ppsp->pResource);
285     ppsp->pResource = NULL;
286     free((void *)ppsp->lParam);
287     ppsp->lParam = NULL;
288     break;
289     default:
290     break;
291     }
292     return ret_val;
293     }
294    
295 zmatsuo 8771 HPROPSHEETPAGE FontPageCreate(HINSTANCE inst, TTTSet *pts)
296     {
297     // �� common/tt_res.h �� font_pp_res.h ���l�����v����������
298     const int id = IDD_TABSHEET_FONT;
299    
300     FontPPData *Param = (FontPPData *)calloc(sizeof(FontPPData), 1);
301     Param->hInst = inst;
302 zmatsuo 9549 Param->UILanguageFileW = pts->UILanguageFileW;
303 zmatsuo 8771 Param->pts = pts;
304    
305     PROPSHEETPAGEW_V1 psp = {};
306     psp.dwSize = sizeof(psp);
307 zmatsuo 10047 psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK | PSP_USETITLE | PSP_HASHELP;
308 zmatsuo 8771 psp.hInstance = inst;
309 zmatsuo 9923 psp.pfnCallback = CallBack;
310 zmatsuo 10056 wchar_t *UIMsg;
311     GetI18nStrWW("Tera Term", "DLG_TABSHEET_TITLE_FONT",
312     L"Font", pts->UILanguageFileW, &UIMsg);
313     psp.pszTitle = UIMsg;
314 zmatsuo 8771 psp.pszTemplate = MAKEINTRESOURCEW(id);
315     #if defined(REWRITE_TEMPLATE)
316     psp.dwFlags |= PSP_DLGINDIRECT;
317     Param->dlg_templ = TTGetDlgTemplate(inst, MAKEINTRESOURCEA(id));
318     psp.pResource = Param->dlg_templ;
319     #endif
320    
321     psp.pfnDlgProc = Proc;
322     psp.lParam = (LPARAM)Param;
323    
324 zmatsuo 9324 HPROPSHEETPAGE hpsp = CreatePropertySheetPageW((LPPROPSHEETPAGEW)&psp);
325 zmatsuo 10056 free(UIMsg);
326 zmatsuo 8771 return hpsp;
327     }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26