+void dlg_auto_set_fixed_pitch_flag(void *dlg)
+{
+ struct dlgparam *dp = (struct dlgparam *)dlg;
+ Config *cfg = (Config *)dp->data;
+ HFONT font;
+ HDC hdc;
+ TEXTMETRIC tm;
+ int is_var;
+
+ /*
+ * Attempt to load the current font, and see if it's
+ * variable-pitch. If so, start off the fixed-pitch flag for the
+ * dialog box as false.
+ *
+ * We assume here that any client of the dlg_* mechanism which is
+ * using font selectors at all is also using a normal 'Config *'
+ * as dp->data.
+ */
+
+ font = CreateFont(0, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE,
+ DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
+ CLIP_DEFAULT_PRECIS, FONT_QUALITY(cfg->font_quality),
+ FIXED_PITCH | FF_DONTCARE, cfg->font.name);
+ hdc = GetDC(NULL);
+ if (font && hdc && SelectObject(hdc, font) && GetTextMetrics(hdc, &tm)) {
+ /* Note that the TMPF_FIXED_PITCH bit is defined upside down :-( */
+ is_var = (tm.tmPitchAndFamily & TMPF_FIXED_PITCH);
+ } else {
+ is_var = FALSE; /* assume it's basically normal */
+ }
+ if (hdc)
+ ReleaseDC(NULL, hdc);
+ if (font)
+ DeleteObject(font);
+
+ if (is_var)
+ dp->fixed_pitch_fonts = FALSE;
+}
+
+int dlg_get_fixed_pitch_flag(void *dlg)
+{
+ struct dlgparam *dp = (struct dlgparam *)dlg;
+ return dp->fixed_pitch_fonts;
+}
+
+void dlg_set_fixed_pitch_flag(void *dlg, int flag)
+{
+ struct dlgparam *dp = (struct dlgparam *)dlg;
+ dp->fixed_pitch_fonts = flag;
+}
+