aboutsummaryrefslogtreecommitdiffstats
path: root/drv_X11.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2005-05-08 04:32:45 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2005-05-08 04:32:45 +0000
commitdbf5d92605a9db10e3e3cb154d03a515c5d5c5af (patch)
tree501d5dda3ce90fe924b893e487d9ef9f0683382b /drv_X11.c
parenta1c471e9fb7cadb68bb182ab2e9715a0aa092386 (diff)
downloadlcd4linux-dbf5d92605a9db10e3e3cb154d03a515c5d5c5af.tar.gz
[lcd4linux @ 2005-05-08 04:32:43 by reinelt]
CodingStyle added and applied git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@547 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'drv_X11.c')
-rw-r--r--drv_X11.c525
1 files changed, 269 insertions, 256 deletions
diff --git a/drv_X11.c b/drv_X11.c
index 3b79334..326df6a 100644
--- a/drv_X11.c
+++ b/drv_X11.c
@@ -1,4 +1,4 @@
-/* $Id: drv_X11.c,v 1.10 2005/01/18 06:30:23 reinelt Exp $
+/* $Id: drv_X11.c,v 1.11 2005/05/08 04:32:44 reinelt Exp $
*
* new style X11 Driver for LCD4Linux
*
@@ -26,6 +26,9 @@
*
*
* $Log: drv_X11.c,v $
+ * Revision 1.11 2005/05/08 04:32:44 reinelt
+ * CodingStyle added and applied
+ *
* Revision 1.10 2005/01/18 06:30:23 reinelt
* added (C) to all copyright statements
*
@@ -107,19 +110,19 @@
#include <dmalloc.h>
#endif
-static char Name[]="X11";
+static char Name[] = "X11";
-static char *fg_col,*bg_col,*hg_col;
+static char *fg_col, *bg_col, *hg_col;
-static int pixel = -1; /* pointsize in pixel */
-static int pgap = 0; /* gap between points */
-static int rgap = 0; /* row gap between lines */
-static int cgap = 0; /* column gap between characters */
-static int border = 0; /* window border */
+static int pixel = -1; /* pointsize in pixel */
+static int pgap = 0; /* gap between points */
+static int rgap = 0; /* row gap between lines */
+static int cgap = 0; /* column gap between characters */
+static int border = 0; /* window border */
-static int dimx, dimy; /* total window dimension in pixel */
+static int dimx, dimy; /* total window dimension in pixel */
-static unsigned char *drv_X11_FB=NULL;
+static unsigned char *drv_X11_FB = NULL;
static Display *dp;
static int sc, dd;
@@ -137,204 +140,214 @@ static Pixmap pm;
static void drv_X11_blit(const int row, const int col, const int height, const int width)
{
- int r, c;
- int dirty = 0;
-
- for (r=row; r<row+height && r<DROWS; r++) {
- int y = border + (r/YRES)*rgap + r*(pixel+pgap);
- for (c=col; c<col+width && c<DCOLS; c++) {
- int x = border + (c/XRES)*cgap + c*(pixel+pgap);
- unsigned char p = drv_generic_graphic_FB[r*LCOLS+c];
- if (drv_X11_FB[r*DCOLS+c] != p) {
- XFillRectangle( dp, w, p? fg_gc:hg_gc, x, y, pixel, pixel);
- drv_X11_FB[r*DCOLS+c] = p;
- dirty=1;
- }
+ int r, c;
+ int dirty = 0;
+
+ for (r = row; r < row + height && r < DROWS; r++) {
+ int y = border + (r / YRES) * rgap + r * (pixel + pgap);
+ for (c = col; c < col + width && c < DCOLS; c++) {
+ int x = border + (c / XRES) * cgap + c * (pixel + pgap);
+ unsigned char p = drv_generic_graphic_FB[r * LCOLS + c];
+ if (drv_X11_FB[r * DCOLS + c] != p) {
+ XFillRectangle(dp, w, p ? fg_gc : hg_gc, x, y, pixel, pixel);
+ drv_X11_FB[r * DCOLS + c] = p;
+ dirty = 1;
+ }
+ }
+ }
+ if (dirty) {
+ XSync(dp, False);
}
- }
- if (dirty) {
- XSync(dp, False);
- }
}
static void drv_X11_expose(const int x, const int y, const int width, const int height)
{
- /*
- * theory of operation:
- * instead of the old, fully-featured but complicated update
- * region calculation, we do an update of the whole display,
- * but check before every pixel if the pixel region is inside
- * the update region.
- */
-
- int r, c;
- int x0, y0;
- int x1, y1;
-
- x0 = x-pixel;
- x1 = x+pixel+width;
- y0 = y-pixel;
- y1 = y+pixel+height;
-
- for (r=0; r<DROWS; r++) {
- int yc = border + (r/YRES)*rgap + r*(pixel+pgap);
- if (yc<y0 || yc>y1) continue;
- for (c=0; c<DCOLS; c++) {
- int xc = border + (c/XRES)*cgap + c*(pixel+pgap);
- if (xc<x0 || xc>x1) continue;
- XFillRectangle( dp, w, drv_generic_graphic_FB[r*LCOLS+c]? fg_gc:hg_gc, xc, yc, pixel, pixel);
+ /*
+ * theory of operation:
+ * instead of the old, fully-featured but complicated update
+ * region calculation, we do an update of the whole display,
+ * but check before every pixel if the pixel region is inside
+ * the update region.
+ */
+
+ int r, c;
+ int x0, y0;
+ int x1, y1;
+
+ x0 = x - pixel;
+ x1 = x + pixel + width;
+ y0 = y - pixel;
+ y1 = y + pixel + height;
+
+ for (r = 0; r < DROWS; r++) {
+ int yc = border + (r / YRES) * rgap + r * (pixel + pgap);
+ if (yc < y0 || yc > y1)
+ continue;
+ for (c = 0; c < DCOLS; c++) {
+ int xc = border + (c / XRES) * cgap + c * (pixel + pgap);
+ if (xc < x0 || xc > x1)
+ continue;
+ XFillRectangle(dp, w, drv_generic_graphic_FB[r * LCOLS + c] ? fg_gc : hg_gc, xc, yc, pixel, pixel);
+ }
}
- }
- XSync(dp, False);
+ XSync(dp, False);
}
-static void drv_X11_timer (__attribute__((unused)) void *notused)
+static void drv_X11_timer( __attribute__ ((unused))
+ void *notused)
{
- XEvent ev;
-
- if (XCheckWindowEvent(dp, w, ExposureMask, &ev)==0) return;
- if (ev.type==Expose) {
- drv_X11_expose (ev.xexpose.x, ev.xexpose.y, ev.xexpose.width, ev.xexpose.height);
- }
+ XEvent ev;
+
+ if (XCheckWindowEvent(dp, w, ExposureMask, &ev) == 0)
+ return;
+ if (ev.type == Expose) {
+ drv_X11_expose(ev.xexpose.x, ev.xexpose.y, ev.xexpose.width, ev.xexpose.height);
+ }
}
-static int drv_X11_start (const char *section)
+static int drv_X11_start(const char *section)
{
- char *s;
- XSetWindowAttributes wa;
- XSizeHints sh;
- XColor dummy;
- XEvent ev;
-
-
- /* read display size from config */
- if (sscanf(s=cfg_get(section, "Size", "120x32"), "%dx%d", &DCOLS, &DROWS)!=2 || DCOLS<1 || DROWS<1) {
- error ("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
+ char *s;
+ XSetWindowAttributes wa;
+ XSizeHints sh;
+ XColor dummy;
+ XEvent ev;
+
+
+ /* read display size from config */
+ if (sscanf(s = cfg_get(section, "Size", "120x32"), "%dx%d", &DCOLS, &DROWS) != 2 || DCOLS < 1 || DROWS < 1) {
+ error("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
+ free(s);
+ return -1;
+ }
free(s);
- return -1;
- }
- free(s);
-
- if (sscanf(s=cfg_get(section, "font", "5x8"), "%dx%d", &XRES, &YRES)!=2 || XRES<1|| YRES<1) {
- error ("%s: bad %s.font '%s' from %s", Name, section, s, cfg_source());
+
+ if (sscanf(s = cfg_get(section, "font", "5x8"), "%dx%d", &XRES, &YRES) != 2 || XRES < 1 || YRES < 1) {
+ error("%s: bad %s.font '%s' from %s", Name, section, s, cfg_source());
+ free(s);
+ return -1;
+ }
free(s);
- return -1;
- }
- free(s);
-
- if (sscanf(s=cfg_get(section, "pixel", "4+1"), "%d+%d", &pixel, &pgap)!=2 || pixel<1 || pgap<0) {
- error ("%s: bad %s.pixel '%s' from %s", Name, section, s, cfg_source());
+
+ if (sscanf(s = cfg_get(section, "pixel", "4+1"), "%d+%d", &pixel, &pgap) != 2 || pixel < 1 || pgap < 0) {
+ error("%s: bad %s.pixel '%s' from %s", Name, section, s, cfg_source());
+ free(s);
+ return -1;
+ }
free(s);
- return -1;
- }
- free(s);
-
- if (sscanf(s=cfg_get(section, "gap", "-1x-1"), "%dx%d", &cgap, &rgap)!=2 || cgap<-1 || rgap<-1) {
- error ("%s: bad %s.gap '%s' from %s", Name, section, s, cfg_source());
+
+ if (sscanf(s = cfg_get(section, "gap", "-1x-1"), "%dx%d", &cgap, &rgap) != 2 || cgap < -1 || rgap < -1) {
+ error("%s: bad %s.gap '%s' from %s", Name, section, s, cfg_source());
+ free(s);
+ return -1;
+ }
free(s);
- return -1;
- }
- free(s);
-
- if (rgap<0) rgap=pixel+pgap;
- if (cgap<0) cgap=pixel+pgap;
-
- if (cfg_number(section, "border", 0, 0, -1, &border)<0) return -1;
-
- fg_col = cfg_get(section, "foreground", "#000000");
- bg_col = cfg_get(section, "background", "#80d000");
- hg_col = cfg_get(section, "halfground", "#70c000");
- if (*fg_col=='\\') fg_col++;
- if (*bg_col=='\\') bg_col++;
- if (*hg_col=='\\') hg_col++;
-
-
- drv_X11_FB = malloc(DCOLS*DROWS);
- if (drv_X11_FB==NULL) {
- error ("%s: framebuffer could not be allocated: malloc() failed", Name);
- return -1;
- }
-
- /* init with 255 so all 'halfground' pixels will be drawn */
- memset(drv_X11_FB, 255, DCOLS*DROWS*sizeof(*drv_X11_FB));
-
- if ((dp=XOpenDisplay(NULL))==NULL) {
- error ("%s: can't open display", Name);
- return -1;
- }
-
- sc = DefaultScreen(dp);
- fg_gc = DefaultGC(dp, sc);
- vi = DefaultVisual(dp, sc);
- dd = DefaultDepth(dp, sc);
- rw = DefaultRootWindow(dp);
- cm = DefaultColormap(dp, sc);
-
- if (XAllocNamedColor(dp, cm, fg_col, &fg_xc, &dummy) == False) {
- error ("%s: can't alloc foreground color '%s'", Name, fg_col);
- return -1;
- }
-
- if (XAllocNamedColor(dp, cm, bg_col, &bg_xc, &dummy)==False) {
- error ("%s: can't alloc background color '%s'", Name, bg_col);
- return -1;
- }
-
- if (XAllocNamedColor(dp, cm, hg_col, &hg_xc, &dummy)==False) {
- error ("%s: can't alloc halfground color '%s'", Name, hg_col);
- return -1;
- }
-
- dimx = DCOLS*pixel + (DCOLS-1)*pgap + (DCOLS/XRES-1)*cgap;
- dimy = DROWS*pixel + (DROWS-1)*pgap + (DROWS/YRES-1)*rgap;
-
- wa.event_mask=ExposureMask;
-
- w = XCreateWindow(dp, rw, 0, 0, dimx+2*border, dimy+2*border, 0, 0, InputOutput, vi, CWEventMask, &wa);
-
- pm = XCreatePixmap(dp, w, dimx, dimy, dd);
-
- sh.min_width = sh.max_width = dimx+2*border;
- sh.min_height = sh.max_height = dimy+2*border;
- sh.flags = PPosition|PSize|PMinSize|PMaxSize;
-
- XSetWMProperties(dp, w, NULL, NULL, NULL, 0, &sh, NULL, NULL);
-
-
- XSetForeground(dp, fg_gc, fg_xc.pixel);
- XSetBackground(dp, fg_gc, bg_xc.pixel);
-
- bg_gc = XCreateGC(dp, w, 0, NULL);
- XSetForeground(dp, bg_gc, bg_xc.pixel);
- XSetBackground(dp, bg_gc, fg_xc.pixel);
-
- hg_gc = XCreateGC(dp, w, 0, NULL);
- XSetForeground(dp, hg_gc, hg_xc.pixel);
- XSetBackground(dp, hg_gc, fg_xc.pixel);
-
- XFillRectangle(dp, pm, bg_gc, 0, 0, dimx+2*border, dimy+2*border);
- XSetWindowBackground(dp, w, bg_xc.pixel);
- XClearWindow(dp, w);
-
- XStoreName(dp, w, "LCD4Linux");
- XMapWindow(dp, w);
-
- XFlush(dp);
-
- while(1) {
- XNextEvent(dp,&ev);
- if (ev.type==Expose && ev.xexpose.count==0)
- break;
- }
-
- /* regularly process X events */
- /* Fixme: make 20msec configurable */
- timer_add (drv_X11_timer, NULL, 20, 0);
-
- return 0;
+
+ if (rgap < 0)
+ rgap = pixel + pgap;
+ if (cgap < 0)
+ cgap = pixel + pgap;
+
+ if (cfg_number(section, "border", 0, 0, -1, &border) < 0)
+ return -1;
+
+ fg_col = cfg_get(section, "foreground", "#000000");
+ bg_col = cfg_get(section, "background", "#80d000");
+ hg_col = cfg_get(section, "halfground", "#70c000");
+ if (*fg_col == '\\')
+ fg_col++;
+ if (*bg_col == '\\')
+ bg_col++;
+ if (*hg_col == '\\')
+ hg_col++;
+
+
+ drv_X11_FB = malloc(DCOLS * DROWS);
+ if (drv_X11_FB == NULL) {
+ error("%s: framebuffer could not be allocated: malloc() failed", Name);
+ return -1;
+ }
+
+ /* init with 255 so all 'halfground' pixels will be drawn */
+ memset(drv_X11_FB, 255, DCOLS * DROWS * sizeof(*drv_X11_FB));
+
+ if ((dp = XOpenDisplay(NULL)) == NULL) {
+ error("%s: can't open display", Name);
+ return -1;
+ }
+
+ sc = DefaultScreen(dp);
+ fg_gc = DefaultGC(dp, sc);
+ vi = DefaultVisual(dp, sc);
+ dd = DefaultDepth(dp, sc);
+ rw = DefaultRootWindow(dp);
+ cm = DefaultColormap(dp, sc);
+
+ if (XAllocNamedColor(dp, cm, fg_col, &fg_xc, &dummy) == False) {
+ error("%s: can't alloc foreground color '%s'", Name, fg_col);
+ return -1;
+ }
+
+ if (XAllocNamedColor(dp, cm, bg_col, &bg_xc, &dummy) == False) {
+ error("%s: can't alloc background color '%s'", Name, bg_col);
+ return -1;
+ }
+
+ if (XAllocNamedColor(dp, cm, hg_col, &hg_xc, &dummy) == False) {
+ error("%s: can't alloc halfground color '%s'", Name, hg_col);
+ return -1;
+ }
+
+ dimx = DCOLS * pixel + (DCOLS - 1) * pgap + (DCOLS / XRES - 1) * cgap;
+ dimy = DROWS * pixel + (DROWS - 1) * pgap + (DROWS / YRES - 1) * rgap;
+
+ wa.event_mask = ExposureMask;
+
+ w = XCreateWindow(dp, rw, 0, 0, dimx + 2 * border, dimy + 2 * border, 0, 0, InputOutput, vi, CWEventMask, &wa);
+
+ pm = XCreatePixmap(dp, w, dimx, dimy, dd);
+
+ sh.min_width = sh.max_width = dimx + 2 * border;
+ sh.min_height = sh.max_height = dimy + 2 * border;
+ sh.flags = PPosition | PSize | PMinSize | PMaxSize;
+
+ XSetWMProperties(dp, w, NULL, NULL, NULL, 0, &sh, NULL, NULL);
+
+
+ XSetForeground(dp, fg_gc, fg_xc.pixel);
+ XSetBackground(dp, fg_gc, bg_xc.pixel);
+
+ bg_gc = XCreateGC(dp, w, 0, NULL);
+ XSetForeground(dp, bg_gc, bg_xc.pixel);
+ XSetBackground(dp, bg_gc, fg_xc.pixel);
+
+ hg_gc = XCreateGC(dp, w, 0, NULL);
+ XSetForeground(dp, hg_gc, hg_xc.pixel);
+ XSetBackground(dp, hg_gc, fg_xc.pixel);
+
+ XFillRectangle(dp, pm, bg_gc, 0, 0, dimx + 2 * border, dimy + 2 * border);
+ XSetWindowBackground(dp, w, bg_xc.pixel);
+ XClearWindow(dp, w);
+
+ XStoreName(dp, w, "LCD4Linux");
+ XMapWindow(dp, w);
+
+ XFlush(dp);
+
+ while (1) {
+ XNextEvent(dp, &ev);
+ if (ev.type == Expose && ev.xexpose.count == 0)
+ break;
+ }
+
+ /* regularly process X events */
+ /* Fixme: make 20msec configurable */
+ timer_add(drv_X11_timer, NULL, 20, 0);
+
+ return 0;
}
@@ -362,86 +375,86 @@ static int drv_X11_start (const char *section)
/* list models */
-int drv_X11_list (void)
+int drv_X11_list(void)
{
- printf ("any");
- return 0;
+ printf("any");
+ return 0;
}
/* initialize driver & display */
-int drv_X11_init (const char *section, const int quiet)
+int drv_X11_init(const char *section, const int quiet)
{
- WIDGET_CLASS wc;
- int ret;
-
- /* real worker functions */
- drv_generic_graphic_real_blit = drv_X11_blit;
-
- /* start display */
- if ((ret=drv_X11_start (section))!=0)
- return ret;
-
- /* initialize generic graphic driver */
- if ((ret=drv_generic_graphic_init(section, Name))!=0)
- return ret;
-
- /* initially expose window */
- drv_generic_graphic_clear();
- drv_X11_expose (0, 0, dimx+2*border, dimy+2*border);
-
- if (!quiet) {
- char buffer[40];
- qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
- if (drv_generic_graphic_greet (buffer, NULL)) {
- sleep (3);
- drv_generic_graphic_clear();
+ WIDGET_CLASS wc;
+ int ret;
+
+ /* real worker functions */
+ drv_generic_graphic_real_blit = drv_X11_blit;
+
+ /* start display */
+ if ((ret = drv_X11_start(section)) != 0)
+ return ret;
+
+ /* initialize generic graphic driver */
+ if ((ret = drv_generic_graphic_init(section, Name)) != 0)
+ return ret;
+
+ /* initially expose window */
+ drv_generic_graphic_clear();
+ drv_X11_expose(0, 0, dimx + 2 * border, dimy + 2 * border);
+
+ if (!quiet) {
+ char buffer[40];
+ qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
+ if (drv_generic_graphic_greet(buffer, NULL)) {
+ sleep(3);
+ drv_generic_graphic_clear();
+ }
}
- }
-
- /* register text widget */
- wc=Widget_Text;
- wc.draw=drv_generic_graphic_draw;
- widget_register(&wc);
-
- /* register icon widget */
- wc=Widget_Icon;
- wc.draw=drv_generic_graphic_icon_draw;
- widget_register(&wc);
-
- /* register bar widget */
- wc=Widget_Bar;
- wc.draw=drv_generic_graphic_bar_draw;
- widget_register(&wc);
-
- /* register plugins */
- /* none at the moment... */
-
-
- return 0;
+
+ /* register text widget */
+ wc = Widget_Text;
+ wc.draw = drv_generic_graphic_draw;
+ widget_register(&wc);
+
+ /* register icon widget */
+ wc = Widget_Icon;
+ wc.draw = drv_generic_graphic_icon_draw;
+ widget_register(&wc);
+
+ /* register bar widget */
+ wc = Widget_Bar;
+ wc.draw = drv_generic_graphic_bar_draw;
+ widget_register(&wc);
+
+ /* register plugins */
+ /* none at the moment... */
+
+
+ return 0;
}
/* close driver & display */
-int drv_X11_quit (const __attribute__((unused)) int quiet) {
-
- info("%s: shutting down.", Name);
- drv_generic_graphic_quit();
-
- if (drv_X11_FB) {
- free (drv_X11_FB);
- drv_X11_FB=NULL;
- }
-
- return (0);
+int drv_X11_quit(const __attribute__ ((unused))
+ int quiet)
+{
+
+ info("%s: shutting down.", Name);
+ drv_generic_graphic_quit();
+
+ if (drv_X11_FB) {
+ free(drv_X11_FB);
+ drv_X11_FB = NULL;
+ }
+
+ return (0);
}
DRIVER drv_X11 = {
- name: Name,
- list: drv_X11_list,
- init: drv_X11_init,
- quit: drv_X11_quit,
+ name:Name,
+ list:drv_X11_list,
+ init:drv_X11_init,
+ quit:drv_X11_quit,
};
-
-