review: add Video Memory text input to winecfg Graphics/Direct3D tab
Vit Hrachovy
vit.hrachovy at sandbox.cz
Wed May 16 08:03:52 CDT 2007
Hi,
the attached patch adds new editable combobox input 'Video Memory size'
for Graphics/Direct3D tab of winecfg.
I've tried to implement Frank's comments to English language only.
Please consider this patch as a proposal, so if it gets positive review,
I'll propagate the changes to all remaining language resources.
May I kindly ask someone for the patch review?
Regards
Vit
-------------- next part --------------
diff --git a/programs/winecfg/En.rc b/programs/winecfg/En.rc
index 02d4850..218150a 100644
--- a/programs/winecfg/En.rc
+++ b/programs/winecfg/En.rc
@@ -79,12 +79,14 @@ BEGIN
EDITTEXT IDC_DESKTOP_WIDTH,64,167,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
EDITTEXT IDC_DESKTOP_HEIGHT,117,167,40,12,ES_AUTOHSCROLL | ES_NUMBER | WS_DISABLED
- GROUPBOX " Direct3D ",IDC_STATIC,8,189,244,50
+ GROUPBOX " Direct3D ",IDC_STATIC,8,189,244,60
LTEXT "Vertex Shader Support: ",IDC_STATIC,15,199,80,30
COMBOBOX IDC_D3D_VSHADER_MODE,100,197,145,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Allow Pixel Shader (if supported by hardware)",IDC_D3D_PSHADER_MODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,216,230,10
+ LTEXT "Video Memory Size (in megabytes):",IDC_STATIC,15,232,120,12
+ COMBOBOX IDC_VIDEOMEMORY_SIZE_COMBO,130,232,40,112,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP | CBS_LOWERCASE
END
IDD_DLLCFG DIALOG DISCARDABLE 0, 0, 260, 250
diff --git a/programs/winecfg/resource.h b/programs/winecfg/resource.h
index 811a115..cabe783 100644
--- a/programs/winecfg/resource.h
+++ b/programs/winecfg/resource.h
@@ -65,6 +65,7 @@
#define IDC_DESKTOP_BY 1026
#define IDC_XDGA 1027
#define IDC_XSHM 1028
+#define IDC_VIDEOMEMORY_SIZE_COMBO 1081
/* dll editing */
#define IDC_RAD_BUILTIN 1029
diff --git a/programs/winecfg/x11drvdlg.c b/programs/winecfg/x11drvdlg.c
index 8fa183e..48e291a 100644
--- a/programs/winecfg/x11drvdlg.c
+++ b/programs/winecfg/x11drvdlg.c
@@ -36,7 +36,10 @@
WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
#define RES_MAXLEN 5 /* the maximum number of characters in a screen dimension. 5 digits should be plenty, what kind of crazy person runs their screen >10,000 pixels across? */
+#define VIDEOMEM_MAXLEN 5 /* the maximum number of characters in a video memory input box */
+#define VIDEOMEM_SIZES_LENGTH 6 /* array length */
+const char * builtin_videomem_sizes[] = { "", "32", "64", "128", "256", "512" };
static struct SHADERMODE
{
@@ -72,7 +75,7 @@ static void update_gui_for_desktop_mode(HWND dialog) {
if (reg_key_exists(config_key, keypath("X11 Driver"), "Desktop"))
{
char* buf, *bufindex;
- CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_CHECKED);
+ CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_CHECKED);
buf = get_reg_key(config_key, keypath("X11 Driver"), "Desktop", "640x480");
/* note: this test must match the one in x11drv */
@@ -114,6 +117,41 @@ static void update_gui_for_desktop_mode(HWND dialog) {
updating_ui = FALSE;
}
+static void update_gui_for_videomem_size(HWND dialog) {
+ char* buf;
+ int i;
+ int matched_index = 0;
+ int found_in_defaults = -1;
+ char const * const backup_first = builtin_videomem_sizes[0];
+
+ SendDlgItemMessage(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, CB_RESETCONTENT, 0, 0);
+ SendDlgItemMessage(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, EM_LIMITTEXT, VIDEOMEM_MAXLEN, 0);
+
+ buf = get_reg_key(config_key, keypath("Direct3D"), "VideoMemorySize", "64");
+
+ for (i = 0; i < VIDEOMEM_SIZES_LENGTH ; i++) {
+ if (strcmp(buf, builtin_videomem_sizes[i]) == 0) {
+ found_in_defaults = 1;
+ matched_index = i;
+ break ;
+ }
+ }
+ if (found_in_defaults == -1)
+ builtin_videomem_sizes[0] = buf;
+
+ for (i = 0; i < VIDEOMEM_SIZES_LENGTH; i++)
+ SendDlgItemMessageA(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, CB_ADDSTRING, i, (LPARAM) builtin_videomem_sizes[i]);
+
+ SendDlgItemMessage(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, CB_SETCURSEL, matched_index, 0);
+
+ builtin_videomem_sizes[0] = backup_first;
+
+ enable(IDC_VIDEOMEMORY_SIZE_COMBO);
+ HeapFree(GetProcessHeap(), 0, buf);
+
+ updating_ui = FALSE;
+}
+
static void init_dialog(HWND dialog)
{
unsigned int it;
@@ -164,6 +202,7 @@ static void init_dialog(HWND dialog)
CheckDlgButton(dialog, IDC_D3D_PSHADER_MODE, BST_UNCHECKED);
HeapFree(GetProcessHeap(), 0, buf);
+ update_gui_for_videomem_size(dialog);
updating_ui = FALSE;
}
@@ -208,6 +247,36 @@ static void on_enable_desktop_clicked(HWND dialog) {
update_gui_for_desktop_mode(dialog);
}
+static void set_from_videomemory_size_edits(HWND dialog) {
+ char buffer[1024];
+
+ SendDlgItemMessage(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, WM_GETTEXT, sizeof(buffer), (LPARAM) buffer);
+
+ if (strlen(buffer))
+ set_reg_key(config_key, keypath("Direct3D"), "VideoMemorySize", buffer);
+}
+
+static void set_from_videomemory_size_changed(HWND dialog) {
+ char *memsize = HeapAlloc( GetProcessHeap(), 0, 5+2 );
+ int sel;
+
+ if (updating_ui) return;
+
+ WINE_TRACE("\n");
+
+ sel = SendDlgItemMessage(dialog, IDC_VIDEOMEMORY_SIZE_COMBO, CB_GETCURSEL, 0, 0);
+ strcpy( memsize, builtin_videomem_sizes[sel]);
+
+ if (memsize == NULL || strcmp(memsize, "") == 0) {
+ HeapFree(GetProcessHeap(), 0, memsize);
+ memsize = strdupA("64");
+ }
+
+ set_reg_key(config_key, keypath("Direct3D"), "VideoMemorySize", memsize);
+
+ HeapFree(GetProcessHeap(), 0, memsize);
+}
+
static void on_enable_managed_clicked(HWND dialog) {
WINE_TRACE("\n");
@@ -272,11 +341,18 @@ GraphDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
case CBN_SELCHANGE: {
SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
switch (LOWORD(wParam)) {
- case IDC_D3D_VSHADER_MODE: on_d3d_vshader_mode_changed(hDlg); break;
- }
+ case IDC_D3D_VSHADER_MODE: on_d3d_vshader_mode_changed(hDlg); break;
+ case IDC_VIDEOMEMORY_SIZE_COMBO: set_from_videomemory_size_changed(hDlg); break;
+ }
break;
}
-
+ case CBN_EDITCHANGE:
+ SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0);
+ if(LOWORD(wParam) == IDC_VIDEOMEMORY_SIZE_COMBO)
+ {
+ set_from_videomemory_size_edits(hDlg);
+ break;
+ }
default:
break;
}
@@ -306,3 +382,4 @@ GraphDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
}
return FALSE;
}
+// vim:sw=4:expandtab
More information about the wine-devel
mailing list