added stock bitmap handling and support for it in the demo script
This commit is contained in:
parent
51fda759cc
commit
ed9fd9320c
|
@ -6,7 +6,14 @@ WHITE = upiwin.rgb(255, 255, 255)
|
||||||
LTGRAY = upiwin.rgb(204, 204, 204)
|
LTGRAY = upiwin.rgb(204, 204, 204)
|
||||||
YELLOW = upiwin.rgb(255, 255, 0)
|
YELLOW = upiwin.rgb(255, 255, 0)
|
||||||
|
|
||||||
|
# Get the stock bitmaps.
|
||||||
|
bmp_freehand = upiwin.Bitmap(stock='freehand')
|
||||||
|
bmp_line = upiwin.Bitmap(stock='line')
|
||||||
|
bmp_rect = upiwin.Bitmap(stock='rect')
|
||||||
|
bmp_fillrect = upiwin.Bitmap(stock='fillrect')
|
||||||
|
|
||||||
hdc = upiwin.DevCtxt(type='screen')
|
hdc = upiwin.DevCtxt(type='screen')
|
||||||
|
hdc_bits = upiwin.DevCtxt(type='memory')
|
||||||
|
|
||||||
# divide the screen into "drawing" and "command" areas
|
# divide the screen into "drawing" and "command" areas
|
||||||
screen_rect = hdc.get_clip_rect()
|
screen_rect = hdc.get_clip_rect()
|
||||||
|
@ -100,6 +107,9 @@ hdc.rectangle(cmd2_rect[0], cmd2_rect[1], cmd2_rect[2], cmd2_rect[3])
|
||||||
hdc.rectangle(cmd3_rect[0], cmd3_rect[1], cmd3_rect[2], cmd3_rect[3])
|
hdc.rectangle(cmd3_rect[0], cmd3_rect[1], cmd3_rect[2], cmd3_rect[3])
|
||||||
hdc.rectangle(cmd4_rect[0], cmd4_rect[1], cmd4_rect[2], cmd4_rect[3])
|
hdc.rectangle(cmd4_rect[0], cmd4_rect[1], cmd4_rect[2], cmd4_rect[3])
|
||||||
|
|
||||||
|
hdc_bits.select_object(bmp_freehand)
|
||||||
|
hdc.bitblt(cmd1_rect[0] + 6, cmd1_rect[1] + 6, cmd1_rect[0] + 54, cmd1_rect[1] + 54, hdc_bits, 0, 0, 0)
|
||||||
|
|
||||||
# Main message loop
|
# Main message loop
|
||||||
msg = {}
|
msg = {}
|
||||||
while upiwin.get_message(msg):
|
while upiwin.get_message(msg):
|
||||||
|
|
|
@ -4,7 +4,7 @@ SPLASHSCREEN=splash-vmwcblk.png
|
||||||
|
|
||||||
OBJS=main.o sysinput.o ep_init.o ep_upiwin.o ep_backlight.o ep_msg.o ep_graphics.o ep_devctxt.o ep_bitmap.o \
|
OBJS=main.o sysinput.o ep_init.o ep_upiwin.o ep_backlight.o ep_msg.o ep_graphics.o ep_devctxt.o ep_bitmap.o \
|
||||||
ep_upiwin_tmp.o ep_util.o fbinit.o rect.o gfxobj.o devctxt.o dc_screen.o fontengine.o \
|
ep_upiwin_tmp.o ep_util.o fbinit.o rect.o gfxobj.o devctxt.o dc_screen.o fontengine.o \
|
||||||
bitmap.o fbprimitive.o log.o gpio.o msg_queue.o time_func.o config.o \
|
bitmap.o stockobj.o fbprimitive.o log.o gpio.o msg_queue.o time_func.o config.o \
|
||||||
i_freehand.o i_line.o i_rect.o i_fillrect.o splash.o
|
i_freehand.o i_line.o i_rect.o i_fillrect.o splash.o
|
||||||
LIBS=-lpython3.7m -lcrypt -lfreetype -lbcm2835 -lpthread -ldl -lutil -lm
|
LIBS=-lpython3.7m -lcrypt -lfreetype -lbcm2835 -lpthread -ldl -lutil -lm
|
||||||
CFLAGS=-I/usr/include/python3.7m -I/usr/include/freetype2 -I/usr/include/libpng16 \
|
CFLAGS=-I/usr/include/python3.7m -I/usr/include/freetype2 -I/usr/include/libpng16 \
|
||||||
|
|
|
@ -16,4 +16,6 @@ typedef struct tagBITMAP {
|
||||||
extern PBITMAP BMP_Create(INT32 width, INT32 height, const void *bits);
|
extern PBITMAP BMP_Create(INT32 width, INT32 height, const void *bits);
|
||||||
extern void BMP_Delete(PBITMAP pbmp);
|
extern void BMP_Delete(PBITMAP pbmp);
|
||||||
|
|
||||||
|
extern PBITMAP _BMP_GetStock(PCSTR name);
|
||||||
|
|
||||||
#endif /* __BITMAP_H_INCLUDED */
|
#endif /* __BITMAP_H_INCLUDED */
|
|
@ -40,19 +40,32 @@ static PyGetSetDef BitmapProperties[] = {
|
||||||
|
|
||||||
static int bitmap_init(BitmapObject *self, PyObject *args, PyObject *kwds)
|
static int bitmap_init(BitmapObject *self, PyObject *args, PyObject *kwds)
|
||||||
{
|
{
|
||||||
static char *kwlist[] = { "width", "height", NULL };
|
static char *kwlist[] = { "stock", "width", "height", NULL };
|
||||||
|
const char *stock;
|
||||||
int width = 0, height = 0;
|
int width = 0, height = 0;
|
||||||
|
|
||||||
if (!PyArg_ParseTupleAndKeywords(args, kwds, "$ii", kwlist, &width, &height))
|
if (!PyArg_ParseTupleAndKeywords(args, kwds, "$sii", kwlist, &stock, &width, &height))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
width = MAX(1, width);
|
if (stock)
|
||||||
height = MAX(1, height);
|
|
||||||
self->pbmp = BMP_Create(width, height, NULL);
|
|
||||||
if (!(self->pbmp))
|
|
||||||
{
|
{
|
||||||
|
self->pbmp = _BMP_GetStock(stock);
|
||||||
|
if (!(self->pbmp))
|
||||||
|
{
|
||||||
|
PyErr_Format(PyExc_RuntimeError, "no such stock bitmap: '%s'", stock);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
width = MAX(1, width);
|
||||||
|
height = MAX(1, height);
|
||||||
|
self->pbmp = BMP_Create(width, height, NULL);
|
||||||
|
if (!(self->pbmp))
|
||||||
|
{
|
||||||
PyErr_SetString(PyExc_RuntimeError, "unable to create bitmap");
|
PyErr_SetString(PyExc_RuntimeError, "unable to create bitmap");
|
||||||
return -1;
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
46
src/stockobj.c
Executable file
46
src/stockobj.c
Executable file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "wintype.h"
|
||||||
|
#include "bitmap.h"
|
||||||
|
|
||||||
|
/* references to the icon data */
|
||||||
|
extern uint8_t _binary_i_freehand_bin_start[];
|
||||||
|
extern uint8_t _binary_i_freehand_bin_end;
|
||||||
|
extern uint8_t _binary_i_freehand_bin_size;
|
||||||
|
|
||||||
|
extern uint8_t _binary_i_line_bin_start[];
|
||||||
|
extern uint8_t _binary_i_line_bin_end;
|
||||||
|
extern uint8_t _binary_i_line_bin_size;
|
||||||
|
|
||||||
|
extern uint8_t _binary_i_rect_bin_start[];
|
||||||
|
extern uint8_t _binary_i_rect_bin_end;
|
||||||
|
extern uint8_t _binary_i_rect_bin_size;
|
||||||
|
|
||||||
|
extern uint8_t _binary_i_fillrect_bin_start[];
|
||||||
|
extern uint8_t _binary_i_fillrect_bin_end;
|
||||||
|
extern uint8_t _binary_i_fillrect_bin_size;
|
||||||
|
|
||||||
|
typedef struct tagSTOCKBITMAPDESC {
|
||||||
|
PCSTR name;
|
||||||
|
INT32 width;
|
||||||
|
INT32 height;
|
||||||
|
const void *data;
|
||||||
|
} STOCKBITMAPDESC;
|
||||||
|
|
||||||
|
static const STOCKBITMAPDESC stock_bitmaps = {
|
||||||
|
{"freehand", 48, 48, _binary_i_freehand_bin_start },
|
||||||
|
{"line", 48, 48, _binary_i_line_bin_start },
|
||||||
|
{"rect", 48, 48, _binary_i_rect_bin_start },
|
||||||
|
{"fillrect", 48, 48, _binary_i_fillrect_bin_start },
|
||||||
|
{NULL, 0, 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
PBITMAP _BMP_GetStock(PCSTR name)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
|
||||||
|
for (i = 0; stock_bitmaps[i].name; ++i)
|
||||||
|
if (strcmp(name, stock_bitmaps[i].name) == 0)
|
||||||
|
return BMP_Create(stock_bitmaps[i].width, stock_bitmaps[i].height, stock_bitmaps[i].data);
|
||||||
|
return NULL;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user