From 8002aa7ee58ceba94f74cd8ff483b8a5c6cc1786 Mon Sep 17 00:00:00 2001 From: Felix Arends Date: Sat, 27 Apr 2002 17:10:15 +0000 Subject: new files git-svn-id: svn://svn.rockbox.org/rockbox/trunk@263 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/win32/file-win32.c | 37 ++++++ uisimulator/win32/main.c | 25 ++++ uisimulator/win32/uisw32.c | 260 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 322 insertions(+) create mode 100644 uisimulator/win32/file-win32.c create mode 100644 uisimulator/win32/main.c create mode 100644 uisimulator/win32/uisw32.c (limited to 'uisimulator/win32') diff --git a/uisimulator/win32/file-win32.c b/uisimulator/win32/file-win32.c new file mode 100644 index 0000000000..148c81c08d --- /dev/null +++ b/uisimulator/win32/file-win32.c @@ -0,0 +1,37 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Felix Arends + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include "file-win32.h" +#include "file.h" + +// Directory operations +// + +// opendir +// open directory for scanning +DIR *opendir ( + char *dirname // directory name + ) +{ + DIR *p = (DIR*)malloc(sizeof(DIR)); + if (_findfirst (dirname, &p) == -1) + return NULL; + return p; +} \ No newline at end of file diff --git a/uisimulator/win32/main.c b/uisimulator/win32/main.c new file mode 100644 index 0000000000..bf14efbaca --- /dev/null +++ b/uisimulator/win32/main.c @@ -0,0 +1,25 @@ +#include "uisw32.h" +#include "lcd-win32.h" + +#define FS 6 + +int main (void) +{ + int x; + lcd_init (); + + while (1) + { + for (x = 0; x < 10; x++) + { + lcd_clear_display (); + lcd_puts (x, 12, "Hello World!", FS); + lcd_puts (x, 32, "From the", FS); + lcd_puts (x, 40, " Open Source ", FS); + lcd_puts (x, 48, "Jukebox Project", FS); + lcd_update (); + } + } + + return 0; +} \ No newline at end of file diff --git a/uisimulator/win32/uisw32.c b/uisimulator/win32/uisw32.c new file mode 100644 index 0000000000..529ecbfb4e --- /dev/null +++ b/uisimulator/win32/uisw32.c @@ -0,0 +1,260 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Felix Arends + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include "uisw32.h" +#include "resource.h" + +// extern functions +extern void main (void *); // mod entry point + +// variables +HWND hGUIWnd; // the GUI window handle +unsigned int uThreadID; // id of mod thread +PBYTE lpKeys; + +// GUIWndProc +// window proc for GUI simulator +LRESULT GUIWndProc ( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ) +{ + static HBITMAP hBkgnd; + static lpBmp [UI_WIDTH * UI_HEIGHT * 3]; + static HDC hMemDc; + + switch (uMsg) + { + case WM_CREATE: + // load background image + hBkgnd = (HBITMAP)LoadImage (GetModuleHandle (NULL), MAKEINTRESOURCE(IDB_UI), + IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + hMemDc = CreateCompatibleDC (GetDC (hWnd)); + SelectObject (hMemDc, hBkgnd); + return TRUE; + case WM_SIZING: + { + LPRECT r = (LPRECT)lParam; + RECT r2; + char s[256]; + int v; + + switch (wParam) + { + case WMSZ_BOTTOM: + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->bottom = r->top + v * UI_HEIGHT / 5; + r->right = r->left + v * UI_WIDTH / 5; + r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_RIGHT: + v = (r->right - r->left) / (UI_WIDTH / 5); + r->bottom = r->top + v * UI_HEIGHT / 5; + r->right = r->left + v * UI_WIDTH / 5; + r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_TOP: + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->top = r->bottom - v * UI_HEIGHT / 5; + r->right = r->left + v * UI_WIDTH / 5; + r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_LEFT: + v = (r->right - r->left) / (UI_WIDTH / 5); + r->bottom = r->top + v * UI_HEIGHT / 5; + r->left = r->right - v * UI_WIDTH / 5; + r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_BOTTOMRIGHT: + GetWindowRect (hWnd, &r2); + if (abs(r2.right - r->right) > abs(r2.bottom - r->bottom)) + v = (r->right - r->left) / (UI_WIDTH / 5); + else + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->bottom = r->top + v * UI_HEIGHT / 5; + r->right = r->left + v * UI_WIDTH / 5; + r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_BOTTOMLEFT: + GetWindowRect (hWnd, &r2); + if (abs(r2.left - r->left) > abs(r2.bottom - r->bottom)) + v = (r->right - r->left) / (UI_WIDTH / 5); + else + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->bottom = r->top + v * UI_HEIGHT / 5; + r->left = r->right - v * UI_WIDTH / 5; + r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->bottom += GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_TOPRIGHT: + GetWindowRect (hWnd, &r2); + if (abs(r2.right - r->right) > abs(r2.top - r->top)) + v = (r->right - r->left) / (UI_WIDTH / 5); + else + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->top = r->bottom - v * UI_HEIGHT / 5; + r->right = r->left + v * UI_WIDTH / 5; + r->right += GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + case WMSZ_TOPLEFT: + GetWindowRect (hWnd, &r2); + if (abs(r2.left - r->left) > abs(r2.top - r->top)) + v = (r->right - r->left) / (UI_WIDTH / 5); + else + v = (r->bottom - r->top) / (UI_HEIGHT / 5); + r->top = r->bottom - v * UI_HEIGHT / 5; + r->left = r->right - v * UI_WIDTH / 5; + r->left -= GetSystemMetrics (SM_CXSIZEFRAME) * 2; + r->top -= GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION); + break; + } + + wsprintf (s, "RockBox Simulator @%d%%", + (r->right - r->left - GetSystemMetrics (SM_CXSIZEFRAME) * 2) + * 100 / UI_WIDTH); + SetWindowText (hWnd, s); + + return TRUE; + } + case WM_ERASEBKGND: + { + PAINTSTRUCT ps; + HDC hDc = BeginPaint (hWnd, &ps); + RECT r; + + GetClientRect (hWnd, &r); + // blit to screen + StretchBlt (hDc, 0, 0, r.right, r.bottom, + hMemDc, 0, 0, UI_WIDTH, UI_HEIGHT, SRCCOPY); + EndPaint (hWnd, &ps); + return TRUE; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + RECT r; + HDC hDc = BeginPaint (hWnd, &ps); + + GetClientRect (hWnd, &r); + // draw lcd screen + StretchDIBits (hDc, + UI_LCD_POSX * r.right / UI_WIDTH, UI_LCD_POSY * r.bottom / UI_HEIGHT, + LCD_WIDTH * r.right / UI_WIDTH, LCD_HEIGHT * r.bottom / UI_HEIGHT, + 0, 0, LCD_WIDTH, LCD_HEIGHT, + bitmap, (BITMAPINFO *) &bmi, DIB_RGB_COLORS, SRCCOPY); + + EndPaint (hWnd, &ps); + return TRUE; + } + case WM_CLOSE: + // close simulator + hGUIWnd = NULL; + PostQuitMessage (0); + break; + } + + return DefWindowProc (hWnd, uMsg, wParam, lParam); +} + +// GUIStartup +// register window class, show window, init GUI +BOOL GUIStartup () +{ + WNDCLASS wc; + + // create window class + ZeroMemory (&wc, sizeof(wc)); + wc.hbrBackground = GetSysColorBrush (COLOR_WINDOW); + wc.hCursor = LoadCursor (NULL, IDC_ARROW); + wc.hInstance = GetModuleHandle (NULL); + wc.lpfnWndProc = (WNDPROC)GUIWndProc; + wc.lpszClassName = "RockBoxUISimulator"; + wc.style = CS_HREDRAW | CS_VREDRAW; + + if (RegisterClass (&wc) == 0) + return FALSE; + + // create window + hGUIWnd = CreateWindowEx ( + WS_EX_TOOLWINDOW | WS_EX_PALETTEWINDOW, + "RockBoxUISimulator", "ARCHOS JukeBox", + WS_VISIBLE | WS_SYSMENU | WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, CW_USEDEFAULT, + UI_WIDTH + GetSystemMetrics (SM_CXSIZEFRAME) * 2, + UI_HEIGHT + GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYSMCAPTION), + NULL, NULL, GetModuleHandle (NULL), NULL); + + if (hGUIWnd == NULL) + return FALSE; + + return TRUE; +} + +// GUIDown +// destroy window, unregister window class +int GUIDown () +{ + DestroyWindow (hGUIWnd); + _endthreadex (uThreadID); + return 0; +} + +// GUIMessageLoop +// standard message loop for GUI window +void GUIMessageLoop () +{ + MSG msg; + while (GetMessage (&msg, hGUIWnd, 0, 0) && hGUIWnd != NULL) + { + TranslateMessage (&msg); + DispatchMessage (&msg); + } +} + + +// WinMain +// program entry point +int WINAPI WinMain ( + HINSTANCE hInstance, // current instance + HINSTANCE hPrevInstance, // previous instance + LPSTR lpCmd, // command line + int nShowCmd // show command + ) +{ + if (!GUIStartup ()) + return 0; + + uThreadID = _beginthread (main, 0, NULL); + if (uThreadID == -0L) + return MessageBox (NULL, "Error creating mod thread!", "Error", MB_OK); + + GUIMessageLoop (); + + return GUIDown (); +} \ No newline at end of file -- cgit v1.2.3