summaryrefslogtreecommitdiff
path: root/uisimulator/win32/uisw32.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2005-01-25 23:47:28 +0000
committerJens Arnold <amiconn@rockbox.org>2005-01-25 23:47:28 +0000
commit97a0ef02a4f0433b49360a77fd08f6f187f9b845 (patch)
tree86aa65494056f17f4d224887fbfe88ed8dfa31c6 /uisimulator/win32/uisw32.c
parenta4e95ee2e661ffca3678a9ee18f37d0292327c41 (diff)
downloadrockbox-97a0ef02a4f0433b49360a77fd08f6f187f9b845.tar.gz
rockbox-97a0ef02a4f0433b49360a77fd08f6f187f9b845.zip
Win32 simulator rework: (1) Better downscaling on resize & for the player lcd. (2) Pulling the window corners now calculates the diagonal. Jumpy resize should be finally gone. (4) Fixed roundoff error for size percentage display. (4) Simplifications & some code policeing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5660 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/win32/uisw32.c')
-rw-r--r--uisimulator/win32/uisw32.c98
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
44PBYTE lpKeys; 44PBYTE lpKeys;
45bool bActive; // window active? 45bool bActive; // window active?
46HANDLE hGUIThread; // thread for GUI 46HANDLE hGUIThread; // thread for GUI
47bool bIsWinNT; // Windows NT derivate?
47 48
48bool lcd_display_redraw=true; // Used for player simulator 49bool lcd_display_redraw=true; // Used for player simulator
49char having_new_lcd=true; // Used for player simulator 50char 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;