diff options
-rw-r--r-- | uisimulator/win32/uisw32.c | 98 |
1 files changed, 40 insertions, 58 deletions
diff --git a/uisimulator/win32/uisw32.c b/uisimulator/win32/uisw32.c index 39ab709a20..9401153408 100644 --- a/uisimulator/win32/uisw32.c +++ b/uisimulator/win32/uisw32.c | |||
@@ -44,6 +44,7 @@ unsigned int uThreadID; // id of mod thread | |||
44 | PBYTE lpKeys; | 44 | PBYTE lpKeys; |
45 | bool bActive; // window active? | 45 | bool bActive; // window active? |
46 | HANDLE hGUIThread; // thread for GUI | 46 | HANDLE hGUIThread; // thread for GUI |
47 | bool bIsWinNT; // Windows NT derivate? | ||
47 | 48 | ||
48 | bool lcd_display_redraw=true; // Used for player simulator | 49 | bool lcd_display_redraw=true; // Used for player simulator |
49 | char having_new_lcd=true; // Used for player simulator | 50 | char having_new_lcd=true; // Used for player simulator |
@@ -80,97 +81,74 @@ LRESULT CALLBACK GUIWndProc ( | |||
80 | SetTimer (hWnd, TIMER_EVENT, 1, NULL); | 81 | SetTimer (hWnd, TIMER_EVENT, 1, NULL); |
81 | 82 | ||
82 | // load background image | 83 | // load background image |
83 | hBkgnd = (HBITMAP)LoadImage (GetModuleHandle (NULL), MAKEINTRESOURCE(IDB_UI), | 84 | hBkgnd = (HBITMAP)LoadImage (GetModuleHandle (NULL), |
84 | IMAGE_BITMAP, 0, 0, LR_VGACOLOR); | 85 | MAKEINTRESOURCE(IDB_UI), IMAGE_BITMAP, 0, 0, LR_VGACOLOR); |
85 | hMemDc = CreateCompatibleDC (GetDC (hWnd)); | 86 | hMemDc = CreateCompatibleDC (GetDC (hWnd)); |
86 | SelectObject (hMemDc, hBkgnd); | 87 | SelectObject (hMemDc, hBkgnd); |
87 | return TRUE; | 88 | return TRUE; |
88 | case WM_SIZING: | 89 | case WM_SIZING: |
89 | { | 90 | { |
90 | LPRECT r = (LPRECT)lParam; | 91 | LPRECT r = (LPRECT)lParam; |
91 | RECT r2; | ||
92 | char s[256]; | 92 | char s[256]; |
93 | int v; | 93 | int v; |
94 | int h_add = GetSystemMetrics (SM_CXSIZEFRAME) * 2 + 4; | ||
95 | int v_add = GetSystemMetrics (SM_CYSIZEFRAME) * 2 | ||
96 | + GetSystemMetrics (SM_CYCAPTION) + 4; | ||
94 | 97 | ||
95 | switch (wParam) | 98 | switch (wParam) |
96 | { | 99 | { |
97 | case WMSZ_BOTTOM: | 100 | case WMSZ_BOTTOM: |
98 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 101 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); |
99 | r->bottom = r->top + v * UI_HEIGHT / 5; | 102 | r->bottom = r->top + v * UI_HEIGHT / 5 + v_add; |
100 | r->right = r->left + v * UI_WIDTH / 5; | 103 | r->right = r->left + v * UI_WIDTH / 5 + h_add; |
101 | r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
102 | r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
103 | break; | 104 | break; |
104 | case WMSZ_RIGHT: | 105 | case WMSZ_RIGHT: |
105 | v = (r->right - r->left) / (UI_WIDTH / 5); | 106 | v = (r->right - r->left) / (UI_WIDTH / 5); |
106 | r->bottom = r->top + v * UI_HEIGHT / 5; | 107 | r->bottom = r->top + v * UI_HEIGHT / 5 + v_add; |
107 | r->right = r->left + v * UI_WIDTH / 5; | 108 | r->right = r->left + v * UI_WIDTH / 5 + h_add; |
108 | r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
109 | r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
110 | break; | 109 | break; |
111 | case WMSZ_TOP: | 110 | case WMSZ_TOP: |
112 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 111 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); |
113 | r->top = r->bottom - v * UI_HEIGHT / 5; | 112 | r->top = r->bottom - v * UI_HEIGHT / 5 - v_add; |
114 | r->right = r->left + v * UI_WIDTH / 5; | 113 | r->right = r->left + v * UI_WIDTH / 5 + h_add; |
115 | r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
116 | r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
117 | break; | 114 | break; |
118 | case WMSZ_LEFT: | 115 | case WMSZ_LEFT: |
119 | v = (r->right - r->left) / (UI_WIDTH / 5); | 116 | v = (r->right - r->left) / (UI_WIDTH / 5); |
120 | r->bottom = r->top + v * UI_HEIGHT / 5; | 117 | r->bottom = r->top + v * UI_HEIGHT / 5 + v_add; |
121 | r->left = r->right - v * UI_WIDTH / 5; | 118 | r->left = r->right - v * UI_WIDTH / 5 - h_add; |
122 | r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
123 | r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
124 | break; | 119 | break; |
125 | case WMSZ_BOTTOMRIGHT: | 120 | case WMSZ_BOTTOMRIGHT: |
126 | GetWindowRect (hWnd, &r2); | 121 | v = ((r->right - r->left) * UI_HEIGHT |
127 | if (r2.right - r->right > r2.bottom - r->bottom) | 122 | +(r->bottom - r->top) * UI_WIDTH) |
128 | v = (r->right - r->left) / (UI_WIDTH / 5); | 123 | / (2 * UI_WIDTH * UI_HEIGHT / 5); |
129 | else | 124 | r->bottom = r->top + v * UI_HEIGHT / 5 + v_add; |
130 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 125 | r->right = r->left + v * UI_WIDTH / 5 + h_add; |
131 | r->bottom = r->top + v * UI_HEIGHT / 5; | ||
132 | r->right = r->left + v * UI_WIDTH / 5; | ||
133 | r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
134 | r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
135 | break; | 126 | break; |
136 | case WMSZ_BOTTOMLEFT: | 127 | case WMSZ_BOTTOMLEFT: |
137 | GetWindowRect (hWnd, &r2); | 128 | v = ((r->right - r->left) * UI_HEIGHT |
138 | if (-(r2.left - r->left) > r2.bottom - r->bottom) | 129 | +(r->bottom - r->top) * UI_WIDTH) |
139 | v = (r->right - r->left) / (UI_WIDTH / 5); | 130 | / (2 * UI_WIDTH * UI_HEIGHT / 5); |
140 | else | 131 | r->bottom = r->top + v * UI_HEIGHT / 5 + v_add; |
141 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 132 | r->left = r->right - v * UI_WIDTH / 5 - h_add; |
142 | r->bottom = r->top + v * UI_HEIGHT / 5; | ||
143 | r->left = r->right - v * UI_WIDTH / 5; | ||
144 | r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
145 | r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
146 | break; | 133 | break; |
147 | case WMSZ_TOPRIGHT: | 134 | case WMSZ_TOPRIGHT: |
148 | GetWindowRect (hWnd, &r2); | 135 | v = ((r->right - r->left) * UI_HEIGHT |
149 | if (r2.right - r->right > -(r2.top - r->top)) | 136 | +(r->bottom - r->top) * UI_WIDTH) |
150 | v = (r->right - r->left) / (UI_WIDTH / 5); | 137 | / (2 * UI_WIDTH * UI_HEIGHT / 5); |
151 | else | 138 | r->top = r->bottom - v * UI_HEIGHT / 5 - v_add; |
152 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 139 | r->right = r->left + v * UI_WIDTH / 5 + h_add; |
153 | r->top = r->bottom - v * UI_HEIGHT / 5; | ||
154 | r->right = r->left + v * UI_WIDTH / 5; | ||
155 | r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2 +4; | ||
156 | r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION) +4; | ||
157 | break; | 140 | break; |
158 | case WMSZ_TOPLEFT: | 141 | case WMSZ_TOPLEFT: |
159 | GetWindowRect (hWnd, &r2); | 142 | v = ((r->right - r->left) * UI_HEIGHT |
160 | if (-(r2.left - r->left) > -(r2.top - r->top)) | 143 | +(r->bottom - r->top) * UI_WIDTH) |
161 | v = (r->right - r->left) / (UI_WIDTH / 5); | 144 | / (2 * UI_WIDTH * UI_HEIGHT / 5); |
162 | else | 145 | r->top = r->bottom - v * UI_HEIGHT / 5 - v_add; |
163 | v = (r->bottom - r->top) / (UI_HEIGHT / 5); | 146 | r->left = r->right - v * UI_WIDTH / 5 - h_add; |
164 | r->top = r->bottom - v * UI_HEIGHT / 5; | ||
165 | r->left = r->right - v * UI_WIDTH / 5; | ||
166 | r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2+4; | ||
167 | r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION)+4; | ||
168 | break; | 147 | break; |
169 | } | 148 | } |
170 | 149 | ||
171 | wsprintf (s, UI_TITLE " @%d%%", | 150 | wsprintf (s, UI_TITLE " @%d%%", |
172 | (r->right - r->left - GetSystemMetrics (SM_CXSIZEFRAME) * 2 -4) | 151 | (r->right - r->left - h_add + 1) * 100 / UI_WIDTH); |
173 | * 100 / UI_WIDTH); | ||
174 | SetWindowText (hWnd, s); | 152 | SetWindowText (hWnd, s); |
175 | 153 | ||
176 | return TRUE; | 154 | return TRUE; |
@@ -182,6 +160,7 @@ LRESULT CALLBACK GUIWndProc ( | |||
182 | 160 | ||
183 | GetClientRect (hWnd, &r); | 161 | GetClientRect (hWnd, &r); |
184 | // blit background image to screen | 162 | // blit background image to screen |
163 | SetStretchBltMode(hDc, bIsWinNT ? HALFTONE : COLORONCOLOR); | ||
185 | StretchBlt (hDc, 0, 0, r.right, r.bottom, | 164 | StretchBlt (hDc, 0, 0, r.right, r.bottom, |
186 | hMemDc, 0, 0, UI_WIDTH, UI_HEIGHT, SRCCOPY); | 165 | hMemDc, 0, 0, UI_WIDTH, UI_HEIGHT, SRCCOPY); |
187 | return TRUE; | 166 | return TRUE; |
@@ -194,10 +173,11 @@ LRESULT CALLBACK GUIWndProc ( | |||
194 | 173 | ||
195 | GetClientRect (hWnd, &r); | 174 | GetClientRect (hWnd, &r); |
196 | // draw lcd screen | 175 | // draw lcd screen |
176 | SetStretchBltMode(hDc, bIsWinNT ? HALFTONE : COLORONCOLOR); | ||
197 | StretchDIBits (hDc, | 177 | StretchDIBits (hDc, |
198 | UI_LCD_POSX * r.right / UI_WIDTH, | 178 | UI_LCD_POSX * r.right / UI_WIDTH, |
199 | UI_LCD_POSY * r.bottom / UI_HEIGHT, | 179 | UI_LCD_POSY * r.bottom / UI_HEIGHT, |
200 | UI_LCD_WIDTH * r.right / UI_WIDTH, | 180 | UI_LCD_WIDTH * r.right / UI_WIDTH, |
201 | UI_LCD_HEIGHT * r.bottom / UI_HEIGHT, | 181 | UI_LCD_HEIGHT * r.bottom / UI_HEIGHT, |
202 | 0, 0, LCD_WIDTH, LCD_HEIGHT, | 182 | 0, 0, LCD_WIDTH, LCD_HEIGHT, |
203 | bitmap, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, | 183 | bitmap, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, |
@@ -318,6 +298,8 @@ int WINAPI WinMain ( | |||
318 | 298 | ||
319 | /* default file mode should be O_BINARY to be consistent with rockbox */ | 299 | /* default file mode should be O_BINARY to be consistent with rockbox */ |
320 | _fmode = _O_BINARY; | 300 | _fmode = _O_BINARY; |
301 | |||
302 | bIsWinNT = ((GetVersion() & 0x80000000) == 0); | ||
321 | 303 | ||
322 | if (!GUIStartup ()) | 304 | if (!GUIStartup ()) |
323 | return 0; | 305 | return 0; |