aboutsummaryrefslogtreecommitdiffstats
path: root/drv_generic_graphic.c
diff options
context:
space:
mode:
authorreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-02-08 04:55:05 +0000
committerreinelt <reinelt@3ae390bd-cb1e-0410-b409-cd5a39f66f1f>2006-02-08 04:55:05 +0000
commit68b4e0616ab80a32903d0c6ede232e47d4d88382 (patch)
treed71f4054e5a360af26940acfe16053068206cedb /drv_generic_graphic.c
parent5c71af9339a592ef3759b40614685c83537d3ac3 (diff)
downloadlcd4linux-68b4e0616ab80a32903d0c6ede232e47d4d88382.tar.gz
[lcd4linux @ 2006-02-08 04:55:03 by reinelt]
moved widget registration to drv_generic_graphic git-svn-id: https://ssl.bulix.org/svn/lcd4linux/trunk@635 3ae390bd-cb1e-0410-b409-cd5a39f66f1f
Diffstat (limited to 'drv_generic_graphic.c')
-rw-r--r--drv_generic_graphic.c70
1 files changed, 70 insertions, 0 deletions
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"
@@ -518,6 +522,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;
}