[PATCH] winecfg: Add menu font settings to desktop integration tab (try 2)

Nigel Liang ncliang at gmail.com
Mon Jul 30 23:06:44 CDT 2007


Hi,

Try 2 after suggestions from Vitaliy.

Changelog:
- Integrate menu font selection into existing UI
- Use SystemParametersInfo to get/set fonts in registry instead of win.ini
- Now also able to set caption, status, and mesage box fonts

---
 programs/winecfg/Cs.rc      |    1 +
 programs/winecfg/De.rc      |    1 +
 programs/winecfg/En.rc      |    1 +
 programs/winecfg/Es.rc      |    1 +
 programs/winecfg/Fr.rc      |    1 +
 programs/winecfg/Ko.rc      |    1 +
 programs/winecfg/No.rc      |    1 +
 programs/winecfg/Pl.rc      |    1 +
 programs/winecfg/Ro.rc      |    1 +
 programs/winecfg/Ru.rc      |    1 +
 programs/winecfg/resource.h |    1 +
 programs/winecfg/theme.c    |   56 ++++++++++++++++++++++++++++++++++++++++++-
 12 files changed, 66 insertions(+), 1 deletions(-)

diff --git a/programs/winecfg/Cs.rc b/programs/winecfg/Cs.rc
index 5bba698..17c576b 100644
--- a/programs/winecfg/Cs.rc
+++ b/programs/winecfg/Cs.rc
@@ -307,4 +307,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Písmo titulku aktivního okna"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Pozadí titulku neaktivného okna"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Písmo titulku neaktivního okna"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/De.rc b/programs/winecfg/De.rc
index 8c77b2b..ad28efc 100644
--- a/programs/winecfg/De.rc
+++ b/programs/winecfg/De.rc
@@ -302,4 +302,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Aktiver Titelleistentext"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Inaktive Titelleiste"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inaktiver Titelleistentext"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc
index 5972c3b..c536eff 100644
--- a/programs/winecfg/En.rc
+++ b/programs/winecfg/En.rc
@@ -304,4 +304,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Active Title Text"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Inactive Title Bar"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inactive Title Text"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/Es.rc b/programs/winecfg/Es.rc
index 2430b02..2febf8e 100644
--- a/programs/winecfg/Es.rc
+++ b/programs/winecfg/Es.rc
@@ -302,4 +302,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Texto de barra de título activa"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Barra de título inactiva"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Texto de barra de título inactiva"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/Fr.rc b/programs/winecfg/Fr.rc
index 007ca53..a7dd024 100644
--- a/programs/winecfg/Fr.rc
+++ b/programs/winecfg/Fr.rc
@@ -302,4 +302,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Texte de la barre de titre active"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Barre de titre inactive"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Texte de la barre de titre inactive"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/Ko.rc b/programs/winecfg/Ko.rc
index fe20fc4..4441631 100644
--- a/programs/winecfg/Ko.rc
+++ b/programs/winecfg/Ko.rc
@@ -304,4 +304,5 @@ BEGIN
    IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "È°¼ºµÈ Á¦¸ñ ¹®ÀÚ"
    IDC_SYSPARAMS_INACTIVE_TITLE    "ºñÈ°¼ºµÈ Á¦¸ñ ¸·´ë"
    IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "ºñÈ°¼ºµÈ Á¦¸ñ ¹®ÀÚ"
+   IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/No.rc b/programs/winecfg/No.rc
index f76a47c..bd72967 100644
--- a/programs/winecfg/No.rc
+++ b/programs/winecfg/No.rc
@@ -301,4 +301,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Aktiv titteltekst"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Inaktiv tittellinje"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Inaktiv titteltekst"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/Pl.rc b/programs/winecfg/Pl.rc
index fa7bc62..08e1077 100644
--- a/programs/winecfg/Pl.rc
+++ b/programs/winecfg/Pl.rc
@@ -307,4 +307,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Tytu³ aktywnego okna"
     IDC_SYSPARAMS_INACTIVE_TITLE    "T³o nag³ówka nieaktywnego okna"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Tytu³ nieaktywnego okna"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/Ro.rc b/programs/winecfg/Ro.rc
index 3b62984..697dd94 100644
--- a/programs/winecfg/Ro.rc
+++ b/programs/winecfg/Ro.rc
@@ -303,6 +303,7 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Text bară de titlu activă"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Bară de titlu inactivă"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Text bară de titlu inactivă"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
 
 #pragma code_page(default)
diff --git a/programs/winecfg/Ru.rc b/programs/winecfg/Ru.rc
index 1872a3d..90ce5a1 100644
--- a/programs/winecfg/Ru.rc
+++ b/programs/winecfg/Ru.rc
@@ -303,4 +303,5 @@ BEGIN
     IDC_SYSPARAMS_ACTIVE_TITLE_TEXT "Àêòèâíîå îêíî - òåêñò"
     IDC_SYSPARAMS_INACTIVE_TITLE    "Ïàññèâíîå îêíî"
     IDC_SYSPARAMS_INACTIVE_TITLE_TEXT "Ïàññèâíîå îêíî - òåêñò"
+    IDC_SYSPARAMS_MSGBOX_TEXT       "Message Box Text"
 END
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index 811a115..1fbb0c5 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -228,3 +228,4 @@
 #define IDC_SYSPARAMS_ACTIVE_TITLE_TEXT 8413
 #define IDC_SYSPARAMS_INACTIVE_TITLE    8414
 #define IDC_SYSPARAMS_INACTIVE_TITLE_TEXT 8415
+#define IDC_SYSPARAMS_MSGBOX_TEXT       8416
diff --git a/programs/winecfg/theme.c b/programs/winecfg/theme.c
index 4f3a377..0bec3ec 100644
--- a/programs/winecfg/theme.c
+++ b/programs/winecfg/theme.c
@@ -825,6 +825,7 @@ static struct
     const char *color_reg;
     int size;
     COLORREF color;
+    LOGFONTW lf;
 } metrics[] =
 {
     {-1,                COLOR_BTNFACE,          "ButtonFace"    }, /* IDC_SYSPARAMS_BUTTON */
@@ -842,7 +843,8 @@ static struct
     {SM_CXSIZE,         COLOR_ACTIVECAPTION,    "ActiveTitle"   }, /* IDC_SYSPARAMS_ACTIVE_TITLE */
     {-1,                COLOR_CAPTIONTEXT,      "TitleText"     }, /* IDC_SYSPARAMS_ACTIVE_TITLE_TEXT */
     {-1,                COLOR_INACTIVECAPTION,  "InactiveTitle" }, /* IDC_SYSPARAMS_INACTIVE_TITLE */
-    {-1,                COLOR_INACTIVECAPTIONTEXT,"InactiveTitleText" }  /* IDC_SYSPARAMS_INACTIVE_TITLE_TEXT */
+    {-1,                COLOR_INACTIVECAPTIONTEXT,"InactiveTitleText" }, /* IDC_SYSPARAMS_INACTIVE_TITLE_TEXT */
+    {-1,                -1,                     "MsgBoxText"    } /* IDC_SYSPARAMS_MSGBOX_TEXT */
 };
 
 static void save_sys_color(int idx, COLORREF clr)
@@ -857,6 +859,7 @@ static void read_sysparams(HWND hDlg)
 {
     WCHAR buffer[256];
     HWND list = GetDlgItem(hDlg, IDC_SYSPARAM_COMBO);
+    NONCLIENTMETRICSW nonclient_metrics;
     int i, idx;
 
     for (i = 0; i < sizeof(metrics) / sizeof(metrics[0]); i++)
@@ -871,6 +874,18 @@ static void read_sysparams(HWND hDlg)
         if (metrics[i].color_idx != -1)
             metrics[i].color = GetSysColor(metrics[i].color_idx);
     }
+
+    nonclient_metrics.cbSize = sizeof(NONCLIENTMETRICSW);
+    SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &nonclient_metrics, 0);
+
+    memcpy(&(metrics[IDC_SYSPARAMS_MENU_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           &(nonclient_metrics.lfMenuFont), sizeof(LOGFONTW));
+    memcpy(&(metrics[IDC_SYSPARAMS_ACTIVE_TITLE_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           &(nonclient_metrics.lfCaptionFont), sizeof(LOGFONTW));
+    memcpy(&(metrics[IDC_SYSPARAMS_TOOLTIP_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           &(nonclient_metrics.lfStatusFont), sizeof(LOGFONTW));
+    memcpy(&(metrics[IDC_SYSPARAMS_MSGBOX_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           &(nonclient_metrics.lfMessageFont), sizeof(LOGFONTW));
 }
 
 static void apply_sysparams(void)
@@ -890,6 +905,19 @@ static void apply_sysparams(void)
     nonclient_metrics.iScrollWidth = nonclient_metrics.iScrollHeight =
             metrics[IDC_SYSPARAMS_SCROLLBAR - IDC_SYSPARAMS_BUTTON].size;
 
+    memcpy(&(nonclient_metrics.lfMenuFont),
+           &(metrics[IDC_SYSPARAMS_MENU_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           sizeof(LOGFONTW));
+    memcpy(&(nonclient_metrics.lfCaptionFont),
+           &(metrics[IDC_SYSPARAMS_ACTIVE_TITLE_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           sizeof(LOGFONTW));
+    memcpy(&(nonclient_metrics.lfStatusFont),
+           &(metrics[IDC_SYSPARAMS_TOOLTIP_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           sizeof(LOGFONTW));
+    memcpy(&(nonclient_metrics.lfMessageFont),
+           &(metrics[IDC_SYSPARAMS_MSGBOX_TEXT - IDC_SYSPARAMS_BUTTON].lf),
+           sizeof(LOGFONTW));
+
     SystemParametersInfoW(SPI_SETNONCLIENTMETRICS, sizeof(nonclient_metrics), &nonclient_metrics,
                           SPIF_UPDATEINIFILE | SPIF_SENDCHANGE);
 
@@ -922,6 +950,13 @@ static void on_sysparam_change(HWND hDlg)
     else
         set_text(hDlg, IDC_SYSPARAM_SIZE, "");
 
+    EnableWindow(GetDlgItem(hDlg, IDC_SYSPARAM_FONT),
+        index == IDC_SYSPARAMS_MENU_TEXT-IDC_SYSPARAMS_BUTTON ||
+        index == IDC_SYSPARAMS_ACTIVE_TITLE_TEXT-IDC_SYSPARAMS_BUTTON ||
+        index == IDC_SYSPARAMS_TOOLTIP_TEXT-IDC_SYSPARAMS_BUTTON ||
+        index == IDC_SYSPARAMS_MSGBOX_TEXT-IDC_SYSPARAMS_BUTTON
+    );
+
     updating_ui = FALSE;
 }
 
@@ -960,6 +995,21 @@ static void on_draw_item(HWND hDlg, WPARAM wParam, LPARAM lParam)
     }
 }
 
+static void on_select_font(HWND hDlg)
+{
+    CHOOSEFONTW cf;
+    int index = SendDlgItemMessageW(hDlg, IDC_SYSPARAM_COMBO, CB_GETCURSEL, 0, 0);
+    index = SendDlgItemMessageW(hDlg, IDC_SYSPARAM_COMBO, CB_GETITEMDATA, index, 0);
+
+    ZeroMemory(&cf, sizeof(cf));
+    cf.lStructSize = sizeof(CHOOSEFONTW);
+    cf.hwndOwner = hDlg;
+    cf.lpLogFont = &(metrics[index].lf);
+    cf.Flags = CF_SCREENFONTS | CF_INITTOLOGFONTSTRUCT | CF_NOSCRIPTSEL;
+
+    ChooseFontW(&cf);
+}
+
 INT_PTR CALLBACK
 ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
@@ -1020,6 +1070,10 @@ ThemeDlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
                             on_theme_install (hDlg);
                             break;
 
+                        case IDC_SYSPARAM_FONT:
+                            on_select_font(hDlg);
+                            break;
+
                         case IDC_BROWSE_SFPATH:
                             if (browse_for_unix_folder(hDlg, psfiSelected->szLinkTarget)) {
                                 update_shell_folder_listview(hDlg);
-- 
1.5.2.3




More information about the wine-patches mailing list