From 1e7a478196bd91595672def1e8fe60a9a9b88365 Mon Sep 17 00:00:00 2001 From: reinelt <> Date: Wed, 8 Feb 2006 04:55:05 +0000 Subject: [lcd4linux @ 2006-02-08 04:55:03 by reinelt] moved widget registration to drv_generic_graphic --- drv_G15.c | 38 ++++++---------------------- drv_Image.c | 37 ++++----------------------- drv_LPH7508.c | 38 ++++------------------------ drv_LUIse.c | 36 ++++---------------------- drv_Sample.c | 24 ++++-------------- drv_T6963.c | 37 ++++----------------------- drv_X11.c | 44 ++++---------------------------- drv_generic_graphic.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ drv_serdisplib.c | 37 ++++----------------------- layout.c | 19 +++++++++++++- lcd4linux.conf.sample | 16 +++++++----- widget_image.c | 60 +++++++++++++++++++++++++++++++++++++++---- widget_image.h | 13 ++++++++-- 13 files changed, 206 insertions(+), 263 deletions(-) diff --git a/drv_G15.c b/drv_G15.c index c4c5bbb..6242436 100644 --- a/drv_G15.c +++ b/drv_G15.c @@ -1,4 +1,4 @@ -/* $Id: drv_G15.c,v 1.4 2006/01/30 06:25:49 reinelt Exp $ +/* $Id: drv_G15.c,v 1.5 2006/02/08 04:55:03 reinelt Exp $ * * Driver for Logitech G-15 keyboard LCD screen * @@ -24,6 +24,9 @@ * * * $Log: drv_G15.c,v $ + * Revision 1.5 2006/02/08 04:55:03 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.4 2006/01/30 06:25:49 reinelt * added CVS Revision * @@ -60,10 +63,6 @@ #include "qprintf.h" #include "udelay.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -272,17 +271,6 @@ static int drv_G15_start(const char *section) /* none */ -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_text_draw(W) */ -/* using drv_generic_text_icon_draw(W) */ -/* using drv_generic_text_bar_draw(W) */ -/* using drv_generic_gpio_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -299,10 +287,9 @@ int drv_G15_list(void) /* initialize driver & display */ int drv_G15_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.4 $"); + info("%s: %s", Name, "$Revision: 1.5 $"); DEBUG("entered"); @@ -327,20 +314,9 @@ int drv_G15_init(const char *section, const int quiet) } } - /* 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 plugins */ + /* none at the moment... */ - /* register bar widget */ - wc = Widget_Bar; - wc.draw = drv_generic_graphic_bar_draw; - widget_register(&wc); DEBUG("left"); diff --git a/drv_Image.c b/drv_Image.c index 8d68e18..0ee912b 100644 --- a/drv_Image.c +++ b/drv_Image.c @@ -1,4 +1,4 @@ -/* $Id: drv_Image.c,v 1.16 2006/02/06 06:29:30 reinelt Exp $ +/* $Id: drv_Image.c,v 1.17 2006/02/08 04:55:04 reinelt Exp $ * * new style Image (PPM/PNG) Driver for LCD4Linux * @@ -23,6 +23,9 @@ * * * $Log: drv_Image.c,v $ + * Revision 1.17 2006/02/08 04:55:04 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.16 2006/02/06 06:29:30 reinelt * Image driver uses RGBA * @@ -124,10 +127,6 @@ #include "timer.h" #include "qprintf.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -460,16 +459,6 @@ static int drv_IMG_start(const char *section) /* none at the moment... */ -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_graphic_draw(W) */ -/* using drv_generic_graphic_icon_draw(W) */ -/* using drv_generic_graphic_bar_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -487,10 +476,9 @@ int drv_IMG_list(void) int drv_IMG_init(const char *section, const __attribute__ ((unused)) int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.16 $"); + info("%s: %s", Name, "$Revision: 1.17 $"); /* real worker functions */ drv_generic_graphic_real_blit = drv_IMG_blit; @@ -503,21 +491,6 @@ int drv_IMG_init(const char *section, const __attribute__ ((unused)) if ((ret = drv_generic_graphic_init(section, Name)) != 0) return ret; - /* 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... */ diff --git a/drv_LPH7508.c b/drv_LPH7508.c index f49b9a5..cd53c8e 100644 --- a/drv_LPH7508.c +++ b/drv_LPH7508.c @@ -1,4 +1,4 @@ -/* $Id: drv_LPH7508.c,v 1.8 2006/01/30 06:25:53 reinelt Exp $ +/* $Id: drv_LPH7508.c,v 1.9 2006/02/08 04:55:04 reinelt Exp $ * * driver for Pollin LPH7508 * @@ -23,6 +23,9 @@ * * * $Log: drv_LPH7508.c,v $ + * Revision 1.9 2006/02/08 04:55:04 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.8 2006/01/30 06:25:53 reinelt * added CVS Revision * @@ -73,10 +76,6 @@ #include "qprintf.h" #include "udelay.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" #include "drv_generic_gpio.h" @@ -465,17 +464,6 @@ static void plugin_contrast(RESULT * result, RESULT * arg1) } -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_graphic_draw(W) */ -/* using drv_generic_graphic_icon_draw(W) */ -/* using drv_generic_graphic_bar_draw(W) */ -/* using drv_generic_gpio_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -492,10 +480,9 @@ int drv_L7_list(void) /* initialize driver & display */ int drv_L7_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.8 $"); + info("%s: %s", Name, "$Revision: 1.9 $"); /* real worker functions */ drv_generic_graphic_real_blit = drv_L7_blit; @@ -522,21 +509,6 @@ int drv_L7_init(const char *section, const int quiet) } } - /* 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 */ AddFunction("LCD::contrast", 1, plugin_contrast); diff --git a/drv_LUIse.c b/drv_LUIse.c index 7814791..5548de9 100644 --- a/drv_LUIse.c +++ b/drv_LUIse.c @@ -1,4 +1,4 @@ -/* $Id: drv_LUIse.c,v 1.3 2006/01/30 06:25:53 reinelt Exp $ +/* $Id: drv_LUIse.c,v 1.4 2006/02/08 04:55:05 reinelt Exp $ * * LUIse lcd4linux driver * @@ -23,6 +23,9 @@ * * * $Log: drv_LUIse.c,v $ + * Revision 1.4 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.3 2006/01/30 06:25:53 reinelt * added CVS Revision * @@ -57,10 +60,6 @@ #include "qprintf.h" #include "udelay.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -266,15 +265,6 @@ static void plugin_backlight(RESULT * result, RESULT * arg1) SetResult(&result, R_NUMBER, &backlight); } -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_text_draw(W) */ -/* using drv_generic_text_icon_draw(W) */ -/* using drv_generic_text_bar_draw(W) */ - /****************************************/ /*** exported functions ***/ @@ -291,10 +281,9 @@ int drv_LUIse_list(void) /* initialize driver & display */ int drv_LUIse_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.3 $"); + info("%s: %s", Name, "$Revision: 1.4 $"); /* real worker functions */ drv_generic_graphic_real_blit = drv_LUIse_blit; @@ -316,21 +305,6 @@ int drv_LUIse_init(const char *section, const int quiet) } } - /* 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 */ AddFunction("LCD::contrast", 1, plugin_contrast); AddFunction("LCD::backlight", 1, plugin_backlight); diff --git a/drv_Sample.c b/drv_Sample.c index 23e7332..c57cdf3 100644 --- a/drv_Sample.c +++ b/drv_Sample.c @@ -1,4 +1,4 @@ -/* $Id: drv_Sample.c,v 1.5 2006/01/30 06:25:53 reinelt Exp $ +/* $Id: drv_Sample.c,v 1.6 2006/02/08 04:55:05 reinelt Exp $ * * sample lcd4linux driver * @@ -23,6 +23,9 @@ * * * $Log: drv_Sample.c,v $ + * Revision 1.6 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.5 2006/01/30 06:25:53 reinelt * added CVS Revision * @@ -436,7 +439,7 @@ int drv_Sample_init(const char *section, const int quiet) WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.5 $"); + info("%s: %s", Name, "$Revision: 1.6 $"); /* display preferences */ XRES = 5; /* pixel width of one char */ @@ -513,7 +516,6 @@ int drv_Sample_init(const char *section, const int quiet) /* use this function for a graphic display */ int drv_Sample_init2(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; /* real worker functions */ @@ -539,25 +541,9 @@ int drv_Sample_init2(const char *section, const int quiet) } } - /* 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 */ AddFunction("LCD::contrast", 1, plugin_contrast); - return 0; } diff --git a/drv_T6963.c b/drv_T6963.c index 9cc64dd..eab3a30 100644 --- a/drv_T6963.c +++ b/drv_T6963.c @@ -1,4 +1,4 @@ -/* $Id: drv_T6963.c,v 1.18 2006/01/30 06:25:54 reinelt Exp $ +/* $Id: drv_T6963.c,v 1.19 2006/02/08 04:55:05 reinelt Exp $ * * new style driver for T6963-based displays * @@ -23,6 +23,9 @@ * * * $Log: drv_T6963.c,v $ + * Revision 1.19 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.18 2006/01/30 06:25:54 reinelt * added CVS Revision * @@ -119,10 +122,6 @@ #include "qprintf.h" #include "udelay.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" #include "drv_generic_parport.h" @@ -567,16 +566,6 @@ static int drv_T6_start(const char *section) /* none at the moment... */ -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_graphic_draw(W) */ -/* using drv_generic_graphic_icon_draw(W) */ -/* using drv_generic_graphic_bar_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -597,10 +586,9 @@ int drv_T6_list(void) /* initialize driver & display */ int drv_T6_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.18 $"); + info("%s: %s", Name, "$Revision: 1.19 $"); /* real worker functions */ drv_generic_graphic_real_blit = drv_T6_blit; @@ -622,21 +610,6 @@ int drv_T6_init(const char *section, const int quiet) } } - /* 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... */ diff --git a/drv_X11.c b/drv_X11.c index 8705b9d..82e9492 100644 --- a/drv_X11.c +++ b/drv_X11.c @@ -1,4 +1,4 @@ -/* $Id: drv_X11.c,v 1.15 2006/01/30 06:25:54 reinelt Exp $ +/* $Id: drv_X11.c,v 1.16 2006/02/08 04:55:05 reinelt Exp $ * * new style X11 Driver for LCD4Linux * @@ -26,6 +26,9 @@ * * * $Log: drv_X11.c,v $ + * Revision 1.16 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.15 2006/01/30 06:25:54 reinelt * added CVS Revision * @@ -111,11 +114,6 @@ #include "qprintf.h" #include "timer.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_image.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -359,17 +357,6 @@ static int drv_X11_start(const char *section) /* none at the moment... */ -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_graphic_draw(W) */ -/* using drv_generic_graphic_icon_draw(W) */ -/* using drv_generic_graphic_image_draw(W) */ -/* using drv_generic_graphic_bar_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -386,10 +373,9 @@ int drv_X11_list(void) /* initialize driver & display */ int drv_X11_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.15 $"); + info("%s: %s", Name, "$Revision: 1.16 $"); /* start display */ if ((ret = drv_X11_start(section)) != 0) @@ -416,26 +402,6 @@ int drv_X11_init(const char *section, const int quiet) } } - /* 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 image widget */ - wc = Widget_Image; - /* Fixme: wc.draw = drv_generic_graphic_image_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... */ diff --git a/drv_generic_graphic.c b/drv_generic_graphic.c index 6a4bdeb..92b5a45 100644 --- a/drv_generic_graphic.c +++ b/drv_generic_graphic.c @@ -23,6 +23,9 @@ * * * $Log: drv_generic_graphic.c,v $ + * Revision 1.20 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.19 2006/02/07 05:36:13 reinelt * Layers added to Layout * @@ -144,6 +147,7 @@ #include "widget_text.h" #include "widget_icon.h" #include "widget_bar.h" +#include "widget_image.h" #include "rgb.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -517,6 +521,51 @@ int drv_generic_graphic_bar_draw(WIDGET * W) } +/****************************************/ +/*** generic image handling ***/ +/****************************************/ + +int drv_generic_graphic_image_draw(WIDGET * W) +{ + WIDGET_IMAGE *Image = W->data; + int layer, row, col, width, height; + int x, y; + + layer = W->layer; + row = W->row; + col = W->col; + width = Image->width; + height = Image->height; + + /* sanity check */ + if (layer < 0 || layer >= LAYERS) { + error("%s: layer %d out of bounds (0..%d)", Driver, layer, LAYERS - 1); + return -1; + } + + /* maybe grow layout framebuffer */ + drv_generic_graphic_resizeFB(row + height, col + width); + + /* render image */ + for (y = 0; y < height; y++) { + for (x = 0; x < width; x++) { + int i = (row + y) * LCOLS + col + x; + if (Image->visible && Image->bitmap) { + drv_generic_graphic_FB[layer][i] = Image->bitmap[y*width+x]; + } else { + drv_generic_graphic_FB[layer][i] = BG_COL; + } + } + } + + /* flush area */ + drv_generic_graphic_blit(row, col, height, width); + + return 0; + +} + + /****************************************/ /*** generic init/quit ***/ /****************************************/ @@ -525,6 +574,7 @@ int drv_generic_graphic_init(const char *section, const char *driver) { int l; char *color; + WIDGET_CLASS wc; Section = (char *) section; Driver = (char *) driver; @@ -568,6 +618,26 @@ int drv_generic_graphic_init(const char *section, const char *driver) if (color) free(color); + /* 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 image widget */ + wc = Widget_Image; + wc.draw = drv_generic_graphic_image_draw; + widget_register(&wc); + return 0; } diff --git a/drv_serdisplib.c b/drv_serdisplib.c index d8e98f8..d6b003c 100644 --- a/drv_serdisplib.c +++ b/drv_serdisplib.c @@ -1,4 +1,4 @@ -/* $Id: drv_serdisplib.c,v 1.7 2006/01/30 06:25:54 reinelt Exp $ +/* $Id: drv_serdisplib.c,v 1.8 2006/02/08 04:55:05 reinelt Exp $ * * driver for serdisplib displays * @@ -23,6 +23,9 @@ * * * $Log: drv_serdisplib.c,v $ + * Revision 1.8 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.7 2006/01/30 06:25:54 reinelt * added CVS Revision * @@ -76,10 +79,6 @@ #include "cfg.h" #include "qprintf.h" #include "plugin.h" -#include "widget.h" -#include "widget_text.h" -#include "widget_icon.h" -#include "widget_bar.h" #include "drv.h" #include "drv_generic_graphic.h" @@ -293,16 +292,6 @@ static void plugin_rotate(RESULT * result, RESULT * arg1) } -/****************************************/ -/*** widget callbacks ***/ -/****************************************/ - - -/* using drv_generic_graphic_draw(W) */ -/* using drv_generic_graphic_icon_draw(W) */ -/* using drv_generic_graphic_bar_draw(W) */ - - /****************************************/ /*** exported functions ***/ /****************************************/ @@ -319,10 +308,9 @@ int drv_SD_list(void) /* initialize driver & display */ int drv_SD_init(const char *section, const int quiet) { - WIDGET_CLASS wc; int ret; - info("%s: %s", Name, "$Revision: 1.7 $"); + info("%s: %s", Name, "$Revision: 1.8 $"); /* real worker functions */ drv_generic_graphic_real_blit = drv_SD_blit; @@ -344,21 +332,6 @@ int drv_SD_init(const char *section, const int quiet) } } - /* 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 */ AddFunction("LCD::contrast", 1, plugin_contrast); AddFunction("LCD::backlight", 1, plugin_backlight); diff --git a/layout.c b/layout.c index 11fa1fe..2108468 100644 --- a/layout.c +++ b/layout.c @@ -1,4 +1,4 @@ -/* $Id: layout.c,v 1.20 2006/02/07 05:36:13 reinelt Exp $ +/* $Id: layout.c,v 1.21 2006/02/08 04:55:05 reinelt Exp $ * * new layouter framework * @@ -23,6 +23,9 @@ * * * $Log: layout.c,v $ + * Revision 1.21 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.20 2006/02/07 05:36:13 reinelt * Layers added to Layout * @@ -162,6 +165,20 @@ int layout_init(const char *layout) if ((p = strchr(l, '|')) != NULL) *p = '\0'; + /* layer/x/y widgets */ + i = sscanf(l, "layer:%d.x%d.y%d%n", &lay, &row, &col, &n); + if (i == 3 && l[n] == '\0') { + if (lay < 0 || lay >= LAYERS) { + error ("%s: layer %d out of bounds (0..%d)", section, lay, LAYERS-1); + } else { + widget = cfg_get(section, l, NULL); + if (widget != NULL && *widget != '\0') { + widget_add(widget, WIDGET_TYPE_XY, lay, row - 1, col - 1); + } + free(widget); + } + } + /* layer/row/col widgets */ i = sscanf(l, "layer:%d.row%d.col%d%n", &lay, &row, &col, &n); if (i == 3 && l[n] == '\0') { diff --git a/lcd4linux.conf.sample b/lcd4linux.conf.sample index 7e4d8c5..ba334b9 100644 --- a/lcd4linux.conf.sample +++ b/lcd4linux.conf.sample @@ -806,6 +806,12 @@ Widget GPO_Test255 { update 100 } +Widget ImageTest { + class 'Image' + update 1000 + visible 1 +} + Layout Default { Row1 { Col1 'OS' @@ -858,10 +864,8 @@ Layout TestLayer { Col1 'Eth0' Col11 'Eth0Bar' } - Layer 0 { - Row3 { - Col1 'Test' - } + Layer 2 { + X0.Y0 'ImageTest' } } @@ -976,8 +980,8 @@ Layout testMySQL { #Display 'SimpleLCD' #Display 'BA63' #Display 'CT20x4' -#Display 'T6963-240x64' -Display 'XWindow' +Display 'T6963-240x64' +#Display 'XWindow' #Display 'USBLCD' #Display 'BWCT' #Display 'Image' diff --git a/widget_image.c b/widget_image.c index 7281271..6c510e7 100644 --- a/widget_image.c +++ b/widget_image.c @@ -1,4 +1,4 @@ -/* $Id: widget_image.c,v 1.2 2006/01/23 06:17:18 reinelt Exp $ +/* $Id: widget_image.c,v 1.3 2006/02/08 04:55:05 reinelt Exp $ * * image widget handling * @@ -21,6 +21,9 @@ * * * $Log: widget_image.c,v $ + * Revision 1.3 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.2 2006/01/23 06:17:18 reinelt * timer widget added * @@ -53,11 +56,29 @@ #include "widget.h" #include "widget_image.h" +#ifdef HAVE_GD_GD_H +#include +#define WITH_GD +#else +#ifdef HAVE_GD_H +#include +#define WITH_GD +#endif +#endif + #ifdef WITH_DMALLOC #include #endif -void widget_image_update(void *Self) +static void widget_image_render (WIDGET_IMAGE *Image) +{ + /* try to open file */ + + if (Image->file == NULL || Image->file[0] == '\0') { + } +} + +static void widget_image_update(void *Self) { WIDGET *W = (WIDGET *) Self; WIDGET_IMAGE *Image = W->data; @@ -67,6 +88,16 @@ void widget_image_update(void *Self) if (W->parent == NULL) { /* evaluate expressions */ + if (Image->file) { + free (Image->file); + Image->file = NULL; + } + if (Image->file_tree != NULL) { + Eval(Image->file_tree, &result); + Image->file = strdup(R2S(&result)); + DelResult(&result); + } + Image->update = 0; if (Image->update_tree != NULL) { Eval(Image->update_tree, &result); @@ -84,8 +115,13 @@ void widget_image_update(void *Self) Image->visible = 0; DelResult(&result); } + + /* render image into bitmap */ + widget_image_render(Image); } + error ("Fixme: We are at image_update"); + /* finally, draw it! */ if (W->class->draw) W->class->draw(W); @@ -114,17 +150,28 @@ int widget_image_init(WIDGET * Self) Image = malloc(sizeof(WIDGET_IMAGE)); memset(Image, 0, sizeof(WIDGET_IMAGE)); + /* initial size */ + Image->width = 0; + Image->height = 0; + Image->bitmap = NULL; + Image->file = NULL; + /* get raw expressions (we evaluate them ourselves) */ + Image->file_expr = cfg_get_raw(section, "file", NULL); Image->update_expr = cfg_get_raw(section, "update", NULL); Image->visible_expr = cfg_get_raw(section, "visible", NULL); - /* sanity check */ + /* sanity checks */ + if (Image->file_expr == NULL || *Image->file_expr == '\0') { + error("Warning: Image %s has no file", Self->name); + } if (Image->update_expr == NULL || *Image->update_expr == '\0') { error("Image %s has no update, using '100'", Self->name); Image->update_expr = "100"; } /* compile'em */ + Compile(Image->file_expr, &Image->file_tree); Compile(Image->update_expr, &Image->update_tree); Compile(Image->visible_expr, &Image->visible_tree); @@ -152,10 +199,13 @@ int widget_image_quit(WIDGET * Self) if (Self->parent == NULL) { if (Self->data) { WIDGET_IMAGE *Image = Self->data; - DelTree(Image->update_tree); - DelTree(Image->visible_tree); + if (Image->bitmap) + free(Image->bitmap); if (Image->file) free(Image->file); + DelTree(Image->file_tree); + DelTree(Image->update_tree); + DelTree(Image->visible_tree); free(Self->data); Self->data = NULL; } diff --git a/widget_image.h b/widget_image.h index 1f89753..c55b190 100644 --- a/widget_image.h +++ b/widget_image.h @@ -1,4 +1,4 @@ -/* $Id: widget_image.h,v 1.1 2006/01/22 09:16:11 reinelt Exp $ +/* $Id: widget_image.h,v 1.2 2006/02/08 04:55:05 reinelt Exp $ * * image widget handling * @@ -23,6 +23,9 @@ * * * $Log: widget_image.h,v $ + * Revision 1.2 2006/02/08 04:55:05 reinelt + * moved widget registration to drv_generic_graphic + * * Revision 1.1 2006/01/22 09:16:11 reinelt * Image Widget framework added * @@ -32,14 +35,20 @@ #ifndef _WIDGET_IMAGE_H_ #define _WIDGET_IMAGE_H_ +#include "rgb.h" + typedef struct WIDGET_IMAGE { + RGBA *bitmap; /* image bitmap */ + int width, height; /* size of the image */ + char *file_expr; /* expression for image filename */ + void *file_tree; /* pre-compiled expression for image filename */ + char *file; /* evaluated filename */ char *update_expr; /* expression for update interval */ void *update_tree; /* pre-compiled expression for update interval */ int update; /* update interval (msec) */ char *visible_expr; /* expression for visibility */ void *visible_tree; /* pre-compiled expression for visibility */ int visible; /* icon visible? */ - char *file; /* file containing the image */ } WIDGET_IMAGE; extern WIDGET_CLASS Widget_Image; -- cgit v1.2.3