aboutsummaryrefslogtreecommitdiffstats
path: root/w3mimg/fb/fb_w3mimg.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--w3mimg/fb/fb_w3mimg.c133
1 files changed, 133 insertions, 0 deletions
diff --git a/w3mimg/fb/fb_w3mimg.c b/w3mimg/fb/fb_w3mimg.c
new file mode 100644
index 0000000..c022f22
--- /dev/null
+++ b/w3mimg/fb/fb_w3mimg.c
@@ -0,0 +1,133 @@
+/* $Id: fb_w3mimg.c,v 1.1 2002/07/17 20:58:48 ukai Exp $ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+
+#include "w3mimg/fb/fb.h"
+#include "w3mimg/fb/fb_img.h"
+#include "w3mimg/w3mimg.h"
+
+static int
+w3mfb_init(w3mimg_op *self)
+{
+ if (self == NULL)
+ return 0;
+ return 1;
+}
+
+static int
+w3mfb_finish(w3mimg_op *self)
+{
+ if (self == NULL)
+ return 0;
+ return 1;
+}
+
+static int
+w3mfb_active(w3mimg_op *self)
+{
+ if (self == NULL)
+ return 0;
+ return 1;
+}
+
+static void
+w3mfb_set_background(w3mimg_op *self, char *background)
+{
+ if (self == NULL)
+ return;
+ if (background) {
+ int r, g, b;
+ if (sscanf(background, "#%02x%02x%02x", &r, &g, &b) == 3)
+ fb_set_bg(r, g, b);
+ }
+}
+
+static void
+w3mfb_sync(w3mimg_op *self)
+{
+ return;
+}
+
+static void
+w3mfb_close(w3mimg_op *self)
+{
+ fb_close();
+}
+
+static int
+w3mfb_load_image(w3mimg_op *self, W3MImage *img, char *fname, int w, int h)
+{
+ IMAGE *im;
+
+ if (self == NULL)
+ return 0;
+ im = fb_load_image(fname, w, h);
+ if (!im)
+ return 0;
+ img->pixmap = im;
+ img->width = im->width;
+ img->height = im->height;
+ return 1;
+}
+
+static int
+w3mfb_show_image(w3mimg_op *self, W3MImage *img, int sx, int sy,
+ int sw, int sh,
+ int x, int y)
+{
+ if (self == NULL)
+ return 0;
+
+ fb_draw_image((IMAGE *)img->pixmap,
+ x + self->offset_x, y + self->offset_y,
+ sx, sy,
+ (sw ? sw : img->width),
+ (sh ? sh : img->height));
+ return 1;
+}
+
+static void
+w3mfb_free_image(w3mimg_op *self, W3MImage *img)
+{
+ if (self == NULL)
+ return;
+ if (img && img->pixmap) {
+ fb_free_image((IMAGE *)img->pixmap);
+ img->pixmap = NULL;
+ img->width = 0;
+ img->height = 0;
+ }
+}
+
+w3mimg_op *
+w3mimg_fbopen()
+{
+ w3mimg_op *wop = NULL;
+ wop = (w3mimg_op *)malloc(sizeof(w3mimg_op));
+ if (wop == NULL)
+ return NULL;
+ memset(wop, 0, sizeof(w3mimg_op));
+
+ if (fb_open())
+ goto error;
+
+ wop->width = fb_width();
+ wop->height = fb_height();
+
+ wop->init = w3mfb_init;
+ wop->finish = w3mfb_finish;
+ wop->active = w3mfb_active;
+ wop->set_background = w3mfb_set_background;
+ wop->sync = w3mfb_sync;
+ wop->close = w3mfb_close;
+
+ wop->load_image = w3mfb_load_image;
+ wop->show_image = w3mfb_show_image;
+ wop->free_image = w3mfb_free_image;
+
+ return wop;
+error:
+ free(wop);
+ return NULL;
+}