aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/multiple/X/gdisp_lld.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/multiple/X/gdisp_lld.c')
-rw-r--r--drivers/multiple/X/gdisp_lld.c294
1 files changed, 0 insertions, 294 deletions
diff --git a/drivers/multiple/X/gdisp_lld.c b/drivers/multiple/X/gdisp_lld.c
deleted file mode 100644
index 13368bc1..00000000
--- a/drivers/multiple/X/gdisp_lld.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * This file is subject to the terms of the GFX License. If a copy of
- * the license was not distributed with this file, you can obtain one at:
- *
- * http://ugfx.org/license.html
- */
-
-/**
- * @file drivers/multiple/X/gdisp_lld.c
- * @brief GDISP Graphics Driver subsystem low level driver source for X.
- */
-
-#include "gfx.h"
-
-#if GFX_USE_GDISP
-
-/**
- * Our color model - Default or 24 bit only.
- *
- * At present we don't define this as we don't need to.
- * It may however be useful later if we implement bitblits.
- * As this may be dead code we don't include it in gdisp/options.h
- */
-#ifndef GDISP_FORCE_24BIT
- #define GDISP_FORCE_24BIT FALSE
-#endif
-
-#if GINPUT_NEED_MOUSE
- /* Include mouse support code */
- #include "ginput/lld/mouse.h"
-#endif
-
-/* Include the emulation code for things we don't support */
-#include "gdisp/lld/emulation.c"
-
-#include <X11/Xlib.h>
-#include <X11/Xutil.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#ifndef GDISP_SCREEN_HEIGHT
- #define GDISP_SCREEN_HEIGHT 480
-#endif
-#ifndef GDISP_SCREEN_WIDTH
- #define GDISP_SCREEN_WIDTH 640
-#endif
-
-Display *dis;
-int scr;
-Window win;
-Pixmap pix;
-XEvent evt;
-GC gc;
-Colormap cmap;
-XVisualInfo vis;
-int depth;
-#if GINPUT_NEED_MOUSE
- coord_t mousex, mousey;
- uint16_t mousebuttons;
-#endif
-
-static void ProcessEvent(void) {
- XColor col;
-
- switch(evt.type) {
- case Expose:
- XCopyArea(dis, pix, win, gc,
- evt.xexpose.x, evt.xexpose.y,
- evt.xexpose.width, evt.xexpose.height,
- evt.xexpose.x, evt.xexpose.y);
- break;
-#if GINPUT_NEED_MOUSE
- case ButtonPress:
- mousex = evt.xbutton.x;
- mousey = evt.xbutton.y;
- switch(evt.xbutton.button){
- case 1: mousebuttons |= GINPUT_MOUSE_BTN_LEFT; break;
- case 2: mousebuttons |= GINPUT_MOUSE_BTN_MIDDLE; break;
- case 3: mousebuttons |= GINPUT_MOUSE_BTN_RIGHT; break;
- case 4: mousebuttons |= GINPUT_MOUSE_BTN_4; break;
- }
- #if GINPUT_MOUSE_POLL_PERIOD == TIME_INFINITE
- ginputMouseWakeup();
- #endif
- break;
- case ButtonRelease:
- mousex = evt.xbutton.x;
- mousey = evt.xbutton.y;
- switch(evt.xbutton.button){
- case 1: mousebuttons &= ~GINPUT_MOUSE_BTN_LEFT; break;
- case 2: mousebuttons &= ~GINPUT_MOUSE_BTN_MIDDLE; break;
- case 3: mousebuttons &= ~GINPUT_MOUSE_BTN_RIGHT; break;
- case 4: mousebuttons &= ~GINPUT_MOUSE_BTN_4; break;
- }
- #if GINPUT_MOUSE_POLL_PERIOD == TIME_INFINITE
- ginputMouseWakeup();
- #endif
- break;
- case MotionNotify:
- mousex = evt.xmotion.x;
- mousey = evt.xmotion.y;
- #if GINPUT_MOUSE_POLL_PERIOD == TIME_INFINITE
- ginputMouseWakeup();
- #endif
- break;
-#endif
- }
-}
-
-/* this is the X11 thread which keeps track of all events */
-static DECLARE_THREAD_STACK(waXThread, 1024);
-static DECLARE_THREAD_FUNCTION(ThreadX, arg) {
- (void)arg;
-
- while(1) {
- gfxSleepMilliseconds(100);
- while(XPending(dis)) {
- XNextEvent(dis, &evt);
- ProcessEvent();
- }
- }
- return 0;
-}
-
-static int FatalXIOError(Display *d) {
- (void) d;
-
- /* The window has closed */
- fprintf(stderr, "GFX Window closed!\n");
- exit(0);
-}
-
-bool_t gdisp_lld_init(void)
-{
- XSizeHints *pSH;
- XSetWindowAttributes xa;
- XTextProperty WindowTitle;
- char * WindowTitleText;
- gfxThreadHandle hth;
-
- #if GFX_USE_OS_LINUX || GFX_USE_OS_OSX
- XInitThreads();
- #endif
-
- dis = XOpenDisplay(NULL);
- scr = DefaultScreen(dis);
-
- #if GDISP_FORCE_24BIT
- if (!XMatchVisualInfo(dis, scr, 24, TrueColor, &vis)) {
- fprintf(stderr, "Your display has no TrueColor mode\n");
- XCloseDisplay(dis);
- return FALSE;
- }
- cmap = XCreateColormap(dis, RootWindow(dis, scr),
- vis.visual, AllocNone);
- #else
- vis.visual = CopyFromParent;
- vis.depth = DefaultDepth(dis, scr);
- cmap = DefaultColormap(dis, scr);
- #endif
- fprintf(stderr, "Running GFX Window in %d bit color\n", vis.depth);
-
- xa.colormap = cmap;
- xa.border_pixel = 0xFFFFFF;
- xa.background_pixel = 0x000000;
-
- win = XCreateWindow(dis, RootWindow(dis, scr), 16, 16,
- GDISP_SCREEN_WIDTH, GDISP_SCREEN_HEIGHT,
- 0, vis.depth, InputOutput, vis.visual,
- CWBackPixel|CWColormap|CWBorderPixel, &xa);
- XSync(dis, TRUE);
-
- WindowTitleText = "GFX";
- XStringListToTextProperty(&WindowTitleText, 1, &WindowTitle);
- XSetWMName(dis, win, &WindowTitle);
- XSetWMIconName(dis, win, &WindowTitle);
- XSync(dis, TRUE);
-
- pSH = XAllocSizeHints();
- pSH->flags = PSize | PMinSize | PMaxSize;
- pSH->min_width = pSH->max_width = pSH->base_width = GDISP_SCREEN_WIDTH;
- pSH->min_height = pSH->max_height = pSH->base_height = GDISP_SCREEN_HEIGHT;
- XSetWMNormalHints(dis, win, pSH);
- XFree(pSH);
- XSync(dis, TRUE);
-
- pix = XCreatePixmap(dis, win,
- GDISP_SCREEN_WIDTH, GDISP_SCREEN_HEIGHT, vis.depth);
- XSync(dis, TRUE);
-
- gc = XCreateGC(dis, win, 0, 0);
- XSetBackground(dis, gc, BlackPixel(dis, scr));
- XSync(dis, TRUE);
-
- XSelectInput(dis, win, StructureNotifyMask);
- XMapWindow(dis, win);
- do { XNextEvent(dis, &evt); } while (evt.type != MapNotify);
-
- /* start the X11 thread */
- XSetIOErrorHandler(FatalXIOError);
- XSelectInput(dis, win,
- ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask);
-
- if (!(hth = gfxThreadCreate(waXThread, sizeof(waXThread), HIGH_PRIORITY, ThreadX, 0))) {
- fprintf(stderr, "Cannot start X Thread\n");
- XCloseDisplay(dis);
- exit(0);
- }
- #if GFX_USE_OS_LINUX || GFX_USE_OS_OSX
- pthread_detach(hth);
- #endif
- gfxThreadClose(hth);
-
- /* Initialise the GDISP structure to match */
- GDISP.Orientation = GDISP_ROTATE_0;
- GDISP.Powermode = powerOn;
- GDISP.Backlight = 100;
- GDISP.Contrast = 50;
- GDISP.Width = GDISP_SCREEN_WIDTH;
- GDISP.Height = GDISP_SCREEN_HEIGHT;
- #if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
- GDISP.clipx0 = 0;
- GDISP.clipy0 = 0;
- GDISP.clipx1 = GDISP.Width;
- GDISP.clipy1 = GDISP.Height;
- #endif
- return TRUE;
-}
-
-void gdisp_lld_draw_pixel(coord_t x, coord_t y, color_t color)
-{
- XColor col;
-
- #if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
- // Clip pre orientation change
- if (x < GDISP.clipx0 || y < GDISP.clipy0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
- #endif
-
- col.red = RED_OF(color) << 8;
- col.green = GREEN_OF(color) << 8;
- col.blue = BLUE_OF(color) << 8;
- XAllocColor(dis, cmap, &col);
- XSetForeground(dis, gc, col.pixel);
- XDrawPoint(dis, pix, gc, (int)x, (int)y );
- XDrawPoint(dis, win, gc, (int)x, (int)y );
- XFlush(dis);
-}
-
-void gdisp_lld_fill_area(coord_t x, coord_t y, coord_t cx, coord_t cy, color_t color) {
- XColor col;
-
- #if GDISP_NEED_VALIDATION || GDISP_NEED_CLIP
- // Clip pre orientation change
- if (x < GDISP.clipx0) { cx -= GDISP.clipx0 - x; x = GDISP.clipx0; }
- if (y < GDISP.clipy0) { cy -= GDISP.clipy0 - y; y = GDISP.clipy0; }
- if (cx <= 0 || cy <= 0 || x >= GDISP.clipx1 || y >= GDISP.clipy1) return;
- if (x+cx > GDISP.clipx1) cx = GDISP.clipx1 - x;
- if (y+cy > GDISP.clipy1) cy = GDISP.clipy1 - y;
- #endif
-
- col.red = RED_OF(color) << 8;
- col.green = GREEN_OF(color) << 8;
- col.blue = BLUE_OF(color) << 8;
- XAllocColor(dis, cmap, &col);
- XSetForeground(dis, gc, col.pixel);
- XFillRectangle(dis, pix, gc, x, y, cx, cy);
- XFillRectangle(dis, win, gc, x, y, cx, cy);
- XFlush(dis);
-}
-
-// Start of Bitblit code
-//XImage bitmap;
-//pixel_t *bits;
-// bits = malloc(vis.depth * GDISP_SCREEN_WIDTH * GDISP_SCREEN_HEIGHT);
-// bitmap = XCreateImage(dis, vis, vis.depth, ZPixmap,
-// 0, bits, GDISP_SCREEN_WIDTH, GDISP_SCREEN_HEIGHT,
-// 0, 0);
-
-#if GINPUT_NEED_MOUSE
-
- void ginput_lld_mouse_init(void) {}
-
- void ginput_lld_mouse_get_reading(MouseReading *pt) {
- pt->x = mousex;
- pt->y = mousey;
- pt->z = (mousebuttons & GINPUT_MOUSE_BTN_LEFT) ? 100 : 0;
- pt->buttons = mousebuttons;
- }
-
-#endif /* GINPUT_NEED_MOUSE */
-
-#endif /* GFX_USE_GDISP */
-/** @} */
-