From 0e419987e48b006104748118fa28161484b7dfa1 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Mon, 9 Jan 2006 11:22:36 +0000 Subject: SDL simulator brought by Nathan Hand and Nick Lanham. This is added as a third simulator with the hope that once it works fine, we can remove the other two and only have one unified simulator. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8312 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/sdl/screenhack.c | 228 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 uisimulator/sdl/screenhack.c (limited to 'uisimulator/sdl/screenhack.c') diff --git a/uisimulator/sdl/screenhack.c b/uisimulator/sdl/screenhack.c new file mode 100644 index 0000000000..c77cb575e4 --- /dev/null +++ b/uisimulator/sdl/screenhack.c @@ -0,0 +1,228 @@ +/* xscreensaver, Copyright (c) 1992, 1995, 1997, 1998 + * Jamie Zawinski + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation. No representations are made about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * And remember: X Windows is to graphics hacking as roman numerals are to + * the square root of pi. + */ + +/* This file contains simple code to open a window or draw on the root. + The idea being that, when writing a graphics hack, you can just link + with this .o to get all of the uninteresting junk out of the way. + + - create a procedure `screenhack(dpy, window)' + + - create a variable `char *progclass' which names this program's + resource class. + + - create a variable `char defaults []' for the default resources, and + null-terminate it. + + - create a variable `XrmOptionDescRec options[]' for the command-line, + and null-terminate it. + + And that's it... + */ + +#include +#include +#include +#include "lcd-x11.h" +#include "screenhack.h" +#include "version.h" + +#include "debug.h" +#include "config.h" + +#ifndef isupper +# define isupper(c) ((c) >= 'A' && (c) <= 'Z') +#endif +#ifndef _tolower +# define _tolower(c) ((c) - 'A' + 'a') +#endif + +#define KEYBOARD_GENERIC \ + "Keyboard Rockbox\n" \ + "-------- ------------\n" \ + "4, Left LEFT\n" \ + "6, Right RIGHT\n" + +#if CONFIG_KEYPAD == PLAYER_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up PLAY\n" \ + "2, Down STOP\n" \ + "+, Q ON\n" \ + "., INS MENU\n" + +#elif CONFIG_KEYPAD == RECORDER_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up UP\n" \ + "2, Down DOWN\n" \ + "5, Space PLAY\n" \ + "+, Q ON\n" \ + "Enter, A OFF\n" \ + "/, (F1) F1\n" \ + "*, (F2) F2\n" \ + "-, (F3) F3\n" + +#elif CONFIG_KEYPAD == ONDIO_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up UP\n" \ + "2, Down DOWN\n" \ + "., INS MENU\n" \ + "Enter, A OFF\n" + +#elif CONFIG_KEYPAD == IRIVER_H100_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up UP\n" \ + "2, Down DOWN\n" \ + "5, Space SELECT\n" \ + "+, Q ON\n" \ + "Enter, A OFF\n" \ + "., INS MODE\n" \ + "/, (F1) RECORD\n" + +#elif CONFIG_KEYPAD == IRIVER_H300_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up UP\n" \ + "2, Down DOWN\n" \ + "4, Left LEFT\n" \ + "6, Right RIGHT\n" \ + "5, Space SELECT\n" \ + "+, Q ON\n" \ + "Enter, A OFF\n" \ + "., INS MODE\n" \ + "/, (F1) RECORD\n" + +#elif CONFIG_KEYPAD == GMINI100_PAD +#define KEYBOARD_SPECIFIC \ + "8, Up UP\n" \ + "2, Down DOWN\n" \ + "5, Space PLAY\n" \ + "+, Q ON\n" \ + "Enter, A OFF\n" \ + "., INS MENU\n" + +#elif (CONFIG_KEYPAD == IPOD_4G_PAD) +#define KEYBOARD_SPECIFIC \ + "[not written yet]" + +#endif + + +SDL_Surface *surface; + +char having_new_lcd = true; + +extern int display_zoom; + +/* Dead-trivial event handling. + */ +int screenhack_handle_event(SDL_Event *event, bool *release) +{ + int key = 0; + + *release = false; + + switch (event->type) { + case SDL_KEYDOWN: + { + key = event->key.keysym.sym; + *release = false; + } + break; + case SDL_KEYUP: + { + key = event->key.keysym.sym; + *release = true; + } + break; + case SDL_QUIT: + { + SDL_Quit(); + exit(0); + } + break; + default: + break; + } + + return key; +} + +int screenhack_handle_events(bool *release) +{ + int key = 0; + SDL_Event event; + + if (SDL_PollEvent(&event)) { + key = screenhack_handle_event(&event, release); + } + + return key; +} + + +int main (int argc, char **argv) +{ + int window_width; + int window_height; + + if (argc > 1) + { + int x; + for (x=1; x 5) { + printf("fatal: --zoom argument must be between 1 and 5\n"); + exit(0); + } + } else { + printf("fatal: --zoom requires an integer argument\n"); + exit(0); + } + } else { + printf("rockboxui\n"); + printf("Arguments:\n"); + printf(" --old_lcd \t [Player] simulate old playermodel (ROM version<4.51)\n"); + printf(" --zoom [1-5]\t window zoom\n"); + printf(KEYBOARD_GENERIC KEYBOARD_SPECIFIC); + exit(0); + } + } + } + + window_width = (LCD_WIDTH + 2*MARGIN_X) * display_zoom; + window_height = (LCD_HEIGHT + 2*MARGIN_Y) * display_zoom; +#ifdef LCD_REMOTE_HEIGHT + window_height += (LCD_REMOTE_HEIGHT + 2*MARGIN_Y) * display_zoom; +#endif + + if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO)) { + fprintf(stderr, "fatal: %s", SDL_GetError()); + exit(-1); + } + + atexit(SDL_Quit); + + if ((surface = SDL_SetVideoMode(window_width, window_height, 24, 0)) == NULL) { + fprintf(stderr, "fatal: %s", SDL_GetError()); + exit(-1); + } + + screenhack(); /* doesn't return */ + return 0; +} -- cgit v1.2.3