Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 1 | /* |
James Hawkins | 7f27420 | 2004-07-30 01:35:13 +0000 | [diff] [blame] | 2 | * Graphics configuration code |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 3 | * |
| 4 | * Copyright 2003 Mark Westcott |
Mike Hearn | a5ce4ee | 2004-09-28 03:16:43 +0000 | [diff] [blame] | 5 | * Copyright 2003-2004 Mike Hearn |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 6 | * Copyright 2005 Raphael Junqueira |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 7 | * |
| 8 | * This library is free software; you can redistribute it and/or |
| 9 | * modify it under the terms of the GNU Lesser General Public |
| 10 | * License as published by the Free Software Foundation; either |
| 11 | * version 2.1 of the License, or (at your option) any later version. |
| 12 | * |
| 13 | * This library is distributed in the hope that it will be useful, |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 16 | * Lesser General Public License for more details. |
| 17 | * |
| 18 | * You should have received a copy of the GNU Lesser General Public |
| 19 | * License along with this library; if not, write to the Free Software |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 21 | * |
| 22 | */ |
| 23 | |
Mike McCormack | 5530393 | 2006-01-19 11:55:01 +0100 | [diff] [blame] | 24 | #define WIN32_LEAN_AND_MEAN |
| 25 | |
Alexandre Julliard | e37c6e1 | 2003-09-05 23:08:26 +0000 | [diff] [blame] | 26 | #include <stdarg.h> |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 27 | #include <stdlib.h> |
| 28 | #include <stdio.h> |
| 29 | |
Mike McCormack | 5530393 | 2006-01-19 11:55:01 +0100 | [diff] [blame] | 30 | #include <windows.h> |
Alexandre Julliard | e37c6e1 | 2003-09-05 23:08:26 +0000 | [diff] [blame] | 31 | #include <wine/debug.h> |
| 32 | |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 33 | #include "resource.h" |
| 34 | #include "winecfg.h" |
| 35 | |
| 36 | WINE_DEFAULT_DEBUG_CHANNEL(winecfg); |
| 37 | |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 38 | #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? */ |
| 39 | |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 40 | |
| 41 | static const char* D3D_VS_Modes[] = { |
| 42 | "hardware", |
| 43 | "none", |
| 44 | "emulation", |
| 45 | NULL |
| 46 | }; |
| 47 | |
| 48 | |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 49 | int updating_ui; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 50 | |
Mike McCormack | ae51135 | 2005-06-02 15:11:32 +0000 | [diff] [blame] | 51 | static void update_gui_for_desktop_mode(HWND dialog) { |
Rein Klazes | 86feb98 | 2005-10-18 10:35:41 +0000 | [diff] [blame] | 52 | int desktopenabled = FALSE; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 53 | |
Rein Klazes | 86feb98 | 2005-10-18 10:35:41 +0000 | [diff] [blame] | 54 | WINE_TRACE("\n"); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 55 | updating_ui = TRUE; |
Alexandre Julliard | d74a62c | 2006-03-29 13:49:36 +0200 | [diff] [blame] | 56 | |
| 57 | if (current_app) |
| 58 | { |
| 59 | disable(IDC_ENABLE_DESKTOP); |
| 60 | disable(IDC_DESKTOP_WIDTH); |
| 61 | disable(IDC_DESKTOP_HEIGHT); |
| 62 | disable(IDC_DESKTOP_SIZE); |
| 63 | disable(IDC_DESKTOP_BY); |
| 64 | return; |
| 65 | } |
| 66 | enable(IDC_ENABLE_DESKTOP); |
| 67 | |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 68 | /* do we have desktop mode enabled? */ |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 69 | if (reg_key_exists(config_key, keypath("X11 Driver"), "Desktop")) |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 70 | { |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 71 | char* buf, *bufindex; |
Mike Hearn | 498e1ce | 2003-09-30 00:27:55 +0000 | [diff] [blame] | 72 | CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_CHECKED); |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 73 | |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 74 | buf = get_reg_key(config_key, keypath("X11 Driver"), "Desktop", "640x480"); |
Rein Klazes | 86feb98 | 2005-10-18 10:35:41 +0000 | [diff] [blame] | 75 | /* note: this test must match the one in x11drv */ |
| 76 | if( buf[0] != 'n' && buf[0] != 'N' && buf[0] != 'F' && buf[0] != 'f' |
| 77 | && buf[0] != '0') { |
| 78 | desktopenabled = TRUE; |
| 79 | enable(IDC_DESKTOP_WIDTH); |
| 80 | enable(IDC_DESKTOP_HEIGHT); |
| 81 | enable(IDC_DESKTOP_SIZE); |
| 82 | enable(IDC_DESKTOP_BY); |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 83 | |
Rein Klazes | 86feb98 | 2005-10-18 10:35:41 +0000 | [diff] [blame] | 84 | bufindex = strchr(buf, 'x'); |
| 85 | if (bufindex) { |
| 86 | *bufindex = 0; |
| 87 | ++bufindex; |
| 88 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), buf); |
| 89 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), bufindex); |
| 90 | } else { |
| 91 | WINE_TRACE("Desktop registry entry is malformed"); |
| 92 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), "640"); |
| 93 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), "480"); |
| 94 | } |
| 95 | } |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 96 | HeapFree(GetProcessHeap(), 0, buf); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 97 | } |
Rein Klazes | 86feb98 | 2005-10-18 10:35:41 +0000 | [diff] [blame] | 98 | if (!desktopenabled) |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 99 | { |
Mike Hearn | 498e1ce | 2003-09-30 00:27:55 +0000 | [diff] [blame] | 100 | CheckDlgButton(dialog, IDC_ENABLE_DESKTOP, BST_UNCHECKED); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 101 | |
Mike Hearn | 498e1ce | 2003-09-30 00:27:55 +0000 | [diff] [blame] | 102 | disable(IDC_DESKTOP_WIDTH); |
| 103 | disable(IDC_DESKTOP_HEIGHT); |
| 104 | disable(IDC_DESKTOP_SIZE); |
| 105 | disable(IDC_DESKTOP_BY); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 106 | |
Mike Hearn | 498e1ce | 2003-09-30 00:27:55 +0000 | [diff] [blame] | 107 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_WIDTH), ""); |
| 108 | SetWindowText(GetDlgItem(dialog, IDC_DESKTOP_HEIGHT), ""); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 109 | } |
| 110 | |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 111 | updating_ui = FALSE; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 112 | } |
| 113 | |
Christian Costa | e180cd9 | 2005-09-26 09:51:48 +0000 | [diff] [blame] | 114 | static void init_dialog(HWND dialog) |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 115 | { |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 116 | unsigned int it; |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 117 | char* buf; |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 118 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 119 | update_gui_for_desktop_mode(dialog); |
Mike Hearn | f388977 | 2003-10-22 00:01:46 +0000 | [diff] [blame] | 120 | |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 121 | updating_ui = TRUE; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 122 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 123 | SendDlgItemMessage(dialog, IDC_DESKTOP_WIDTH, EM_LIMITTEXT, RES_MAXLEN, 0); |
| 124 | SendDlgItemMessage(dialog, IDC_DESKTOP_HEIGHT, EM_LIMITTEXT, RES_MAXLEN, 0); |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 125 | |
Vitaliy Margolen | 95e5ecc | 2005-12-31 13:32:59 +0100 | [diff] [blame] | 126 | buf = get_reg_key(config_key, keypath("X11 Driver"), "DXGrab", "N"); |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 127 | if (IS_OPTION_TRUE(*buf)) |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 128 | CheckDlgButton(dialog, IDC_DX_MOUSE_GRAB, BST_CHECKED); |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 129 | else |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 130 | CheckDlgButton(dialog, IDC_DX_MOUSE_GRAB, BST_UNCHECKED); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 131 | HeapFree(GetProcessHeap(), 0, buf); |
Mike Hearn | fae915f | 2003-09-22 21:13:51 +0000 | [diff] [blame] | 132 | |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 133 | buf = get_reg_key(config_key, keypath("X11 Driver"), "DesktopDoubleBuffered", "Y"); |
Vitaliy Margolen | 4e20622 | 2006-02-02 13:41:46 +0100 | [diff] [blame] | 134 | if (IS_OPTION_TRUE(*buf)) |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 135 | CheckDlgButton(dialog, IDC_DOUBLE_BUFFER, BST_CHECKED); |
Vitaliy Margolen | 4e20622 | 2006-02-02 13:41:46 +0100 | [diff] [blame] | 136 | else |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 137 | CheckDlgButton(dialog, IDC_DOUBLE_BUFFER, BST_UNCHECKED); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 138 | HeapFree(GetProcessHeap(), 0, buf); |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 139 | |
Robert Reif | e998da5 | 2005-12-22 11:15:32 +0100 | [diff] [blame] | 140 | buf = get_reg_key(config_key, keypath("X11 Driver"), "Managed", "Y"); |
| 141 | if (IS_OPTION_TRUE(*buf)) |
| 142 | CheckDlgButton(dialog, IDC_ENABLE_MANAGED, BST_CHECKED); |
| 143 | else |
| 144 | CheckDlgButton(dialog, IDC_ENABLE_MANAGED, BST_UNCHECKED); |
| 145 | HeapFree(GetProcessHeap(), 0, buf); |
| 146 | |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 147 | SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_RESETCONTENT, 0, 0); |
| 148 | for (it = 0; NULL != D3D_VS_Modes[it]; ++it) { |
| 149 | SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_ADDSTRING, 0, (LPARAM) D3D_VS_Modes[it]); |
| 150 | } |
| 151 | buf = get_reg_key(config_key, keypath("Direct3D"), "VertexShaderMode", "hardware"); |
| 152 | for (it = 0; NULL != D3D_VS_Modes[it]; ++it) { |
| 153 | if (strcmp(buf, D3D_VS_Modes[it]) == 0) { |
| 154 | SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_SETCURSEL, it, 0); |
| 155 | break ; |
| 156 | } |
| 157 | } |
| 158 | if (NULL == D3D_VS_Modes[it]) { |
| 159 | WINE_ERR("Invalid Direct3D VertexShader Mode read from registry (%s)\n", buf); |
| 160 | } |
| 161 | HeapFree(GetProcessHeap(), 0, buf); |
| 162 | |
Vitaliy Margolen | 7b98e1f | 2006-01-31 12:23:01 +0100 | [diff] [blame] | 163 | buf = get_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "disabled"); |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 164 | if (!strcmp(buf, "enabled")) |
| 165 | CheckDlgButton(dialog, IDC_D3D_PSHADER_MODE, BST_CHECKED); |
| 166 | else |
| 167 | CheckDlgButton(dialog, IDC_D3D_PSHADER_MODE, BST_UNCHECKED); |
| 168 | HeapFree(GetProcessHeap(), 0, buf); |
| 169 | |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 170 | updating_ui = FALSE; |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 171 | } |
| 172 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 173 | static void set_from_desktop_edits(HWND dialog) { |
| 174 | char *width, *height, *new; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 175 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 176 | if (updating_ui) return; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 177 | |
| 178 | WINE_TRACE("\n"); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 179 | |
Mike Hearn | 7d8711e | 2004-11-23 13:50:23 +0000 | [diff] [blame] | 180 | width = get_text(dialog, IDC_DESKTOP_WIDTH); |
| 181 | height = get_text(dialog, IDC_DESKTOP_HEIGHT); |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 182 | |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 183 | if (width == NULL || strcmp(width, "") == 0) { |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 184 | HeapFree(GetProcessHeap(), 0, width); |
| 185 | width = strdupA("640"); |
| 186 | } |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 187 | |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 188 | if (height == NULL || strcmp(height, "") == 0) { |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 189 | HeapFree(GetProcessHeap(), 0, height); |
| 190 | height = strdupA("480"); |
| 191 | } |
| 192 | |
| 193 | new = HeapAlloc(GetProcessHeap(), 0, strlen(width) + strlen(height) + 2 /* x + terminator */); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 194 | sprintf(new, "%sx%s", width, height); |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 195 | set_reg_key(config_key, keypath("X11 Driver"), "Desktop", new); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 196 | |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 197 | HeapFree(GetProcessHeap(), 0, width); |
| 198 | HeapFree(GetProcessHeap(), 0, height); |
| 199 | HeapFree(GetProcessHeap(), 0, new); |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 200 | } |
| 201 | |
Mike McCormack | ae51135 | 2005-06-02 15:11:32 +0000 | [diff] [blame] | 202 | static void on_enable_desktop_clicked(HWND dialog) { |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 203 | WINE_TRACE("\n"); |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 204 | |
| 205 | if (IsDlgButtonChecked(dialog, IDC_ENABLE_DESKTOP) == BST_CHECKED) { |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 206 | set_from_desktop_edits(dialog); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 207 | } else { |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 208 | set_reg_key(config_key, keypath("X11 Driver"), "Desktop", NULL); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 209 | } |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 210 | |
| 211 | update_gui_for_desktop_mode(dialog); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 212 | } |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 213 | |
Robert Reif | e998da5 | 2005-12-22 11:15:32 +0100 | [diff] [blame] | 214 | static void on_enable_managed_clicked(HWND dialog) { |
| 215 | WINE_TRACE("\n"); |
| 216 | |
| 217 | if (IsDlgButtonChecked(dialog, IDC_ENABLE_MANAGED) == BST_CHECKED) { |
| 218 | set_reg_key(config_key, keypath("X11 Driver"), "Managed", "Y"); |
| 219 | } else { |
| 220 | set_reg_key(config_key, keypath("X11 Driver"), "Managed", "N"); |
| 221 | } |
| 222 | } |
| 223 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 224 | static void on_dx_mouse_grab_clicked(HWND dialog) { |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 225 | if (IsDlgButtonChecked(dialog, IDC_DX_MOUSE_GRAB) == BST_CHECKED) |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 226 | set_reg_key(config_key, keypath("X11 Driver"), "DXGrab", "Y"); |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 227 | else |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 228 | set_reg_key(config_key, keypath("X11 Driver"), "DXGrab", "N"); |
Mike Hearn | 5d249cb | 2003-09-18 04:32:01 +0000 | [diff] [blame] | 229 | } |
| 230 | |
Mike Hearn | fae915f | 2003-09-22 21:13:51 +0000 | [diff] [blame] | 231 | |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 232 | static void on_double_buffer_clicked(HWND dialog) { |
Vitaliy Margolen | 4e20622 | 2006-02-02 13:41:46 +0100 | [diff] [blame] | 233 | if (IsDlgButtonChecked(dialog, IDC_DOUBLE_BUFFER) == BST_CHECKED) |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 234 | set_reg_key(config_key, keypath("X11 Driver"), "DesktopDoubleBuffered", "Y"); |
Vitaliy Margolen | 4e20622 | 2006-02-02 13:41:46 +0100 | [diff] [blame] | 235 | else |
Michael Jung | 3bbb7fd | 2005-06-23 11:42:54 +0000 | [diff] [blame] | 236 | set_reg_key(config_key, keypath("X11 Driver"), "DesktopDoubleBuffered", "N"); |
Mike Hearn | fae915f | 2003-09-22 21:13:51 +0000 | [diff] [blame] | 237 | } |
| 238 | |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 239 | static void on_d3d_vshader_mode_changed(HWND dialog) { |
| 240 | int selected_mode = SendDlgItemMessage(dialog, IDC_D3D_VSHADER_MODE, CB_GETCURSEL, 0, 0); |
| 241 | set_reg_key(config_key, keypath("Direct3D"), "VertexShaderMode", D3D_VS_Modes[selected_mode]); |
| 242 | } |
| 243 | |
| 244 | static void on_d3d_pshader_mode_clicked(HWND dialog) { |
| 245 | if (IsDlgButtonChecked(dialog, IDC_D3D_PSHADER_MODE) == BST_CHECKED) |
| 246 | set_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "enabled"); |
| 247 | else |
| 248 | set_reg_key(config_key, keypath("Direct3D"), "PixelShaderMode", "disabled"); |
| 249 | } |
| 250 | |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 251 | INT_PTR CALLBACK |
Christian Costa | e180cd9 | 2005-09-26 09:51:48 +0000 | [diff] [blame] | 252 | GraphDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 253 | { |
| 254 | switch (uMsg) { |
| 255 | case WM_INITDIALOG: |
| 256 | break; |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 257 | |
| 258 | case WM_SHOWWINDOW: |
| 259 | set_window_title(hDlg); |
| 260 | break; |
| 261 | |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 262 | case WM_COMMAND: |
| 263 | switch(HIWORD(wParam)) { |
| 264 | case EN_CHANGE: { |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 265 | if (updating_ui) break; |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 266 | SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0); |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 267 | if ( ((LOWORD(wParam) == IDC_DESKTOP_WIDTH) || (LOWORD(wParam) == IDC_DESKTOP_HEIGHT)) && !updating_ui ) |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 268 | set_from_desktop_edits(hDlg); |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 269 | break; |
| 270 | } |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 271 | case BN_CLICKED: { |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 272 | if (updating_ui) break; |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 273 | SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0); |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 274 | switch(LOWORD(wParam)) { |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 275 | case IDC_ENABLE_DESKTOP: on_enable_desktop_clicked(hDlg); break; |
Robert Reif | e998da5 | 2005-12-22 11:15:32 +0100 | [diff] [blame] | 276 | case IDC_ENABLE_MANAGED: on_enable_managed_clicked(hDlg); break; |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 277 | case IDC_DX_MOUSE_GRAB: on_dx_mouse_grab_clicked(hDlg); break; |
| 278 | case IDC_DOUBLE_BUFFER: on_double_buffer_clicked(hDlg); break; |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 279 | case IDC_D3D_PSHADER_MODE: on_d3d_pshader_mode_clicked(hDlg); break; |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 280 | } |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 281 | break; |
| 282 | } |
Mike Hearn | 81be7f7 | 2003-09-22 19:26:10 +0000 | [diff] [blame] | 283 | case CBN_SELCHANGE: { |
Crestez Leonard | 3e55df3 | 2005-01-14 19:48:41 +0000 | [diff] [blame] | 284 | SendMessage(GetParent(hDlg), PSM_CHANGED, 0, 0); |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 285 | switch (LOWORD(wParam)) { |
Raphael Junqueira | 88f73c4 | 2005-07-12 18:11:11 +0000 | [diff] [blame] | 286 | case IDC_D3D_VSHADER_MODE: on_d3d_vshader_mode_changed(hDlg); break; |
| 287 | } |
Mike Hearn | 81be7f7 | 2003-09-22 19:26:10 +0000 | [diff] [blame] | 288 | break; |
| 289 | } |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 290 | |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 291 | default: |
| 292 | break; |
| 293 | } |
| 294 | break; |
Mike Hearn | cd0b789 | 2003-09-08 18:58:07 +0000 | [diff] [blame] | 295 | |
| 296 | |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 297 | case WM_NOTIFY: |
| 298 | switch (((LPNMHDR)lParam)->code) { |
| 299 | case PSN_KILLACTIVE: { |
Dmitry Timoshkov | 39f960b | 2005-02-15 21:51:06 +0000 | [diff] [blame] | 300 | SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 301 | break; |
| 302 | } |
| 303 | case PSN_APPLY: { |
Mike Hearn | 0af614e | 2004-09-28 03:55:16 +0000 | [diff] [blame] | 304 | apply(); |
Dmitry Timoshkov | 39f960b | 2005-02-15 21:51:06 +0000 | [diff] [blame] | 305 | SetWindowLongPtr(hDlg, DWLP_MSGRESULT, PSNRET_NOERROR); |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 306 | break; |
| 307 | } |
| 308 | case PSN_SETACTIVE: { |
Mike Hearn | 02e850e | 2004-09-28 04:05:55 +0000 | [diff] [blame] | 309 | init_dialog (hDlg); |
Alexandre Julliard | 3db78b8 | 2003-08-30 00:40:46 +0000 | [diff] [blame] | 310 | break; |
| 311 | } |
| 312 | } |
| 313 | break; |
| 314 | |
| 315 | default: |
| 316 | break; |
| 317 | } |
| 318 | return FALSE; |
| 319 | } |