diff options
Diffstat (limited to 'uisimulator/x11/uibasic.c')
-rw-r--r-- | uisimulator/x11/uibasic.c | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/uisimulator/x11/uibasic.c b/uisimulator/x11/uibasic.c new file mode 100644 index 0000000000..85cfb7d911 --- /dev/null +++ b/uisimulator/x11/uibasic.c @@ -0,0 +1,253 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Daniel Stenberg <daniel@haxx.se> + * + * 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 <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <stdlib.h> +#include <ctype.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> + +#include <errno.h> +#include <ctype.h> +#include <time.h> + +#include "screenhack.h" + +#include "version.h" + +#include "lcd-x11.h" + +#define MAX(x,y) ((x)>(y)?(x):(y)) +#define MIN(x,y) ((x)<(y)?(x):(y)) + +#define PROGNAME "rockboxui" + +/* -- -- */ + +GC draw_gc, erase_gc; +static Colormap cmap; +static XColor color_track, color_car; + +static long maxx, maxy; +static double track_zoom=1; + +Display *dpy; +Window window; + +XrmOptionDescRec options [] = { + /* { "-subtractive", ".additive", XrmoptionNoArg, "false" }, */ + { "-server", ".server", XrmoptionSepArg, 0 }, + { "-help", ".help", XrmoptionNoArg, "false" }, + { 0, 0, 0, 0 } +}; +char *progclass = "rockboxui"; + +char *defaults [] = { + ".background: black", + ".foreground: white", + "*help: false", + 0 +}; + +#define LOGFILE "xgui.log" +void Logf(char *fmt, ...) +{ + va_list args; + FILE *log; + struct tm *t; + time_t now=time(NULL); + + va_start(args, fmt); + + t = localtime(&now); + log = fopen(LOGFILE, "a"); + if(log) { + fprintf(log, "%02d:%02d:%02d ", + t->tm_hour, t->tm_min, t->tm_sec); + vfprintf(log, fmt, args); + fprintf(log, "\n"); + + fclose(log); + } + + fprintf(stderr, "%02d:%02d:%02d ", + t->tm_hour, t->tm_min, t->tm_sec); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); + va_end(args); +} + +void init_window () +{ + XGCValues gcv; + XWindowAttributes xgwa; + char *test_p; + + XGetWindowAttributes (dpy, window, &xgwa); + + color_track.red=65535; + color_track.green=65535; + color_track.blue=65535; + + color_car.red=65535; + color_car.green=65535; + color_car.blue=0; + + cmap = xgwa.colormap; + + gcv.function = GXxor; + gcv.foreground = + get_pixel_resource ("foreground", "Foreground", dpy, cmap); + draw_gc = erase_gc = XCreateGC (dpy, window, GCForeground, &gcv); + XAllocColor (dpy, cmap, &color_track); + XAllocColor (dpy, cmap, &color_car); + + screen_resized(200, 100); +} + +void screen_resized(int width, int height) +{ +#if 0 + XWindowAttributes xgwa; + XGetWindowAttributes (dpy, window, &xgwa); + maxx = ((long)(xgwa.width)); + maxy = ((long)(xgwa.height)); +#else + maxx = width-1; + maxy = height-1; +#endif + XSetForeground (dpy, draw_gc, get_pixel_resource ("background", "Background", + dpy, cmap)); + XFillRectangle(dpy, window, draw_gc, 0, 0, width, height); + +} + +static void help(void) +{ + printf(PROGNAME " " ROCKBOXUI_VERSION " " __DATE__ "\n" + "usage: " PROGNAME "\n" + ); +} + +void drawline(int color, int x1, int y1, int x2, int y2) +{ + if (color==0) { + XSetForeground(dpy, draw_gc, + get_pixel_resource("background", "Background", dpy, cmap)); + } + else + XSetForeground(dpy, draw_gc, + get_pixel_resource("foreground", "Foreground", dpy, cmap)); + + XDrawLine(dpy, window, draw_gc, + (int)(x1*track_zoom), + (int)(y1*track_zoom), + (int)(x2*track_zoom), + (int)(y2*track_zoom)); +} + +void drawdot(int color, int x, int y) +{ + if (color==0) { + XSetForeground(dpy, draw_gc, + get_pixel_resource("background", "Background", dpy, cmap)); + } + else + XSetForeground(dpy, draw_gc, + get_pixel_resource("foreground", "Foreground", dpy, cmap)); + + XDrawPoint(dpy, window, draw_gc, x, y); +} + +void drawdots(int color, XPoint *points, int count) +{ + if (color==0) { + XSetForeground(dpy, draw_gc, + get_pixel_resource("background", "Background", dpy, cmap)); + } + else + XSetForeground(dpy, draw_gc, + get_pixel_resource("foreground", "Foreground", dpy, cmap)); + + + XDrawPoints(dpy, window, draw_gc, points, count, CoordModeOrigin); +} + +void drawtext(int color, int x, int y, char *text) +{ + if (color==0) { + XSetForeground(dpy, draw_gc, + get_pixel_resource("background", "Background", dpy, cmap)); + } + else + XSetForeground(dpy, draw_gc, + get_pixel_resource("foreground", "Foreground", dpy, cmap)); + + XDrawString(dpy, window, draw_gc, x, y, text, strlen(text)); +} + + +void +screenhack (Display *the_dpy, Window the_window) +{ + unsigned short porttouse=0; + char *proxy = NULL; + char *url = NULL; + int i; + char *guiname="Rock-the-box"; + Bool helpme; + + /* This doesn't work, but I don't know why (Daniel 1999-12-01) */ + helpme = get_boolean_resource ("help", "Boolean"); + if(helpme) { + help(); + } + printf(PROGNAME " " ROCKBOXUI_VERSION " (" __DATE__ ")\n"); + + dpy=the_dpy; + window=the_window; + + init_window(); + + Logf("Rockbox will kill ya!"); + + app_main(); +} + +void screen_redraw() +{ + int y, x; + + lcd_update(); + + /* draw a border around the "Recorder" screen */ + +#define X1 0 +#define Y1 0 +#define X2 (LCD_WIDTH + MARGIN_X*2) +#define Y2 (LCD_HEIGHT + MARGIN_Y*2) + + drawline(1, X1, Y1, X2, Y1); + drawline(1, X2, Y1, X2, Y2); + drawline(1, X1, Y2, X2, Y2); + drawline(1, X1, Y1, X1, Y2); + +} |