1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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;
}
|