summaryrefslogtreecommitdiffstats
path: root/uisimulator/common
diff options
context:
space:
mode:
authorRobert Hak <adiamas@rockbox.org>2002-08-13 09:19:21 +0000
committerRobert Hak <adiamas@rockbox.org>2002-08-13 09:19:21 +0000
commit4db2ded56f1ebf5a617e82458ab5526541b92943 (patch)
tree2acaed2c1820ab9c60b290177dbb1c56c0902594 /uisimulator/common
parentccd10acb2014804c10d2758c36fc425ea359f598 (diff)
downloadrockbox-4db2ded56f1ebf5a617e82458ab5526541b92943.tar.gz
rockbox-4db2ded56f1ebf5a617e82458ab5526541b92943.tar.bz2
rockbox-4db2ded56f1ebf5a617e82458ab5526541b92943.zip
similarities in the two branches joined
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1707 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'uisimulator/common')
-rw-r--r--uisimulator/common/lcd-common.c162
-rw-r--r--uisimulator/common/lcd-common.h71
2 files changed, 233 insertions, 0 deletions
diff --git a/uisimulator/common/lcd-common.c b/uisimulator/common/lcd-common.c
new file mode 100644
index 0000000000..d55cd0baa8
--- /dev/null
+++ b/uisimulator/common/lcd-common.c
@@ -0,0 +1,162 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Robert E. Hak <rhak@ramapo.edu>
+ *
+ * Windows Copyright (C) 2002 by Felix Arends
+ * X11 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 "lcd-common.h"
+
+/*** Define our #includes ***/
+#ifdef WIN32
+ #include <windows.h>
+ #include <process.h>
+ #include "uisw32.h"
+#else
+ /* X11 */
+ #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"
+#endif
+/**** End #includes ****/
+
+
+/*** Start global variables ***/
+#ifdef WIN32
+
+/* Simulate the target ui display */
+char bitmap[LCD_HEIGHT][LCD_WIDTH];
+
+BITMAPINFO2 bmi =
+{
+ { sizeof (BITMAPINFOHEADER),
+ LCD_WIDTH, -LCD_HEIGHT, 1, 8,
+ BI_RGB, 0, 0, 0, 2, 2, },
+ {
+ /* green background color */
+ {UI_LCD_BGCOLOR, 0},
+ /* black color */
+ {UI_LCD_BLACK, 0}
+ }
+
+};
+
+#else
+extern Display *dpy;
+unsigned char lcd_framebuffer_copy[LCD_WIDTH][LCD_HEIGHT/8];
+#endif
+
+/* Both X11 and WIN32 use this */
+extern unsigned char lcd_framebuffer[LCD_WIDTH][LCD_HEIGHT/8];
+
+/*** End Global variables ***/
+
+
+/*** Externed functions ***/
+#ifndef WIN32
+extern void screen_resized(int width, int height);
+
+/* From uibasic.c */
+extern void drawdots(int color, XPoint *points, int count);
+#endif
+
+/*** End Externed functions ***/
+
+
+
+/*** Begin Functions ***/
+void lcd_update()
+{
+#ifdef WIN32
+ int x, y;
+ if(hGUIWnd == NULL)
+ _endthread ();
+
+ for(x = 0; x < LCD_WIDTH; x++)
+ for(y = 0; y < LCD_HEIGHT; y++)
+ bitmap[y][x] = ((lcd_framebuffer[x][y/8] >> (y & 7)) & 1);
+
+ InvalidateRect (hGUIWnd, NULL, FALSE);
+
+ Sleep (50);
+#else
+ int x, y, bit;
+ int p=0, cp=0;
+
+ XPoint points[LCD_WIDTH * LCD_HEIGHT];
+ XPoint clearpoints[LCD_WIDTH * LCD_HEIGHT];
+
+ for(y=0; y<LCD_HEIGHT; y+=8) {
+ for(x=0; x<LCD_WIDTH; x++) {
+ if(lcd_framebuffer[x][y/8] || lcd_framebuffer_copy[x][y/8]) {
+ /* one or more bits/pixels are changed */
+ unsigned char diff =
+ lcd_framebuffer[x][y/8] ^ lcd_framebuffer_copy[x][y/8];
+
+ for(bit=0; bit<8; bit++) {
+ if(lcd_framebuffer[x][y/8]&(1<<bit)) {
+ /* set a dot */
+ points[p].x = x + MARGIN_X;
+ points[p].y = y+bit + MARGIN_Y;
+ p++;
+ }
+ else if(diff &(1<<bit)) {
+ /* clear a dot */
+ clearpoints[cp].x = x + MARGIN_X;
+ clearpoints[cp].y = y+bit + MARGIN_Y;
+ cp++; /* increase the point counter */
+ }
+ }
+ }
+ }
+ }
+
+ /* copy a huge block */
+ memcpy(lcd_framebuffer_copy, lcd_framebuffer, sizeof(lcd_framebuffer));
+
+ drawdots(0, &clearpoints[0], cp);
+ drawdots(1, &points[0], p);
+ XSync(dpy,False);
+
+#endif /* end WIN32*/
+}
+
+#ifdef WIN32
+void lcd_backlight(bool on)
+{
+ if(on) {
+ RGBQUAD blon = {UI_LCD_BGCOLORLIGHT, 0};
+ bmi.bmiColors[0] = blon;
+ } else {
+ RGBQUAD blon = {UI_LCD_BGCOLOR, 0};
+ bmi.bmiColors[0] = blon;
+ }
+ InvalidateRect (hGUIWnd, NULL, FALSE);
+}
+#endif
diff --git a/uisimulator/common/lcd-common.h b/uisimulator/common/lcd-common.h
new file mode 100644
index 0000000000..08a5bbd3bb
--- /dev/null
+++ b/uisimulator/common/lcd-common.h
@@ -0,0 +1,71 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Robert E. Hak <rhak@ramapo.edu>
+ *
+ * Windows Version Copyright (C) 2002 by Felix Arends
+ * X11 Version 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 "lcd.h"
+
+#ifdef WIN32
+ #ifndef __LCDWIN32_H__
+ #define __LCDWIN32_H__
+
+ #include "uisw32.h"
+ #include "lcd.h"
+
+ typedef struct
+ {
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[2];
+ } BITMAPINFO2;
+
+ #ifdef HAVE_LCD_BITMAP
+ /* the display */
+ extern unsigned char display[LCD_WIDTH][LCD_HEIGHT/8];
+ #else
+ #define DISP_X 112
+ #define DISP_Y 64
+ #endif /* HAVE_LCD_BITMAP */
+
+ /* the ui display */
+ extern char bitmap[LCD_HEIGHT][LCD_WIDTH];
+ /* bitmap information */
+ extern BITMAPINFO2 bmi;
+ #endif /* __LCDWIN32_H__ */
+
+#else
+ /* X11 */
+ #define MARGIN_X 3
+ #define MARGIN_Y 3
+
+#endif /* WIN32 */
+
+
+
+
+
+
+
+
+
+
+
+
+
+