ReactOS  0.4.15-dev-338-g3dad100
fontdlg.c
Go to the documentation of this file.
1 /*
2  * COMMDLG - Font Dialog
3  *
4  * Copyright 1994 Martin Ayotte
5  * Copyright 1996 Albrecht Kleine
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #include <ctype.h>
23 #include <stdlib.h>
24 #include <stdarg.h>
25 #include <stdio.h>
26 #include <string.h>
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winnls.h"
30 #include "wingdi.h"
31 #include "winuser.h"
32 #include "commdlg.h"
33 #include "dlgs.h"
34 #include "wine/debug.h"
35 #include "wine/heap.h"
36 #include "cderr.h"
37 #include "cdlg.h"
38 
40 
41 typedef struct
42 {
46  int added;
48 
49 
50 static const WCHAR strWineFontData[] = {'_','_','W','I','N','E','_','F','O','N','T','D','L','G','D','A','T','A',0};
51 static const WCHAR strWineFontData_a[] =
52  {'_','_','W','I','N','E','_','F','O','N','T','D','L','G','D','A','T','A','_','A',0};
53 static const WCHAR chooseFontW[] = {'C','H','O','O','S','E','_','F','O','N','T',0};
54 static const WCHAR fontsizefmtW[] = {'%','d',0};
55 
56 /* image list with TrueType bitmaps and more */
57 static HIMAGELIST himlTT = 0;
58 #define TTBITMAP_XSIZE 20 /* x-size of the bitmaps */
59 
62 
63 /* There is a table here of all charsets, and the sample text for each.
64  * There is a second table that translates a charset into an index into
65  * the first table.
66  */
67 
68 #define CI(cs) ((IDS_CHARSET_##cs)-IDS_CHARSET_ANSI)
69 
70 
71 static const WCHAR stWestern[]={'A','a','B','b','Y','y','Z','z',0}; /* Western and default */
72 static const WCHAR stSymbol[]={'S','y','m','b','o','l',0}; /* Symbol */
73 static const WCHAR stShiftJis[]={'A','a',0x3042,0x3041,0x30a2,0x30a1,0x4e9c,0x5b87,0}; /* Shift JIS */
74 static const WCHAR stHangul[]={0xac00,0xb098,0xb2e4,'A','a','B','Y','y','Z','z',0}; /* Hangul */
75 static const WCHAR stGB2312[]={0x5fae,0x8f6f,0x4e2d,0x6587,0x8f6f,0x4ef6,0}; /* GB2312 */
76 static const WCHAR stBIG5[]={0x4e2d,0x6587,0x5b57,0x578b,0x7bc4,0x4f8b,0}; /* BIG5 */
77 static const WCHAR stGreek[]={'A','a','B','b',0x0391,0x03b1,0x0392,0x03b2,0}; /* Greek */
78 static const WCHAR stTurkish[]={'A','a','B','b',0x011e,0x011f,0x015e,0x015f,0}; /* Turkish */
79 static const WCHAR stHebrew[]={'A','a','B','b',0x05e0,0x05e1,0x05e9,0x05ea,0}; /* Hebrew */
80 static const WCHAR stArabic[]={'A','a','B','b',0x0627,0x0628,0x062c,0x062f,0x0647,0x0648,0x0632,0};/* Arabic */
81 static const WCHAR stBaltic[]={'A','a','B','b','Y','y','Z','z',0}; /* Baltic */
82 static const WCHAR stVietname[]={'A','a','B','b',0x01a0,0x01a1,0x01af,0x01b0,0}; /* Vietnamese */
83 static const WCHAR stCyrillic[]={'A','a','B','b',0x0411,0x0431,0x0424,0x0444,0}; /* Cyrillic */
84 static const WCHAR stEastEur[]={'A','a','B','b',0xc1,0xe1,0xd4,0xf4,0}; /* East European */
85 static const WCHAR stThai[]={'A','a','B','b',0x0e2d,0x0e31,0x0e01,0x0e29,0x0e23,0x0e44,0x0e17,0x0e22,0}; /* Thai */
86 static const WCHAR stJohab[]={0xac00,0xb098,0xb2e4,'A','a','B','Y','y','Z','z',0}; /* Johab */
87 static const WCHAR stMac[]={'A','a','B','b','Y','y','Z','z',0}; /* Mac */
88 static const WCHAR stOEM[]={'A','a','B','b',0xf8,0xf1,0xfd,0}; /* OEM */
89 /* the following character sets actually behave different (Win2K observation):
90  * the sample string is 'sticky': it uses the sample string of the previous
91  * selected character set. That behaviour looks like some default, which is
92  * not (yet) implemented. */
93 static const WCHAR stVISCII[]={'A','a','B','b',0}; /* VISCII */
94 static const WCHAR stTCVN[]={'A','a','B','b',0}; /* TCVN */
95 static const WCHAR stKOI8[]={'A','a','B','b',0}; /* KOI-8 */
96 static const WCHAR stIso88593[]={'A','a','B','b',0}; /* ISO-8859-3 */
97 static const WCHAR stIso88594[]={'A','a','B','b',0}; /* ISO-8859-4 */
98 static const WCHAR stIso885910[]={'A','a','B','b',0}; /* ISO-8859-10 */
99 static const WCHAR stCeltic[]={'A','a','B','b',0};/* Celtic */
100 
101 static const WCHAR * const sample_lang_text[]={
107 
108 
109 static const BYTE CHARSET_ORDER[256]={
110  CI(ANSI), 0, CI(SYMBOL), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(MAC), 0, 0,
115  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
116  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
117  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
118  CI(JIS), CI(HANGUL), CI(JOHAB), 0, 0, 0, CI(GB2312), 0, CI(BIG5), 0, 0, 0, 0, 0, 0, 0,
119  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120  0, CI(GREEK), CI(TURKISH), CI(VIETNAMESE), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
121  0, CI(HEBREW), CI(ARABIC), 0, 0, 0, 0, 0, 0, 0, CI(BALTIC), 0, 0, 0, 0, 0,
122  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(RUSSIAN), 0, 0, 0,
123  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(THAI), 0,
124  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, CI(EE), 0,
125  CI(VISCII), CI(TCVN), CI(KOI8), CI(ISO3), CI(ISO4), CI(ISO10), CI(CELTIC), 0, 0, 0, 0, 0, 0, 0, 0, CI(OEM),
126 };
127 
128 static const struct {
130  const char *name;
131 } cfflags[] = {
132 #define XX(x) { x, #x },
135  XX(CF_SHOWHELP)
140  XX(CF_USESTYLE)
141  XX(CF_EFFECTS)
142  XX(CF_APPLY)
143  XX(CF_ANSIONLY)
148  XX(CF_WYSIWYG)
151  XX(CF_TTONLY)
158 #undef XX
159 };
160 
161 static void _dump_cf_flags(DWORD cflags)
162 {
163  unsigned int i;
164 
165  for (i = 0; i < ARRAY_SIZE(cfflags); i++)
166  if (cfflags[i].mask & cflags)
167  TRACE("%s|",cfflags[i].name);
168  TRACE("\n");
169 }
170 
171 /***********************************************************************
172  * ChooseFontW (COMDLG32.@)
173  *
174  * Create a font dialog box.
175  *
176  * PARAMS
177  * lpChFont [I/O] in: information to initialize the dialog box.
178  * out: User's color selection
179  *
180  * RETURNS
181  * TRUE: Ok button clicked.
182  * FALSE: Cancel button clicked, or error.
183  */
185 {
186  LPCVOID template;
187  HRSRC hResInfo;
188  HINSTANCE hDlginst;
189  HGLOBAL hDlgTmpl;
190 
191  TRACE("(%p)\n", lpChFont);
192 
193  if ( (lpChFont->Flags&CF_ENABLETEMPLATEHANDLE)!=0 )
194  {
195  template=lpChFont->hInstance;
196  } else
197  {
198  if ( (lpChFont->Flags&CF_ENABLETEMPLATE)!=0 )
199  {
200  hDlginst=lpChFont->hInstance;
201  if( !(hResInfo = FindResourceW(hDlginst, lpChFont->lpTemplateName,
202  (LPWSTR)RT_DIALOG)))
203  {
205  return FALSE;
206  }
207  } else
208  {
209  hDlginst=COMDLG32_hInstance;
210  if (!(hResInfo = FindResourceW(hDlginst, chooseFontW, (LPWSTR)RT_DIALOG)))
211  {
213  return FALSE;
214  }
215  }
216  if (!(hDlgTmpl = LoadResource(hDlginst, hResInfo )) ||
217  !(template = LockResource( hDlgTmpl )))
218  {
220  return FALSE;
221  }
222  }
223  if (TRACE_ON(commdlg))
224  _dump_cf_flags(lpChFont->Flags);
225 
226  if (lpChFont->Flags & CF_SELECTSCRIPT)
227  FIXME(": unimplemented flag (ignored)\n");
228 
230  lpChFont->hwndOwner, FormatCharDlgProcW, (LPARAM)lpChFont );
231 }
232 
233 /***********************************************************************
234  * ChooseFontA (COMDLG32.@)
235  *
236  * See ChooseFontW.
237  */
239 {
240  LPCVOID template;
241  HRSRC hResInfo;
242  HINSTANCE hDlginst;
243  HGLOBAL hDlgTmpl;
244 
245  TRACE("(%p)\n", lpChFont);
246 
247  if ( (lpChFont->Flags&CF_ENABLETEMPLATEHANDLE)!=0 )
248  {
249  template=lpChFont->hInstance;
250  } else
251  {
252  if ( (lpChFont->Flags&CF_ENABLETEMPLATE)!=0 )
253  {
254  hDlginst=lpChFont->hInstance;
255  if( !(hResInfo = FindResourceA(hDlginst, lpChFont->lpTemplateName,
256  (LPSTR)RT_DIALOG)))
257  {
259  return FALSE;
260  }
261  } else
262  {
263  hDlginst=COMDLG32_hInstance;
264  if (!(hResInfo = FindResourceW(hDlginst, chooseFontW, (LPWSTR)RT_DIALOG)))
265  {
267  return FALSE;
268  }
269  }
270  if (!(hDlgTmpl = LoadResource(hDlginst, hResInfo )) ||
271  !(template = LockResource( hDlgTmpl )))
272  {
274  return FALSE;
275  }
276  }
277  if (TRACE_ON(commdlg))
278  _dump_cf_flags(lpChFont->Flags);
279  if (lpChFont->Flags & CF_SELECTSCRIPT)
280  FIXME(": unimplemented flag (ignored)\n");
281 
283  lpChFont->hwndOwner, FormatCharDlgProcA, (LPARAM)lpChFont );
284 }
285 
286 #define TEXT_EXTRAS 4
287 #define TEXT_COLORS 16
288 
290 {
291  0x00000000L,0x00000080L,0x00008000L,0x00008080L,
292  0x00800000L,0x00800080L,0x00808000L,0x00808080L,
293  0x00c0c0c0L,0x000000ffL,0x0000ff00L,0x0000ffffL,
294  0x00ff0000L,0x00ff00ffL,0x00ffff00L,0x00FFFFFFL
295 };
296 
297 /***********************************************************************
298  * CFn_HookCallChk32 [internal]
299  */
300 static BOOL CFn_HookCallChk32(const CHOOSEFONTW *lpcf)
301 {
302  if (lpcf)
303  if(lpcf->Flags & CF_ENABLEHOOK)
304  if (lpcf->lpfnHook)
305  return TRUE;
306  return FALSE;
307 }
308 
309 /*************************************************************************
310  * AddFontFamily [internal]
311  */
312 static INT AddFontFamily(const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM,
313  UINT nFontType, const CHOOSEFONTW *lpcf, HWND hwnd, LPCFn_ENUMSTRUCT e)
314 {
315  int i;
316  WORD w;
317  const LOGFONTW *lplf = &(lpElfex->elfLogFont);
318 
319  TRACE("font=%s (nFontType=%d)\n", debugstr_w(lplf->lfFaceName), nFontType);
320 
321  if (lpcf->Flags & CF_FIXEDPITCHONLY)
322  if (!(lplf->lfPitchAndFamily & FIXED_PITCH))
323  return 1;
324  if (lpcf->Flags & CF_ANSIONLY)
325  if (lplf->lfCharSet != ANSI_CHARSET)
326  return 1;
327  if (lpcf->Flags & CF_TTONLY)
328  if (!(nFontType & TRUETYPE_FONTTYPE))
329  return 1;
330  if (lpcf->Flags & CF_NOVERTFONTS)
331  if (lplf->lfFaceName[0] == '@')
332  return 1;
333 
334  if (e) e->added++;
335 
337  if (i == CB_ERR) {
339  if( i != CB_ERR) {
340  /* store some important font information */
341  w = (lplf->lfPitchAndFamily) << 8 |
342  (HIWORD(lpNTM->ntmTm.ntmFlags) & 0xff);
343  SendMessageW(hwnd, CB_SETITEMDATA, i, MAKELONG(nFontType,w));
344  }
345  }
346  return 1;
347 }
348 
349 /*************************************************************************
350  * FontFamilyEnumProc32 [internal]
351  */
353  const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam)
354 {
357  return AddFontFamily( lpElfex, (const NEWTEXTMETRICEXW *) metrics,
358  dwFontType, e->lpcf32w, e->hWnd1, e);
359 }
360 
361 /*************************************************************************
362  * SetFontStylesToCombo2 [internal]
363  *
364  * Fill font style information into combobox (without using font.c directly)
365  */
367 {
368 #define FSTYLES 4
369  struct FONTSTYLE
370  {
371  int italic;
372  int weight;
373  UINT resId;
374  };
375  static const struct FONTSTYLE fontstyles[FSTYLES]={
376  { 0, FW_NORMAL, IDS_FONT_REGULAR },
377  { 1, FW_NORMAL, IDS_FONT_ITALIC },
378  { 0, FW_BOLD, IDS_FONT_BOLD },
380  };
381  HFONT hf;
382  TEXTMETRICW tm;
383  int i,j;
384  LOGFONTW lf;
385 
386  lf = *lplf;
387 
388  for (i=0;i<FSTYLES;i++)
389  {
390  lf.lfItalic=fontstyles[i].italic;
391  lf.lfWeight=fontstyles[i].weight;
392  hf=CreateFontIndirectW(&lf);
393  hf=SelectObject(hdc,hf);
395  hf=SelectObject(hdc,hf);
396  DeleteObject(hf);
397  /* font successful created ? */
398  if (((fontstyles[i].weight == FW_NORMAL && tm.tmWeight <= FW_MEDIUM) ||
399  (fontstyles[i].weight == FW_BOLD && tm.tmWeight > FW_MEDIUM)) &&
400  ((tm.tmItalic != 0)==fontstyles[i].italic))
401  {
402  WCHAR name[64];
403  LoadStringW(COMDLG32_hInstance, fontstyles[i].resId, name, 64);
405  if (j==CB_ERR) return TRUE;
407  MAKELONG(tm.tmWeight,fontstyles[i].italic));
408  if (j==CB_ERR) return TRUE;
409  }
410  }
411  return FALSE;
412 }
413 
414 /*************************************************************************
415  * AddFontSizeToCombo3 [internal]
416  */
418 {
419  int j;
420  WCHAR buffer[20];
421 
422  if ( (!(lpcf->Flags & CF_LIMITSIZE)) ||
423  ((lpcf->Flags & CF_LIMITSIZE) && (h >= lpcf->nSizeMin) && (h <= lpcf->nSizeMax)))
424  {
427  if (j==CB_ERR)
428  {
430  if (j!=CB_ERR) j = SendMessageW(hwnd, CB_SETITEMDATA, j, h);
431  if (j==CB_ERR) return TRUE;
432  }
433  }
434  return FALSE;
435 }
436 
437 /*************************************************************************
438  * SetFontSizesToCombo3 [internal]
439  */
441 {
442  static const BYTE sizes[]={6,7,8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72};
443  unsigned int i;
444 
445  for (i = 0; i < ARRAY_SIZE(sizes); i++)
446  if (AddFontSizeToCombo3(hwnd, sizes[i], lpcf)) return TRUE;
447  return FALSE;
448 }
449 
450 /*************************************************************************
451  * CFn_GetDC [internal]
452  */
453 static inline HDC CFn_GetDC(const CHOOSEFONTW *lpcf)
454 {
455  HDC ret = ((lpcf->Flags & CF_PRINTERFONTS) && lpcf->hDC) ?
456  lpcf->hDC :
457  GetDC(0);
458  if(!ret) ERR("HDC failure!!!\n");
459  return ret;
460 }
461 
462 /*************************************************************************
463  * GetScreenDPI [internal]
464  */
465 static inline int GetScreenDPI(void)
466 {
467  HDC hdc;
468  int result;
469 
470  hdc = GetDC(0);
472  ReleaseDC(0, hdc);
473 
474  return result;
475 }
476 
477 /*************************************************************************
478  * CFn_ReleaseDC [internal]
479  */
480 static inline void CFn_ReleaseDC(const CHOOSEFONTW *lpcf, HDC hdc)
481 {
482  if(!((lpcf->Flags & CF_PRINTERFONTS) && lpcf->hDC))
483  ReleaseDC(0, hdc);
484 }
485 
486 /*************************************************************************
487  * select_combo_item [internal]
488  */
489 static void select_combo_item( HWND dialog, int id, int sel )
490 {
491  HWND combo = GetDlgItem( dialog, id );
492  SendMessageW( combo, CB_SETCURSEL, sel, 0 );
494 }
495 
496 /***********************************************************************
497  * AddFontStyle [internal]
498  */
499 static INT AddFontStyle( const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM,
500  UINT nFontType, const CHOOSEFONTW *lpcf, HWND hcmb2, HWND hcmb3, HWND hDlg)
501 {
502  int i;
503  const LOGFONTW *lplf = &(lpElfex->elfLogFont);
504  HWND hcmb5;
505  HDC hdc;
506 
507  TRACE("(nFontType=%d)\n",nFontType);
508  TRACE(" %s h=%d w=%d e=%d o=%d wg=%d i=%d u=%d s=%d"
509  " ch=%d op=%d cp=%d q=%d pf=%xh\n",
510  debugstr_w(lplf->lfFaceName),lplf->lfHeight,lplf->lfWidth,
511  lplf->lfEscapement,lplf->lfOrientation,
512  lplf->lfWeight,lplf->lfItalic,lplf->lfUnderline,
513  lplf->lfStrikeOut,lplf->lfCharSet, lplf->lfOutPrecision,
514  lplf->lfClipPrecision,lplf->lfQuality, lplf->lfPitchAndFamily);
515  if (nFontType & RASTER_FONTTYPE)
516  {
517  INT points;
518  points = MulDiv( lpNTM->ntmTm.tmHeight - lpNTM->ntmTm.tmInternalLeading,
519  72, GetScreenDPI());
520  if (AddFontSizeToCombo3(hcmb3, points, lpcf))
521  return 0;
522  } else if (SetFontSizesToCombo3(hcmb3, lpcf)) return 0;
523 
524  if (!SendMessageW(hcmb2, CB_GETCOUNT, 0, 0))
525  {
526  BOOL res;
527  if(!(hdc = CFn_GetDC(lpcf))) return 0;
528  res = SetFontStylesToCombo2(hcmb2,hdc,lplf);
529  CFn_ReleaseDC(lpcf, hdc);
530  if (res)
531  return 0;
532  }
533  if (!( hcmb5 = GetDlgItem(hDlg, cmb5))) return 1;
534  i = SendMessageW( hcmb5, CB_FINDSTRINGEXACT, 0,
535  (LPARAM)lpElfex->elfScript);
536  if( i == CB_ERR) {
537  i = SendMessageW( hcmb5, CB_ADDSTRING, 0,
538  (LPARAM)lpElfex->elfScript);
539  if( i != CB_ERR)
540  SendMessageW( hcmb5, CB_SETITEMDATA, i, lplf->lfCharSet);
541  }
542  return 1 ;
543 }
544 
545 static void CFn_FitFontSize( HWND hDlg, int points)
546 {
547  int i,n;
548 
549  /* look for fitting font size in combobox3 */
550  n=SendDlgItemMessageW(hDlg, cmb3, CB_GETCOUNT, 0, 0);
551  for (i=0;i<n;i++)
552  {
553  if (points == (int)SendDlgItemMessageW
554  (hDlg,cmb3, CB_GETITEMDATA,i,0))
555  {
556  select_combo_item( hDlg, cmb3, i );
557  return;
558  }
559  }
560 
561  /* no default matching size, set text manually */
562  SetDlgItemInt(hDlg, cmb3, points, TRUE);
563 }
564 
565 static BOOL CFn_FitFontStyle( HWND hDlg, LONG packedstyle )
566 {
567  LONG id;
568  int i;
569  /* look for fitting font style in combobox2 */
570  for (i=0;i<TEXT_EXTRAS;i++)
571  {
572  id = SendDlgItemMessageW(hDlg, cmb2, CB_GETITEMDATA, i, 0);
573  if (packedstyle == id)
574  {
575  select_combo_item( hDlg, cmb2, i );
576  return TRUE;
577  }
578  }
579  return FALSE;
580 }
581 
582 
583 static BOOL CFn_FitCharSet( HWND hDlg, int charset )
584 {
585  int i,n,cs;
586  /* look for fitting char set in combobox5 */
587  n=SendDlgItemMessageW(hDlg, cmb5, CB_GETCOUNT, 0, 0);
588  for (i=0;i<n;i++)
589  {
591  if (charset == cs)
592  {
593  select_combo_item( hDlg, cmb5, i );
594  return TRUE;
595  }
596  }
597  /* no charset fits: select the first one in the list */
598  select_combo_item( hDlg, cmb5, 0 );
599  return FALSE;
600 }
601 
602 /***********************************************************************
603  * FontStyleEnumProc32 [internal]
604  */
606  const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam )
607 {
609  HWND hcmb2=s->hWnd1;
610  HWND hcmb3=s->hWnd2;
611  HWND hDlg=GetParent(hcmb3);
612  return AddFontStyle( lpElfex, (const NEWTEXTMETRICEXW *) metrics,
613  dwFontType, s->lpcf32w, hcmb2, hcmb3, hDlg);
614 }
615 
616 /***********************************************************************
617  * CFn_WMInitDialog [internal]
618  */
620 {
621  HDC hdc;
622  int i,j;
623  BOOL init = FALSE;
624  long pstyle;
626  LPLOGFONTW lpxx;
628  static const WCHAR strColorName[] = {'[','c','o','l','o','r',' ','n','a','m','e',']',0};
629 
630  SetPropW(hDlg, strWineFontData, lpcf);
631  lpxx=lpcf->lpLogFont;
632  TRACE("WM_INITDIALOG lParam=%08lX\n", lParam);
633 
634  if (lpcf->lStructSize != sizeof(CHOOSEFONTW))
635  {
636  ERR("structure size failure!!!\n");
637  EndDialog (hDlg, 0);
638  return FALSE;
639  }
640  if (!himlTT)
643 
644  /* Set effect flags */
645  if((lpcf->Flags & CF_EFFECTS) && (lpcf->Flags & CF_INITTOLOGFONTSTRUCT))
646  {
647  if(lpxx->lfUnderline)
648  CheckDlgButton(hDlg, chx2, TRUE);
649  if(lpxx->lfStrikeOut)
650  CheckDlgButton(hDlg, chx1, TRUE);
651  }
652 
653  if (!(lpcf->Flags & CF_SHOWHELP) || !IsWindow(lpcf->hwndOwner))
655  if (!(lpcf->Flags & CF_APPLY))
657  if (lpcf->Flags & CF_NOSCRIPTSEL)
659  if (lpcf->Flags & CF_EFFECTS)
660  {
661  for (i=0;i<TEXT_COLORS;i++)
662  {
663  WCHAR name[30];
664 
666  ARRAY_SIZE(name)) == 0 )
667  {
668  memcpy(name, strColorName, sizeof(strColorName));
669  }
672  /* look for a fitting value in color combobox */
673  if (textcolors[i]==lpcf->rgbColors)
675  }
676  }
677  else
678  {
684  }
685  if(!(hdc = CFn_GetDC(lpcf)))
686  {
687  EndDialog (hDlg, 0);
688  return FALSE;
689  }
690  s.hWnd1=GetDlgItem(hDlg,cmb1);
691  s.lpcf32w=lpcf;
692  do {
693  LOGFONTW elf;
694  s.added = 0;
695  elf.lfCharSet = DEFAULT_CHARSET; /* enum all charsets */
696  elf.lfPitchAndFamily = 0;
697  elf.lfFaceName[0] = '\0'; /* enum all fonts */
699  {
700  TRACE("EnumFontFamiliesEx returns 0\n");
701  break;
702  }
703  if (s.added) break;
704  if (lpcf->Flags & CF_FIXEDPITCHONLY) {
705  FIXME("No font found with fixed pitch only, dropping flag.\n");
706  lpcf->Flags &= ~CF_FIXEDPITCHONLY;
707  continue;
708  }
709  if (lpcf->Flags & CF_TTONLY) {
710  FIXME("No font found with truetype only, dropping flag.\n");
711  lpcf->Flags &= ~CF_TTONLY;
712  continue;
713  }
714  break;
715  } while (1);
716 
717 
718  if (lpcf->Flags & CF_INITTOLOGFONTSTRUCT)
719  {
720  /* look for fitting font name in combobox1 */
722  if (j!=CB_ERR)
723  {
724  INT height = lpxx->lfHeight < 0 ? -lpxx->lfHeight :
725  lpxx->lfHeight;
726  INT points;
727  int charset = lpxx->lfCharSet;
728  points = MulDiv( height, 72, GetScreenDPI());
729  pstyle = MAKELONG(lpxx->lfWeight > FW_MEDIUM ? FW_BOLD:
730  FW_NORMAL,lpxx->lfItalic !=0);
731  select_combo_item( hDlg, cmb1, j );
732  init = TRUE;
733  /* look for fitting font style in combobox2 */
734  CFn_FitFontStyle(hDlg, pstyle);
735  /* look for fitting font size in combobox3 */
736  CFn_FitFontSize(hDlg, points);
737  CFn_FitCharSet( hDlg, charset );
738  }
739  }
740  if (!init)
741  {
742  select_combo_item( hDlg, cmb1, 0 );
743  select_combo_item( hDlg, cmb2, 0 );
744  select_combo_item( hDlg, cmb3, 0 );
745  select_combo_item( hDlg, cmb5, 0 );
746  }
747  /* limit text length user can type in as font size */
748  SendDlgItemMessageW(hDlg, cmb3, CB_LIMITTEXT, 5, 0);
749 
750  if ((lpcf->Flags & CF_USESTYLE) && lpcf->lpszStyle)
751  {
753  if (j!=CB_ERR) select_combo_item( hDlg, cmb2, j );
754  }
755  CFn_ReleaseDC(lpcf, hdc);
756  SetCursor(hcursor);
757  return TRUE;
758 }
759 
760 
761 /***********************************************************************
762  * CFn_WMMeasureItem [internal]
763  */
765 {
766  HDC hdc;
767  HFONT hfontprev;
768  TEXTMETRICW tm;
770  INT height = 0, cx;
771 
772  if (!himlTT)
776  lpmi->itemHeight = height + 2;
777  /* use MAX of bitmap height and tm.tmHeight .*/
778  hdc=GetDC(hDlg);
779  if(!hdc) return 0;
780  hfontprev = SelectObject( hdc, (HFONT)SendMessageW( hDlg, WM_GETFONT, 0, 0 ));
782  if( tm.tmHeight > lpmi->itemHeight) lpmi->itemHeight = tm.tmHeight;
783  SelectObject(hdc, hfontprev);
784  ReleaseDC(hDlg, hdc);
785  return 0;
786 }
787 
788 
789 /***********************************************************************
790  * CFn_WMDrawItem [internal]
791  */
793 {
794  HBRUSH hBrush;
795  WCHAR buffer[40];
796  COLORREF cr, oldText=0, oldBk=0;
797  RECT rect;
798  int nFontType;
799  int cx, cy, idx;
801 
802  if (lpdi->itemID == (UINT)-1) /* got no items */
803  DrawFocusRect(lpdi->hDC, &lpdi->rcItem);
804  else
805  {
806  if (lpdi->CtlType == ODT_COMBOBOX)
807  {
808  if (lpdi->itemState & ODS_SELECTED)
809  {
812  oldBk=SetBkColor(lpdi->hDC, GetSysColor(COLOR_HIGHLIGHT));
813  } else
814  {
815  hBrush = SelectObject(lpdi->hDC, GetStockObject(LTGRAY_BRUSH));
816  SelectObject(lpdi->hDC, hBrush);
817  }
818  FillRect(lpdi->hDC, &lpdi->rcItem, hBrush);
819  }
820  else
821  return TRUE; /* this should never happen */
822 
823  rect=lpdi->rcItem;
824  switch (lpdi->CtlID)
825  {
826  case cmb1:
827  /* TRACE(commdlg,"WM_Drawitem cmb1\n"); */
830  (LPARAM)buffer);
831  TextOutW(lpdi->hDC, lpdi->rcItem.left + cx + 4,
832  lpdi->rcItem.top, buffer, lstrlenW(buffer));
833  nFontType = SendMessageW(lpdi->hwndItem, CB_GETITEMDATA, lpdi->itemID,0L);
834  idx = -1;
835  if (nFontType & TRUETYPE_FONTTYPE) {
836  idx = 0; /* picture: TT */
837  if( nFontType & NTM_TT_OPENTYPE)
838  idx = 2; /* picture: O */
839  } else if( nFontType & NTM_PS_OPENTYPE)
840  idx = 3; /* picture: O+ps */
841  else if( nFontType & NTM_TYPE1)
842  idx = 4; /* picture: a */
843  else if( nFontType & DEVICE_FONTTYPE)
844  idx = 1; /* picture: printer */
845  if( idx >= 0)
846  ImageList_Draw( himlTT, idx, lpdi->hDC, lpdi->rcItem.left,
847  (lpdi->rcItem.top + lpdi->rcItem.bottom - cy) / 2, ILD_TRANSPARENT);
848  break;
849  case cmb2:
850  case cmb3:
851  /* TRACE(commdlg,"WM_DRAWITEN cmb2,cmb3\n"); */
852  case cmb5:
854  (LPARAM)buffer);
855  TextOutW(lpdi->hDC, lpdi->rcItem.left,
856  lpdi->rcItem.top, buffer, lstrlenW(buffer));
857  break;
858 
859  case cmb4:
860  /* TRACE(commdlg,"WM_DRAWITEM cmb4 (=COLOR)\n"); */
862  (LPARAM)buffer);
863  TextOutW(lpdi->hDC, lpdi->rcItem.left + 25+5,
864  lpdi->rcItem.top, buffer, lstrlenW(buffer));
865  cr = SendMessageW(lpdi->hwndItem, CB_GETITEMDATA, lpdi->itemID,0L);
866  hBrush = CreateSolidBrush(cr);
867  if (hBrush)
868  {
869  hBrush = SelectObject (lpdi->hDC, hBrush) ;
870  rect.right=rect.left+25;
871  rect.top++;
872  rect.left+=5;
873  rect.bottom--;
874  Rectangle( lpdi->hDC, rect.left, rect.top,
875  rect.right, rect.bottom );
876  DeleteObject( SelectObject (lpdi->hDC, hBrush)) ;
877  }
878  rect=lpdi->rcItem;
879  rect.left+=25+5;
880  break;
881 
882  default:
883  return TRUE; /* this should never happen */
884  }
885  if (lpdi->itemState & ODS_SELECTED)
886  {
887  SetTextColor(lpdi->hDC, oldText);
888  SetBkColor(lpdi->hDC, oldBk);
889  }
890  }
891  return TRUE;
892 }
893 
895 {
896  BOOL invalid_size = FALSE;
897  INT i, size;
898 
899  i = SendDlgItemMessageW(hDlg, cmb3, CB_GETCURSEL, 0, 0);
900  if (i != CB_ERR)
902  else
903  {
904  WCHAR buffW[8], *endptrW;
905 
906  GetDlgItemTextW(hDlg, cmb3, buffW, ARRAY_SIZE(buffW));
907  size = wcstol(buffW, &endptrW, 10);
908  invalid_size = size == 0 && *endptrW;
909 
910  if (size == 0)
911  size = 10;
912  }
913 
914  cf->iPointSize = 10 * size;
915  cf->lpLogFont->lfHeight = -MulDiv(cf->iPointSize, GetScreenDPI(), 720);
916  return invalid_size ? -1 : size;
917 }
918 
919 /***********************************************************************
920  * CFn_WMCommand [internal]
921  */
923 {
924  int i;
925  long l;
926  HDC hdc;
927  BOOL cmb_selected_by_edit = FALSE;
928 
929  if (!lpcf) return FALSE;
930 
932  {
933  int idx;
934  WCHAR str_edit[256], str_cmb[256];
935  int cmb = LOWORD(wParam);
936 
937  GetDlgItemTextW(hDlg, cmb, str_edit, ARRAY_SIZE(str_edit));
938  idx = SendDlgItemMessageW(hDlg, cmb, CB_FINDSTRING, -1, (LPARAM)str_edit);
939  if(idx != -1)
940  {
941  SendDlgItemMessageW(hDlg, cmb, CB_GETLBTEXT, idx, (LPARAM)str_cmb);
942 
943  /* Select listbox entry only if we have an exact match */
944  if(lstrcmpiW(str_edit, str_cmb) == 0)
945  {
946  SendDlgItemMessageW(hDlg, cmb, CB_SETCURSEL, idx, 0);
947  SendDlgItemMessageW(hDlg, cmb, CB_SETEDITSEL, 0, -1); /* Remove edit field selection */
948  cmb_selected_by_edit = TRUE;
949  }
950  }
951  }
952 
953  TRACE("WM_COMMAND wParam=%08X lParam=%08lX\n", (LONG)wParam, lParam);
954  switch (LOWORD(wParam))
955  {
956  case cmb1:
957  if (HIWORD(wParam) == CBN_SELCHANGE || cmb_selected_by_edit)
958  {
959  INT pointsize; /* save current pointsize */
960  LONG pstyle; /* save current style */
961  int charset;
962  int idx;
963  if(!(hdc = CFn_GetDC(lpcf)))
964  {
965  EndDialog (hDlg, 0);
966  return TRUE;
967  }
968  idx = SendDlgItemMessageW(hDlg, cmb3, CB_GETCURSEL, 0, 0);
969  pointsize = (int)SendDlgItemMessageW( hDlg, cmb3, CB_GETITEMDATA,
970  idx, 0);
971  idx = SendDlgItemMessageW(hDlg, cmb2, CB_GETCURSEL, 0, 0);
972  pstyle = SendDlgItemMessageW(hDlg, cmb2, CB_GETITEMDATA, idx, 0);
973  idx = SendDlgItemMessageW(hDlg, cmb5, CB_GETCURSEL, 0, 0);
975 
979  i=SendDlgItemMessageW(hDlg, cmb1, CB_GETCURSEL, 0, 0);
980  if (i!=CB_ERR)
981  {
984  LOGFONTW enumlf;
986  (LPARAM)enumlf.lfFaceName);
987  TRACE("WM_COMMAND/cmb1 =>%s\n", debugstr_w(enumlf.lfFaceName));
988  s.hWnd1=GetDlgItem(hDlg, cmb2);
989  s.hWnd2=GetDlgItem(hDlg, cmb3);
990  s.lpcf32w=lpcf;
991  enumlf.lfCharSet = DEFAULT_CHARSET; /* enum all charsets */
992  enumlf.lfPitchAndFamily = 0;
993  EnumFontFamiliesExW(hdc, &enumlf,
995  CFn_FitFontStyle(hDlg, pstyle);
996  if( pointsize != CB_ERR) CFn_FitFontSize(hDlg, pointsize);
997  if( charset != CB_ERR) CFn_FitCharSet( hDlg, charset );
998  SetCursor(hcursor);
999  }
1000  CFn_ReleaseDC(lpcf, hdc);
1001  }
1002  break;
1003  case chx1:
1004  case chx2:
1005  case cmb2:
1006  case cmb3:
1007  case cmb5:
1008  if (HIWORD(wParam) == CBN_SELCHANGE || HIWORD(wParam) == BN_CLICKED || cmb_selected_by_edit)
1009  {
1010  WCHAR str[256];
1011  WINDOWINFO wininfo;
1012  LPLOGFONTW lpxx=lpcf->lpLogFont;
1013 
1014  TRACE("WM_COMMAND/cmb2,3 =%08lX\n", lParam);
1015 
1016  /* face name */
1018  if (i==CB_ERR)
1019  GetDlgItemTextW( hDlg, cmb1, str, ARRAY_SIZE(str));
1020  else
1021  {
1023  (LPARAM)str);
1025  lpcf->nFontType = LOWORD(l);
1026  /* FIXME: lpcf->nFontType |= .... SIMULATED_FONTTYPE and so */
1027  /* same value reported to the EnumFonts
1028  call back with the extra FONTTYPE_... bits added */
1029  lpxx->lfPitchAndFamily = HIWORD(l) >> 8;
1030  }
1031  lstrcpynW(lpxx->lfFaceName, str, ARRAY_SIZE(lpxx->lfFaceName));
1032 
1033  /* style */
1034  i=SendDlgItemMessageW(hDlg, cmb2, CB_GETCURSEL, 0, 0);
1035  if (i!=CB_ERR)
1036  {
1038  if (0!=(lpxx->lfItalic=HIWORD(l)))
1039  lpcf->nFontType |= ITALIC_FONTTYPE;
1040  if ((lpxx->lfWeight=LOWORD(l)) > FW_MEDIUM)
1041  lpcf->nFontType |= BOLD_FONTTYPE;
1042  }
1043 
1044  /* size */
1045  get_dialog_font_point_size(hDlg, lpcf);
1046 
1047  /* charset */
1048  i=SendDlgItemMessageW(hDlg, cmb5, CB_GETCURSEL, 0, 0);
1049  if (i!=CB_ERR)
1051  else
1052  lpxx->lfCharSet = DEFAULT_CHARSET;
1053  lpxx->lfStrikeOut=IsDlgButtonChecked(hDlg,chx1);
1054  lpxx->lfUnderline=IsDlgButtonChecked(hDlg,chx2);
1055  lpxx->lfWidth=lpxx->lfOrientation=lpxx->lfEscapement=0;
1058  lpxx->lfQuality=DEFAULT_QUALITY;
1059 
1060  wininfo.cbSize=sizeof(wininfo);
1061 
1062  if( GetWindowInfo( GetDlgItem( hDlg, stc5), &wininfo ) )
1063  {
1064  MapWindowPoints( 0, hDlg, (LPPOINT) &wininfo.rcWindow, 2);
1065  InvalidateRect( hDlg, &wininfo.rcWindow, TRUE );
1066  }
1067  }
1068  break;
1069 
1070  case cmb4:
1071  i=SendDlgItemMessageW(hDlg, cmb4, CB_GETCURSEL, 0, 0);
1072  if (i!=CB_ERR)
1073  {
1074  WINDOWINFO wininfo;
1075 
1076  lpcf->rgbColors = SendDlgItemMessageW(hDlg, cmb4, CB_GETITEMDATA, i, 0);
1077  wininfo.cbSize=sizeof(wininfo);
1078 
1079  if( GetWindowInfo( GetDlgItem( hDlg, stc5), &wininfo ) )
1080  {
1081  MapWindowPoints( 0, hDlg, (LPPOINT) &wininfo.rcWindow, 2);
1082  InvalidateRect( hDlg, &wininfo.rcWindow, TRUE );
1083  }
1084  }
1085  break;
1086 
1087  case psh15:
1089  if (lpcf->hwndOwner)
1090  SendMessageW(lpcf->hwndOwner, i, 0, (LPARAM)GetPropW(hDlg, strWineFontData));
1091  break;
1092 
1093  case IDOK:
1094  {
1095  WCHAR msgW[80];
1096  INT pointsize;
1097 
1098  pointsize = get_dialog_font_point_size(hDlg, lpcf);
1099  if (pointsize == -1)
1100  {
1102  MessageBoxW(hDlg, msgW, NULL, MB_OK | MB_ICONINFORMATION);
1103  return TRUE;
1104  }
1105 
1106  if ( (!(lpcf->Flags & CF_LIMITSIZE)) ||
1107  ( (lpcf->Flags & CF_LIMITSIZE) &&
1108  (lpcf->iPointSize >= 10 * lpcf->nSizeMin) &&
1109  (lpcf->iPointSize <= 10 * lpcf->nSizeMax)))
1110  EndDialog(hDlg, TRUE);
1111  else
1112  {
1113  WCHAR format[80];
1114  DWORD_PTR args[2];
1116  args[0] = lpcf->nSizeMin;
1117  args[1] = lpcf->nSizeMax;
1119  format, 0, 0, msgW, ARRAY_SIZE(msgW),
1120  (__ms_va_list*)args);
1121  MessageBoxW(hDlg, msgW, NULL, MB_OK);
1122  }
1123  return(TRUE);
1124  }
1125  case IDCANCEL:
1126  EndDialog(hDlg, FALSE);
1127  return(TRUE);
1128  }
1129  return(FALSE);
1130 }
1131 
1133 {
1134  LPCHOOSEFONTA lpcfa;
1135  LPSTR lpszStyle;
1136  LPLOGFONTA lpLogFonta;
1137  int len;
1138 
1139  if (!lpcfw) return FALSE;
1140 
1141  lpcfa = GetPropW(hwnd, strWineFontData_a);
1142  lpLogFonta = lpcfa->lpLogFont;
1143  lpszStyle = lpcfa->lpszStyle;
1144  memcpy(lpcfa, lpcfw, sizeof(CHOOSEFONTA));
1145  lpcfa->lpLogFont = lpLogFonta;
1146  lpcfa->lpszStyle = lpszStyle;
1147  memcpy(lpcfa->lpLogFont, lpcfw->lpLogFont, sizeof(LOGFONTA));
1149  LF_FACESIZE, lpcfa->lpLogFont->lfFaceName, LF_FACESIZE, 0, 0);
1150 
1151  if((lpcfw->Flags & CF_USESTYLE) && lpcfw->lpszStyle) {
1152  len = WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, NULL, 0, 0, 0);
1153  WideCharToMultiByte(CP_ACP, 0, lpcfw->lpszStyle, -1, lpcfa->lpszStyle, len, 0, 0);
1154  heap_free(lpcfw->lpszStyle);
1155  }
1156 
1157  heap_free(lpcfw->lpLogFont);
1158  heap_free(lpcfw);
1160 
1161  return TRUE;
1162 }
1163 
1165 {
1166  WINDOWINFO info;
1167 
1168  if (!lpcf) return FALSE;
1169 
1170  info.cbSize=sizeof(info);
1171  if( GetWindowInfo( GetDlgItem( hDlg, stc5), &info ) )
1172  {
1173  PAINTSTRUCT ps;
1174  HDC hdc;
1175  HFONT hOrigFont;
1176  LOGFONTW lf = *(lpcf->lpLogFont);
1177 
1178  MapWindowPoints( 0, hDlg, (LPPOINT) &info.rcWindow, 2);
1179  hdc = BeginPaint( hDlg, &ps );
1180 
1181  TRACE("erase %d, rect=%s\n", ps.fErase, wine_dbgstr_rect(&ps.rcPaint));
1182 
1183  /* Paint frame */
1184  DrawEdge( hdc, &info.rcWindow, EDGE_SUNKEN, BF_RECT|BF_ADJUST );
1185 
1186  /* Draw the sample text itself */
1187  hOrigFont = SelectObject( hdc, CreateFontIndirectW( &lf ) );
1188  SetTextColor( hdc, lpcf->rgbColors );
1189 
1190  DrawTextW( hdc,
1192  -1, &info.rcWindow, DT_CENTER|DT_VCENTER|DT_SINGLELINE );
1193 
1194  DeleteObject(SelectObject( hdc, hOrigFont ));
1195  EndPaint( hDlg, &ps );
1196  }
1197  return FALSE;
1198 }
1199 
1200 /***********************************************************************
1201  * FormatCharDlgProcA [internal]
1202  */
1204 {
1205  LPCHOOSEFONTW lpcfw;
1206  LPCHOOSEFONTA lpcfa;
1207  INT_PTR res = FALSE;
1208  int len;
1209 
1210  if (uMsg!=WM_INITDIALOG) {
1211  lpcfw = GetPropW(hDlg, strWineFontData);
1212  if (lpcfw && CFn_HookCallChk32(lpcfw))
1213  res=CallWindowProcA((WNDPROC)lpcfw->lpfnHook, hDlg, uMsg, wParam, lParam);
1214  if (res)
1215  return res;
1216  } else {
1217  lpcfa=(LPCHOOSEFONTA)lParam;
1219 
1220  lpcfw = heap_alloc(sizeof(*lpcfw));
1221  memcpy(lpcfw, lpcfa, sizeof(CHOOSEFONTA));
1222  lpcfw->lpLogFont = heap_alloc(sizeof(*lpcfw->lpLogFont));
1223  memcpy(lpcfw->lpLogFont, lpcfa->lpLogFont, sizeof(LOGFONTA));
1226 
1227  if((lpcfa->Flags & CF_USESTYLE) && lpcfa->lpszStyle) {
1228  len = MultiByteToWideChar(CP_ACP, 0, lpcfa->lpszStyle, -1, NULL, 0);
1229  lpcfw->lpszStyle = heap_alloc(len * sizeof(WCHAR));
1230  MultiByteToWideChar(CP_ACP, 0, lpcfa->lpszStyle, -1, lpcfw->lpszStyle, len);
1231  }
1232 
1233  if (!CFn_WMInitDialog(hDlg, lParam, lpcfw))
1234  {
1235  TRACE("CFn_WMInitDialog returned FALSE\n");
1236  return FALSE;
1237  }
1238  if (CFn_HookCallChk32(lpcfw))
1240  }
1241  switch (uMsg)
1242  {
1243  case WM_MEASUREITEM:
1244  return CFn_WMMeasureItem(hDlg,lParam);
1245  case WM_DRAWITEM:
1246  return CFn_WMDrawItem(lParam);
1247  case WM_COMMAND:
1248  return CFn_WMCommand(hDlg, wParam, lParam, lpcfw);
1249  case WM_DESTROY:
1250  return CFn_WMDestroy(hDlg, lpcfw);
1252  {
1253  LOGFONTA *logfont = (LOGFONTA *)lParam;
1254  TRACE("WM_CHOOSEFONT_GETLOGFONT lParam=%08lX\n", lParam);
1255  memcpy( logfont, lpcfw->lpLogFont, FIELD_OFFSET( LOGFONTA, lfFaceName ));
1257  logfont->lfFaceName, LF_FACESIZE, NULL, NULL );
1258  break;
1259  }
1260  case WM_PAINT:
1261  return CFn_WMPaint(hDlg, wParam, lParam, lpcfw);
1262  }
1263  return res;
1264 }
1265 
1266 /***********************************************************************
1267  * FormatCharDlgProcW [internal]
1268  */
1270 {
1271  LPCHOOSEFONTW lpcf;
1272  INT_PTR res = FALSE;
1273 
1274  if (uMsg!=WM_INITDIALOG)
1275  {
1276  lpcf= GetPropW(hDlg, strWineFontData);
1277  if (lpcf && CFn_HookCallChk32(lpcf))
1278  res=CallWindowProcW((WNDPROC)lpcf->lpfnHook, hDlg, uMsg, wParam, lParam);
1279  if (res)
1280  return res;
1281  }
1282  else
1283  {
1284  lpcf=(LPCHOOSEFONTW)lParam;
1285  if (!CFn_WMInitDialog(hDlg, lParam, lpcf))
1286  {
1287  TRACE("CFn_WMInitDialog returned FALSE\n");
1288  return FALSE;
1289  }
1290  if (CFn_HookCallChk32(lpcf))
1292  }
1293  switch (uMsg)
1294  {
1295  case WM_MEASUREITEM:
1296  return CFn_WMMeasureItem(hDlg, lParam);
1297  case WM_DRAWITEM:
1298  return CFn_WMDrawItem(lParam);
1299  case WM_COMMAND:
1300  return CFn_WMCommand(hDlg, wParam, lParam, lpcf);
1301  case WM_DESTROY:
1302  return TRUE;
1304  TRACE("WM_CHOOSEFONT_GETLOGFONT lParam=%08lX\n", lParam);
1305  memcpy( (LOGFONTW *)lParam, lpcf->lpLogFont, sizeof(LOGFONTW) );
1306  break;
1307  case WM_PAINT:
1308  return CFn_WMPaint(hDlg, wParam, lParam, lpcf);
1309  }
1310  return res;
1311 }
HGDIOBJ WINAPI GetStockObject(_In_ int)
static const struct @530 sizes[]
static BOOL CFn_FitFontStyle(HWND hDlg, LONG packedstyle)
Definition: fontdlg.c:565
#define CF_USESTYLE
Definition: commdlg.h:67
struct tagMEASUREITEMSTRUCT * LPMEASUREITEMSTRUCT
#define CF_TTONLY
Definition: commdlg.h:80
INT iPointSize
Definition: commdlg.h:283
#define CB_SETITEMDATA
Definition: winuser.h:1948
const DOCKBAR PVOID HWND HWND * hwnd
Definition: tooldock.h:22
BOOL WINAPI CheckDlgButton(_In_ HWND, _In_ int, _In_ UINT)
static LRESULT CFn_WMCommand(HWND hDlg, WPARAM wParam, LPARAM lParam, LPCHOOSEFONTW lpcf)
Definition: fontdlg.c:922
static const WCHAR stOEM[]
Definition: fontdlg.c:88
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2271
LPLOGFONTA lpLogFont
Definition: commdlg.h:264
#define TRUE
Definition: types.h:120
DWORD cbSize
Definition: winuser.h:3741
#define MAKEWPARAM(l, h)
Definition: winuser.h:3984
#define IDOK
Definition: winuser.h:824
#define COLOR_HIGHLIGHT
Definition: winuser.h:916
#define LF_FACESIZE
Definition: dimm.idl:39
BYTE lfPitchAndFamily
Definition: dimm.idl:71
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
DECLSPEC_HIDDEN HINSTANCE COMDLG32_hInstance
Definition: cdlg32.c:42
#define IDS_FONT_BOLD
Definition: cdlg.h:128
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
Definition: text.c:221
LONG lfWidth
Definition: wingdi.h:1897
CFF_Charset charset
Definition: cffcmap.c:138
LONG lfOrientation
Definition: wingdi.h:1899
#define DEFAULT_QUALITY
Definition: wingdi.h:435
#define ODT_COMBOBOX
Definition: winuser.h:2514
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
Definition: isohybrid.c:57
#define WideCharToMultiByte
Definition: compat.h:101
HWND hWnd2
Definition: fontdlg.c:44
static static const char __ms_va_list
Definition: printf.c:76
#define CDERR_LOADRESFAILURE
Definition: cderr.h:12
#define DEVICE_FONTTYPE
Definition: wingdi.h:1107
BOOL WINAPI IsWindow(_In_opt_ HWND)
LPCSTR lpTemplateName
Definition: commdlg.h:270
struct tagDRAWITEMSTRUCT * LPDRAWITEMSTRUCT
#define CF_FIXEDPITCHONLY
Definition: commdlg.h:76
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
Definition: glext.h:11745
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HDC WINAPI GetDC(_In_opt_ HWND)
static const COLORREF textcolors[TEXT_COLORS]
Definition: fontdlg.c:289
#define CF_EFFECTS
Definition: commdlg.h:68
#define TEXT_COLORS
Definition: fontdlg.c:287
#define IDS_FONT_SIZE
Definition: cdlg.h:173
static LRESULT CFn_WMDrawItem(LPARAM lParam)
Definition: fontdlg.c:792
int WINAPI EnumFontFamiliesExW(_In_ HDC, _In_ PLOGFONTW, _In_ FONTENUMPROCW, _In_ LPARAM, _In_ DWORD)
#define CB_GETLBTEXT
Definition: winuser.h:1934
#define SW_HIDE
Definition: winuser.h:762
LPCWSTR lpTemplateName
Definition: commdlg.h:288
#define CP_ACP
Definition: compat.h:99
static const struct @341 cfflags[]
#define CB_GETITEMDATA
Definition: winuser.h:1932
#define FORMAT_MESSAGE_ARGUMENT_ARRAY
Definition: winbase.h:405
#define FORMAT_MESSAGE_FROM_STRING
Definition: winbase.h:402
static const WCHAR stTCVN[]
Definition: fontdlg.c:94
#define IDS_COLOR_BLACK
Definition: cdlg.h:134
#define IDS_FONT_ITALIC
Definition: cdlg.h:129
LONG lfHeight
Definition: dimm.idl:59
BOOL WINAPI DrawFocusRect(_In_ HDC, _In_ LPCRECT)
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
Definition: res.c:155
BYTE lfCharSet
Definition: dimm.idl:67
static LRESULT CFn_WMInitDialog(HWND hDlg, LPARAM lParam, LPCHOOSEFONTW lpcf)
Definition: fontdlg.c:619
#define CI(cs)
Definition: fontdlg.c:68
static const WCHAR stIso88594[]
Definition: fontdlg.c:97
BYTE lfClipPrecision
Definition: dimm.idl:69
static INT AddFontStyle(const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM, UINT nFontType, const CHOOSEFONTW *lpcf, HWND hcmb2, HWND hcmb3, HWND hDlg)
Definition: fontdlg.c:499
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:27
static HIMAGELIST himlTT
Definition: fontdlg.c:57
#define CF_ENABLEHOOK
Definition: commdlg.h:63
GLdouble n
Definition: glext.h:7729
LONG top
Definition: windef.h:307
#define cmb5
Definition: dlgs.h:52
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LPVOID WINAPI LockResource(HGLOBAL handle)
Definition: res.c:550
GLuint buffer
Definition: glext.h:5915
DWORD mask
Definition: fontdlg.c:129
LONG lfEscapement
Definition: dimm.idl:61
UINT_PTR WPARAM
Definition: windef.h:207
#define IDS_FONT_REGULAR
Definition: cdlg.h:127
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
static void select_combo_item(HWND dialog, int id, int sel)
Definition: fontdlg.c:489
BOOL WINAPI ImageList_Draw(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, UINT fStyle)
Definition: imagelist.c:1228
LONG left
Definition: windef.h:306
HICON HCURSOR
Definition: windef.h:299
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
BOOL WINAPI EndPaint(_In_ HWND, _In_ const PAINTSTRUCT *)
int32_t INT_PTR
Definition: typedefs.h:63
static void CFn_FitFontSize(HWND hDlg, int points)
Definition: fontdlg.c:545
char * LPSTR
Definition: xmlstorage.h:182
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define lstrlenW
Definition: compat.h:416
Definition: match.c:390
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
static BOOL AddFontSizeToCombo3(HWND hwnd, UINT h, const CHOOSEFONTW *lpcf)
Definition: fontdlg.c:417
int32_t INT
Definition: typedefs.h:57
#define CB_GETCURSEL
Definition: winuser.h:1925
DWORD WINAPI GetSysColor(_In_ int)
& rect
Definition: startmenu.cpp:1413
static int init
Definition: wintirpc.c:33
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
WPARAM wParam
Definition: combotst.c:138
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
Definition: res.c:176
WORD nFontType
Definition: commdlg.h:291
static INT get_dialog_font_point_size(HWND hDlg, CHOOSEFONTW *cf)
Definition: fontdlg.c:894
NEWTEXTMETRICW ntmTm
Definition: wingdi.h:2674
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
CHAR lfFaceName[LF_FACESIZE]
Definition: wingdi.h:1893
#define BF_ADJUST
Definition: winuser.h:470
static const WCHAR stVietname[]
Definition: fontdlg.c:82
#define lstrcpynW
Definition: compat.h:406
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define XX(x)
static HDC CFn_GetDC(const CHOOSEFONTW *lpcf)
Definition: fontdlg.c:453
int WINAPI lstrcmpiW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:194
LRESULT WINAPI CallWindowProcA(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
struct _test_info info[]
Definition: SetCursorPos.c:19
#define ITALIC_FONTTYPE
Definition: commdlg.h:91
#define CF_ENABLETEMPLATEHANDLE
Definition: commdlg.h:65
#define psh15
Definition: dlgs.h:126
static const WCHAR stEastEur[]
Definition: fontdlg.c:84
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
Definition: dc.c:975
#define CDERR_FINDRESFAILURE
Definition: cderr.h:11
#define CF_NOSIMULATIONS
Definition: commdlg.h:74
static const WCHAR stKOI8[]
Definition: fontdlg.c:95
static BOOL SetFontSizesToCombo3(HWND hwnd, const CHOOSEFONTW *lpcf)
Definition: fontdlg.c:440
#define BF_RECT
Definition: winuser.h:462
#define CF_WYSIWYG
Definition: commdlg.h:77
uint32_t cs
Definition: isohybrid.c:75
static BOOL CFn_FitCharSet(HWND hDlg, int charset)
Definition: fontdlg.c:583
HWND hwndOwner
Definition: commdlg.h:280
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static INT WINAPI FontFamilyEnumProc(const ENUMLOGFONTEXW *lpElfex, const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam)
Definition: fontdlg.c:352
#define CF_ANSIONLY
Definition: commdlg.h:70
GLenum GLint GLuint mask
Definition: glext.h:6028
static const WCHAR stGreek[]
Definition: fontdlg.c:77
#define CF_NOVECTORFONTS
Definition: commdlg.h:72
#define CF_LIMITSIZE
Definition: commdlg.h:75
#define chx1
Definition: dlgs.h:31
unsigned int BOOL
Definition: ntddk_ex.h:94
#define chx2
Definition: dlgs.h:32
long LONG
Definition: pedump.c:60
#define e
Definition: ke_i.h:82
LPCFHOOKPROC lpfnHook
Definition: commdlg.h:269
#define FIXED_PITCH
Definition: wingdi.h:443
BYTE lfItalic
Definition: wingdi.h:1901
#define CF_SCREENFONTS
Definition: commdlg.h:59
HDC WINAPI BeginPaint(_In_ HWND, _Out_ LPPAINTSTRUCT)
LONG lfOrientation
Definition: dimm.idl:62
BOOL WINAPI DrawEdge(_In_ HDC, _Inout_ LPRECT, _In_ UINT, _In_ UINT)
#define psh3
Definition: dlgs.h:114
#define debugstr_w
Definition: kernel32.h:32
BOOL WINAPI ChooseFontW(LPCHOOSEFONTW lpChFont)
Definition: fontdlg.c:184
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
#define FIXME(fmt,...)
Definition: debug.h:111
unsigned int idx
Definition: utils.c:41
static const WCHAR stWestern[]
Definition: fontdlg.c:71
_Out_opt_ int _Out_opt_ int * cy
Definition: commctrl.h:581
LPLOGFONTW lpLogFont
Definition: commdlg.h:282
#define CB_ADDSTRING
Definition: winuser.h:1918
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
Definition: res.c:532
const WCHAR * str
#define MAKELONG(a, b)
Definition: typedefs.h:248
#define CB_INSERTSTRING
Definition: winuser.h:1939
WCHAR elfScript[LF_FACESIZE]
Definition: wingdi.h:2704
BYTE lfOutPrecision
Definition: wingdi.h:1905
LONG lfWidth
Definition: dimm.idl:60
LONG lfHeight
Definition: wingdi.h:1896
smooth NULL
Definition: ftsmooth.c:416
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
#define WM_GETFONT
Definition: winuser.h:1633
#define IDC_WAIT
Definition: winuser.h:684
#define LTGRAY_BRUSH
Definition: wingdi.h:899
LONG_PTR LPARAM
Definition: windef.h:208
static const WCHAR stBIG5[]
Definition: fontdlg.c:76
static const WCHAR stBaltic[]
Definition: fontdlg.c:81
#define stc4
Definition: dlgs.h:163
#define CB_LIMITTEXT
Definition: winuser.h:1940
RECT rcWindow
Definition: winuser.h:3742
#define DT_VCENTER
Definition: winuser.h:543
static const BYTE CHARSET_ORDER[256]
Definition: fontdlg.c:109
#define CF_FORCEFONTEXIST
Definition: commdlg.h:78
#define COLOR_HIGHLIGHTTEXT
Definition: winuser.h:917
struct CFn_ENUMSTRUCT * LPCFn_ENUMSTRUCT
#define CB_RESETCONTENT
Definition: winuser.h:1941
UINT WINAPI IsDlgButtonChecked(_In_ HWND, _In_ int)
static BOOL CFn_HookCallChk32(const CHOOSEFONTW *lpcf)
Definition: fontdlg.c:300
#define CF_NOSCRIPTSEL
Definition: commdlg.h:85
#define IDS_FONT_SIZE_INPUT
Definition: cdlg.h:180
#define CB_ERR
Definition: winuser.h:2410
#define FSTYLES
#define WM_DESTROY
Definition: winuser.h:1591
static const WCHAR stIso88593[]
Definition: fontdlg.c:96
BYTE lfOutPrecision
Definition: dimm.idl:68
#define TEXT_EXTRAS
Definition: fontdlg.c:286
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
Definition: glfuncs.h:250
#define RT_DIALOG
Definition: pedump.c:367
r l[0]
Definition: byte_order.h:167
static const WCHAR fontsizefmtW[]
Definition: fontdlg.c:54
static LRESULT CFn_WMDestroy(HWND hwnd, LPCHOOSEFONTW lpcfw)
Definition: fontdlg.c:1132
#define WM_CHOOSEFONT_GETLOGFONT
Definition: commdlg.h:93
#define FW_MEDIUM
Definition: wingdi.h:374
#define CF_NOFACESEL
Definition: commdlg.h:81
#define CF_SCALABLEONLY
Definition: commdlg.h:79
BYTE lfClipPrecision
Definition: wingdi.h:1906
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define TTBITMAP_XSIZE
Definition: fontdlg.c:58
#define CBN_EDITCHANGE
Definition: winuser.h:1957
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
int WINAPI MessageBoxW(_In_opt_ HWND, _In_opt_ LPCWSTR, _In_opt_ LPCWSTR, _In_ UINT)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
static void _dump_cf_flags(DWORD cflags)
Definition: fontdlg.c:161
DWORD rgbColors
Definition: commdlg.h:285
DWORD COLORREF
Definition: windef.h:300
BOOL WINAPI ChooseFontA(LPCHOOSEFONTA lpChFont)
Definition: fontdlg.c:238
#define swprintf(buf, format,...)
Definition: sprintf.c:56
#define WINAPI
Definition: msvc.h:6
const char * wine_dbgstr_rect(const RECT *rect)
static LRESULT CFn_WMMeasureItem(HWND hDlg, LPARAM lParam)
Definition: fontdlg.c:764
BOOL WINAPI InvalidateRect(_In_opt_ HWND, _In_opt_ LPCRECT, _In_ BOOL)
unsigned short WORD
Definition: ntddk_ex.h:93
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
LONG lfEscapement
Definition: wingdi.h:1898
#define BN_CLICKED
Definition: winuser.h:1907
unsigned long DWORD
Definition: ntddk_ex.h:95
#define WM_MEASUREITEM
Definition: winuser.h:1628
HCURSOR WINAPI LoadCursorW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2074
static const WCHAR stVISCII[]
Definition: fontdlg.c:93
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
static const WCHAR stArabic[]
Definition: fontdlg.c:80
DWORD Flags
Definition: commdlg.h:284
#define WM_PAINT
Definition: winuser.h:1602
const char * name
Definition: fontdlg.c:130
INT_PTR WINAPI DialogBoxIndirectParamA(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
LPCFHOOKPROC lpfnHook
Definition: commdlg.h:287
GLsizei const GLfloat * points
Definition: glext.h:8112
#define RASTER_FONTTYPE
Definition: wingdi.h:1106
#define MB_ICONINFORMATION
Definition: winuser.h:796
int ret
BOOL WINAPI SetDlgItemInt(_In_ HWND, _In_ int, _In_ UINT, _In_ BOOL)
BYTE lfQuality
Definition: dimm.idl:70
static const WCHAR L[]
Definition: oid.c:1250
#define CF_PRINTERFONTS
Definition: commdlg.h:60
HDC hdc
Definition: main.c:9
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
GLdouble s
Definition: gl.h:2039
LONG tmInternalLeading
Definition: wingdi.h:2646
#define CB_SETCURSEL
Definition: winuser.h:1943
Definition: time.h:76
#define WM_COMMAND
Definition: winuser.h:1722
uint32_t DWORD_PTR
Definition: typedefs.h:64
#define CF_SHOWHELP
Definition: commdlg.h:62
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
#define grp1
Definition: dlgs.h:86
static BOOL SetFontStylesToCombo2(HWND hwnd, HDC hdc, const LOGFONTW *lplf)
Definition: fontdlg.c:366
unsigned char BYTE
Definition: xxhash.c:193
BYTE lfCharSet
Definition: wingdi.h:1904
static const WCHAR stHebrew[]
Definition: fontdlg.c:79
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
DWORD Flags
Definition: commdlg.h:266
DWORD lStructSize
Definition: commdlg.h:279
static const WCHAR stShiftJis[]
Definition: fontdlg.c:73
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
#define ERR(fmt,...)
Definition: debug.h:110
static INT AddFontFamily(const ENUMLOGFONTEXW *lpElfex, const NEWTEXTMETRICEXW *lpNTM, UINT nFontType, const CHOOSEFONTW *lpcf, HWND hwnd, LPCFn_ENUMSTRUCT e)
Definition: fontdlg.c:312
static INT WINAPI FontStyleEnumProc(const ENUMLOGFONTEXW *lpElfex, const TEXTMETRICW *metrics, DWORD dwFontType, LPARAM lParam)
Definition: fontdlg.c:605
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
Definition: text.c:888
#define cmb2
Definition: dlgs.h:49
#define ILD_TRANSPARENT
Definition: commctrl.h:414
#define DT_SINGLELINE
Definition: winuser.h:540
HWND WINAPI GetParent(_In_ HWND)
struct tagCHOOSEFONTW * LPCHOOSEFONTW
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
weight
Definition: sortkey.c:156
#define CF_NOSTYLESEL
Definition: commdlg.h:82
BOOL WINAPI GetWindowInfo(_In_ HWND, _Inout_ PWINDOWINFO)
#define FW_BOLD
Definition: wingdi.h:377
#define NTM_TYPE1
Definition: wingdi.h:29
HCURSOR WINAPI SetCursor(_In_opt_ HCURSOR)
static const WCHAR chooseFontW[]
Definition: fontdlg.c:53
HWND hwndOwner
Definition: commdlg.h:262
BYTE lfStrikeOut
Definition: dimm.idl:66
HINSTANCE hInstance
Definition: commdlg.h:271
#define CB_SETEDITSEL
Definition: winuser.h:1945
#define ARRAY_SIZE(a)
Definition: main.h:24
FARPROC FONTENUMPROCW
Definition: wingdi.h:2896
void COMDLG32_SetCommDlgExtendedError(DWORD err) DECLSPEC_HIDDEN
Definition: cdlg32.c:119
#define HELPMSGSTRINGW
Definition: commdlg.h:27
LPCHOOSEFONTW lpcf32w
Definition: fontdlg.c:45
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define CF_APPLY
Definition: commdlg.h:69
static const WCHAR strWineFontData_a[]
Definition: fontdlg.c:51
#define cmb3
Definition: dlgs.h:50
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
BYTE lfItalic
Definition: dimm.idl:64
INT_PTR WINAPI DialogBoxIndirectParamW(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
unsigned int UINT
Definition: ndis.h:50
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
static const WCHAR stJohab[]
Definition: fontdlg.c:86
#define MB_OK
Definition: winuser.h:784
static const WCHAR stGB2312[]
Definition: fontdlg.c:75
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
#define IMAGE_BITMAP
Definition: winuser.h:211
#define pshHelp
Definition: dlgs.h:127
#define CBN_SELCHANGE
Definition: winuser.h:1961
#define MultiByteToWideChar
Definition: compat.h:100
static HWND dialog
Definition: gui.c:33
static void CFn_ReleaseDC(const CHOOSEFONTW *lpcf, HDC hdc)
Definition: fontdlg.c:480
#define FW_NORMAL
Definition: wingdi.h:372
LONG lfWeight
Definition: wingdi.h:1900
#define CLR_DEFAULT
Definition: commctrl.h:316
#define WM_DRAWITEM
Definition: winuser.h:1627
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define CF_SELECTSCRIPT
Definition: commdlg.h:84
BYTE lfPitchAndFamily
Definition: wingdi.h:1908
HIMAGELIST WINAPI ImageList_LoadImageW(HINSTANCE hi, LPCWSTR lpbmp, INT cx, INT cGrow, COLORREF clrMask, UINT uType, UINT uFlags)
Definition: imagelist.c:2208
HINSTANCE hInstance
Definition: commdlg.h:289
CONST void * LPCVOID
Definition: windef.h:191
_Out_opt_ int * cx
Definition: commctrl.h:581
Definition: name.c:38
#define ODS_SELECTED
Definition: winuser.h:2520
#define CF_NOSIZESEL
Definition: commdlg.h:83
#define NTM_PS_OPENTYPE
Definition: wingdi.h:26
GLuint res
Definition: glext.h:9613
BYTE lfStrikeOut
Definition: wingdi.h:1903
BOOL WINAPI ImageList_GetIconSize(HIMAGELIST himl, INT *cx, INT *cy)
Definition: imagelist.c:2037
LOGFONTW elfLogFont
Definition: wingdi.h:2701
LRESULT WINAPI CallWindowProcW(_In_ WNDPROC, _In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define cmb4
Definition: dlgs.h:51
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
static const WCHAR stHangul[]
Definition: fontdlg.c:74
HWND hWnd1
Definition: fontdlg.c:43
#define HIWORD(l)
Definition: typedefs.h:246
GLenum GLuint id
Definition: glext.h:5579
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
#define IDS_FONT_BOLD_ITALIC
Definition: cdlg.h:130
BYTE lfUnderline
Definition: wingdi.h:1902
LONG bottom
Definition: windef.h:309
#define DT_CENTER
Definition: winuser.h:527
static INT_PTR CALLBACK FormatCharDlgProcW(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: fontdlg.c:1269
#define LOGPIXELSY
Definition: wingdi.h:718
static const WCHAR stSymbol[]
Definition: fontdlg.c:72
#define EDGE_SUNKEN
Definition: winuser.h:451
BYTE lfQuality
Definition: wingdi.h:1907
#define CB_GETCOUNT
Definition: winuser.h:1924
static const WCHAR stIso885910[]
Definition: fontdlg.c:98
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
LONG lfWeight
Definition: dimm.idl:63
WCHAR lfFaceName[LF_FACESIZE]
Definition: wingdi.h:1909
LPSTR lpszStyle
Definition: commdlg.h:272
#define ANSI_CHARSET
Definition: wingdi.h:382
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
static const WCHAR *const sample_lang_text[]
Definition: fontdlg.c:101
#define CF_NOVERTFONTS
Definition: commdlg.h:86
LONG_PTR LRESULT
Definition: windef.h:209
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
struct tagCHOOSEFONTA * LPCHOOSEFONTA
HBRUSH WINAPI GetSysColorBrush(_In_ int)
BYTE lfUnderline
Definition: dimm.idl:65
#define CF_ENABLETEMPLATE
Definition: commdlg.h:64
GLuint64EXT * result
Definition: glext.h:11304
#define cmb1
Definition: dlgs.h:48
#define TRACE_ON(x)
Definition: compat.h:65
#define CB_FINDSTRING
Definition: winuser.h:1921
static const WCHAR stMac[]
Definition: fontdlg.c:87
#define WM_INITDIALOG
Definition: winuser.h:1721
static INT_PTR CALLBACK FormatCharDlgProcA(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: fontdlg.c:1203
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
static const WCHAR stCyrillic[]
Definition: fontdlg.c:83
static LRESULT CFn_WMPaint(HWND hDlg, WPARAM wParam, LPARAM lParam, const CHOOSEFONTW *lpcf)
Definition: fontdlg.c:1164
#define MulDiv(x, y, z)
Definition: gdifloat.h:86
#define CF_INITTOLOGFONTSTRUCT
Definition: commdlg.h:66
#define BOLD_FONTTYPE
Definition: commdlg.h:90
static const WCHAR stThai[]
Definition: fontdlg.c:85
#define stc5
Definition: dlgs.h:164
static const WCHAR strWineFontData[]
Definition: fontdlg.c:50
#define NTM_TT_OPENTYPE
Definition: wingdi.h:27
LPWSTR lpszStyle
Definition: commdlg.h:290
static int GetScreenDPI(void)
Definition: fontdlg.c:465
static const WCHAR stTurkish[]
Definition: fontdlg.c:78
INT WINAPI DrawTextW(HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags)
Definition: defwnd.c:17
#define TRUETYPE_FONTTYPE
Definition: wingdi.h:1108
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
static const WCHAR stCeltic[]
Definition: fontdlg.c:99
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
WINE_DEFAULT_DEBUG_CHANNEL(commdlg)
#define CB_FINDSTRINGEXACT
Definition: winuser.h:1922