Start utilities for drawing
[metawatch.git] / mw_utility.c
1 /*
2  * (c) 2011 Siegen, Germany by Nils Faerber <nils.faerber@kernelconcepts.de>
3  *
4  * license LGPL
5  */
6
7 #include <stdlib.h>
8 #include <string.h>
9 #include <stdio.h>
10
11 #include "mw_utility.h"
12 #include "metawatch.h"
13
14 /*
15  * The pixmap buffer has at least one byte per pixel, even for monochrome (bpp=1)
16  * bitmaps
17  */
18 mw_buffer *mw_alloc_pbuffer(unsigned int res_x, unsigned int res_y, unsigned int bpp)
19 {
20         mw_buffer *nmwbuf;
21         int pbuf_size;
22
23         nmwbuf = (mw_buffer *) malloc(sizeof(mw_buffer));
24         if (!nmwbuf)
25                 return NULL;
26
27         nmwbuf->res_x = res_x;
28         nmwbuf->res_y = res_y;
29         nmwbuf->bpp = bpp;
30
31         pbuf_size = nmwbuf->res_x * nmwbuf->res_y * ((nmwbuf->bpp / 8) + 1);
32         nmwbuf->pbuf = malloc(pbuf_size);
33         if (!nmwbuf->pbuf) {
34                 free(nmwbuf);
35                 return NULL;
36         } else {
37                 memset(nmwbuf->pbuf, 0, pbuf_size);
38                 return nmwbuf;
39         }
40 }
41
42 void mw_free_pbuffer(mw_buffer *mwbuf)
43 {
44         if (!mwbuf)
45                 return;
46
47         free(mwbuf->pbuf);
48         free(mwbuf);
49 }
50
51 void mw_dump_mw_buffer(mw_buffer *mwbuf)
52 {
53         int x, y;
54         unsigned char clr;
55
56         for (y = 0; y < mwbuf->res_y; y++) {
57                 for (x = 0; x < mwbuf->res_x; x++) {
58                         clr = *(unsigned char *)(mwbuf->pbuf+((y*mwbuf->res_x)+x));
59                         if (clr)
60                                 fprintf(stderr, ".");
61                         else
62                                 fprintf(stderr, " ");
63                 };
64                 fprintf(stderr, "\n");
65         };
66 }
67
68
69 /* clear/fill entire buffer with color */
70 void mw_buf_clear(mw_buffer *mwbuf, mw_color clr)
71 {
72         int pbuf_size;
73
74         if (!mwbuf)
75                 return;
76
77         pbuf_size = mwbuf->res_x * mwbuf->res_y * ((mwbuf->bpp / 8) + 1);
78         memset(mwbuf->pbuf, clr, pbuf_size);
79 }
80
81 /* draw a single pixel */
82 void mw_buf_draw_pixel(mw_buffer *mwbuf, unsigned int x, unsigned int y, mw_color clr)
83 {
84         if (!mwbuf)
85                 return;
86
87         *(unsigned char *)(mwbuf->pbuf+((y*mwbuf->res_x)+x)) = clr;
88 }
89
90