almost there on the api
This commit is contained in:
parent
3e9e8eb2b9
commit
6a2fc3fa2c
1 changed files with 326 additions and 29 deletions
|
@ -1,6 +1,7 @@
|
|||
#include "luamatrix.h"
|
||||
#include "matrix.h"
|
||||
#include "lua.hpp"
|
||||
#include "log.h"
|
||||
|
||||
// CREATE ARRAY TYPE AND EXPOSE matrixpanel TO LUA.
|
||||
// metatable method for handling "array[index]"
|
||||
|
@ -20,39 +21,335 @@ static int matrixpanel_newindex (lua_State* L) {
|
|||
return 0;
|
||||
} */
|
||||
|
||||
static const struct luaL_Reg matrixpanel_metamethods[] = {
|
||||
// { "__index", matrixpanel_index },
|
||||
// { "__newindex", matrixpanel_newindex },
|
||||
int8_t matrixpanel_userdata = 0; // used just to have some userdata
|
||||
|
||||
static int matrixpanel_swapbuffer(lua_State *L) {
|
||||
matrixpanel.swapBuffers(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pushPanel (lua_State *L)
|
||||
{
|
||||
int8_t *pi = (int8_t *)lua_newuserdata(L, sizeof(int8_t));
|
||||
*pi = matrixpanel_userdata;
|
||||
luaL_getmetatable(L, "matrixpanel");
|
||||
lua_setmetatable(L, -2);
|
||||
}
|
||||
|
||||
static int matrixpanel_new (lua_State *L) {
|
||||
pushPanel(L);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int matrixpanel_gc (lua_State *L) {
|
||||
output_log("dropped matrixpanel\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int matrixpanel_tostring (lua_State *L) {
|
||||
lua_pushfstring(L, "matrixpanel string");
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int matrixpanel_fillscreen (lua_State *L) {
|
||||
int c = luaL_checkint(L, 1);
|
||||
matrixpanel.fillScreen(c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int matrixpanel_drawpixel (lua_State *L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int matrixpanel_colorHSV (lua_State *L) {
|
||||
float h = luaL_checkint(L, 1);
|
||||
float s = luaL_checkint(L, 2);
|
||||
float v = luaL_checkint(L, 3);
|
||||
bool gflag = lua_isboolean(L, 4) ? lua_toboolean(L, 4) : false;
|
||||
lua_pushnumber(L, matrixpanel.ColorHSV(h, s, v, gflag));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int matrixpanel_color888 (lua_State *L) {
|
||||
int r = luaL_checkint(L, 1);
|
||||
int g = luaL_checkint(L, 2);
|
||||
int b = luaL_checkint(L, 3);
|
||||
lua_pushnumber(L, matrixpanel.Color888(r, g, b));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int matrixpanel_color444 (lua_State *L) {
|
||||
int r = luaL_checkint(L, 1);
|
||||
int g = luaL_checkint(L, 2);
|
||||
int b = luaL_checkint(L, 3);
|
||||
lua_pushnumber(L, matrixpanel.Color444(r, g, b));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int matrixpanel_color333 (lua_State *L) {
|
||||
int r = luaL_checkint(L, 1);
|
||||
int g = luaL_checkint(L, 2);
|
||||
int b = luaL_checkint(L, 3);
|
||||
lua_pushnumber(L, matrixpanel.Color333(r, g, b));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color),
|
||||
static int matrixpanel_drawline (lua_State *L) {
|
||||
int x0 = luaL_checkint(L, 1);
|
||||
int y0 = luaL_checkint(L, 2);
|
||||
int x1 = luaL_checkint(L, 3);
|
||||
int y1 = luaL_checkint(L, 4);
|
||||
int c = luaL_checkint(L, 5);
|
||||
matrixpanel.drawLine(x0, y0, x1, y1, c);
|
||||
return 0;
|
||||
}
|
||||
// drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
|
||||
static int matrixpanel_drawfastvline (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int h = luaL_checkint(L, 3);
|
||||
int c = luaL_checkint(L, 4);
|
||||
matrixpanel.drawFastVLine(x, y, h, c);
|
||||
return 0;
|
||||
}
|
||||
// drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
|
||||
static int matrixpanel_drawfasthline (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int w = luaL_checkint(L, 3);
|
||||
int c = luaL_checkint(L, 4);
|
||||
matrixpanel.drawFastHLine(x, y, w, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
|
||||
static int matrixpanel_drawrect (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int w = luaL_checkint(L, 3);
|
||||
int h = luaL_checkint(L, 4);
|
||||
int c = luaL_checkint(L, 5);
|
||||
matrixpanel.drawRect(x, y, w, h, c);
|
||||
return 0;
|
||||
}
|
||||
// fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
|
||||
static int matrixpanel_fillrect (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int w = luaL_checkint(L, 3);
|
||||
int h = luaL_checkint(L, 4);
|
||||
int c = luaL_checkint(L, 5);
|
||||
matrixpanel.fillRect(x, y, w, h, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// invertDisplay(boolean i);
|
||||
static int matrixpanel_invertdisplay (lua_State *L) {
|
||||
bool flag = lua_isboolean(L, 1) ? lua_toboolean(L, 1) : false;
|
||||
matrixpanel.invertDisplay(flag);
|
||||
}
|
||||
|
||||
// drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
|
||||
static int matrixpanel_drawcircle (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int r = luaL_checkint(L, 3);
|
||||
int c = luaL_checkint(L, 4);
|
||||
matrixpanel.drawCircle(x, y, r, c);
|
||||
return 0;
|
||||
}
|
||||
// drawCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color),
|
||||
static int matrixpanel_drawcirclehelper (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int r = luaL_checkint(L, 3);
|
||||
int corner= luaL_checkint(L, 4);
|
||||
int c = luaL_checkint(L, 5);
|
||||
matrixpanel.drawCircleHelper(x, y, r, corner, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color),
|
||||
static int matrixpanel_fillcircle (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int r = luaL_checkint(L, 3);
|
||||
int c = luaL_checkint(L, 4);
|
||||
matrixpanel.fillCircle(x, y, r, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color),
|
||||
static int matrixpanel_fillcirclehelper (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int r = luaL_checkint(L, 3);
|
||||
int corner= luaL_checkint(L, 4);
|
||||
int delta = luaL_checkint(L, 5);
|
||||
int c = luaL_checkint(L, 6);
|
||||
matrixpanel.fillCircleHelper(x, y, r, corner, delta, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color),
|
||||
static int matrixpanel_drawtriangle (lua_State *L) {
|
||||
int x0 = luaL_checkint(L, 1);
|
||||
int y0 = luaL_checkint(L, 2);
|
||||
int x1 = luaL_checkint(L, 3);
|
||||
int y1 = luaL_checkint(L, 4);
|
||||
int x2 = luaL_checkint(L, 5);
|
||||
int y2 = luaL_checkint(L, 6);
|
||||
int c = luaL_checkint(L, 7);
|
||||
matrixpanel.drawTriangle(x0, y0, x1, y1, x2, y2, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// fillTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color),
|
||||
static int matrixpanel_filltriangle (lua_State *L) {
|
||||
int x0 = luaL_checkint(L, 1);
|
||||
int y0 = luaL_checkint(L, 2);
|
||||
int x1 = luaL_checkint(L, 3);
|
||||
int y1 = luaL_checkint(L, 4);
|
||||
int x2 = luaL_checkint(L, 5);
|
||||
int y2 = luaL_checkint(L, 6);
|
||||
int c = luaL_checkint(L, 7);
|
||||
matrixpanel.fillTriangle(x0, y0, x1, y1, x2, y2, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// drawRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color),
|
||||
static int matrixpanel_drawroundrect (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int w = luaL_checkint(L, 3);
|
||||
int h = luaL_checkint(L, 4);
|
||||
int r = luaL_checkint(L, 5);
|
||||
int c = luaL_checkint(L, 6);
|
||||
matrixpanel.drawRoundRect(x, y, w, h, r, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// fillRoundRect(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t radius, uint16_t color),
|
||||
static int matrixpanel_fillroundrect (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
int w = luaL_checkint(L, 3);
|
||||
int h = luaL_checkint(L, 4);
|
||||
int r = luaL_checkint(L, 5);
|
||||
int c = luaL_checkint(L, 6);
|
||||
matrixpanel.fillRoundRect(x, y, w, h, r, c);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
// drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg),
|
||||
// drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
// drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg),
|
||||
// drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
|
||||
// drawChar(int16_t x, int16_t y, unsigned char c, uint16_t color, uint16_t bg, uint8_t size),
|
||||
static int matrixpanel_drawchar (lua_State *L) {
|
||||
int x = luaL_checkint(L, 1);
|
||||
int y = luaL_checkint(L, 2);
|
||||
const char *str = luaL_checkstring(L, 3);
|
||||
int bg = luaL_checkint(L, 4);
|
||||
int color = luaL_checkint(L, 5);
|
||||
int size = luaL_checkint(L, 6);
|
||||
matrixpanel.drawChar(x, y, str[0], color, bg, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// setCursor(int16_t x, int16_t y),
|
||||
static int matrixpanel_setcursor (lua_State *L) {
|
||||
}
|
||||
|
||||
// setTextColor(uint16_t c),
|
||||
// setTextColor(uint16_t c, uint16_t bg),
|
||||
static int matrixpanel_settextcolor (lua_State *L) {
|
||||
}
|
||||
|
||||
// setTextSize(uint8_t s),
|
||||
static int matrixpanel_settextsize (lua_State *L) {
|
||||
}
|
||||
|
||||
// setTextWrap(boolean w),
|
||||
static int matrixpanel_settextwrap (lua_State *L) {
|
||||
}
|
||||
|
||||
// setRotation(uint8_t r),
|
||||
static int matrixpanel_setrotation (lua_State *L) {
|
||||
}
|
||||
|
||||
// setFont(const GFXfont *f = NULL),
|
||||
static int matrixpanel_setfont (lua_State *L) {
|
||||
}
|
||||
|
||||
// getTextBounds(char *string, int16_t x, int16_t y, int16_t *x1, int16_t *y1, uint16_t *w, uint16_t *h),
|
||||
static int matrixpanel_gettextbounds (lua_State *L) {
|
||||
}
|
||||
|
||||
static const struct luaL_Reg matrixpanel_methods[] = {
|
||||
{ "new", matrixpanel_new },
|
||||
{ "swapBuffer", matrixpanel_swapbuffer },
|
||||
{ "fillScreen", matrixpanel_fillscreen },
|
||||
{ "drawPixel", matrixpanel_drawpixel },
|
||||
{ "colorHSV", matrixpanel_colorHSV },
|
||||
{ "color888", matrixpanel_color888 },
|
||||
{ "color444", matrixpanel_color444 },
|
||||
{ "color333", matrixpanel_color333 },
|
||||
{ "drawLine", matrixpanel_drawline },
|
||||
{ "drawFastVLine", matrixpanel_drawfastvline },
|
||||
{ "drawFastHLine", matrixpanel_drawfasthline },
|
||||
{ "drawRect", matrixpanel_drawrect },
|
||||
{ "fillRect", matrixpanel_fillrect },
|
||||
{ "invertScreen", matrixpanel_invertdisplay },
|
||||
{ "drawCircle", matrixpanel_drawcircle },
|
||||
{ "drawCircleHelper", matrixpanel_drawcirclehelper },
|
||||
{ "fillCircle", matrixpanel_fillcircle },
|
||||
{ "fillCircleHelper", matrixpanel_fillcirclehelper },
|
||||
{ "drawTriangle", matrixpanel_drawtriangle },
|
||||
{ "fillTriangle", matrixpanel_filltriangle },
|
||||
{ "drawRoundRect", matrixpanel_drawroundrect },
|
||||
{ "fillRoundRect", matrixpanel_fillroundrect },
|
||||
// drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
// drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg),
|
||||
// drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
// drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color, uint16_t bg),
|
||||
// drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color),
|
||||
{ "drawChar", matrixpanel_drawchar },
|
||||
{ "setCursor", matrixpanel_setcursor },
|
||||
{ "setTextColor", matrixpanel_settextcolor },
|
||||
{ "setTextSize", matrixpanel_settextsize },
|
||||
{ "setTextWrap", matrixpanel_settextwrap },
|
||||
{ "setRotation", matrixpanel_setrotation },
|
||||
// setFont(const GFXfont *f = NULL),
|
||||
{ "getTextBounds", matrixpanel_gettextbounds },
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
|
||||
// create a metatable for our array type
|
||||
static void create_matrixpanel_type(lua_State* L) {
|
||||
luaL_newmetatable(L, "matrixpanel");
|
||||
luaL_setfuncs(L, matrixpanel_metamethods, 0);
|
||||
//lua_setglobal(L, "matrixpanel");
|
||||
}
|
||||
|
||||
|
||||
// expose an array to lua, by storing it in a userdata with the array metatable
|
||||
static int expose_array(lua_State* L) {
|
||||
RGBmatrixPanel **pmatrix = (RGBmatrixPanel **) lua_newuserdata(L, sizeof(RGBmatrixPanel **));
|
||||
*pmatrix = &matrixpanel;
|
||||
luaL_getmetatable(L, "matrixpanel");
|
||||
lua_setmetatable(L, -2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// test routine which exposes our test array to Lua
|
||||
static int getmatrixpanel (lua_State* L) {
|
||||
return expose_array( L );
|
||||
}
|
||||
static const struct luaL_Reg matrixpanel_metamethods[] = {
|
||||
{ "__gc", matrixpanel_gc },
|
||||
{ "__tostring", matrixpanel_tostring },
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
int luaopen_matrixpanel (lua_State* L) {
|
||||
create_matrixpanel_type(L);
|
||||
lua_newtable(L);
|
||||
luaL_setfuncs(L, matrixpanel_methods, 0);
|
||||
lua_setglobal(L, "matrixpanel");
|
||||
|
||||
luaL_newmetatable(L, "matrixpanel"); /* create metatable for matrixpanel,
|
||||
add it to the Lua registry */
|
||||
luaL_setfuncs(L, matrixpanel_methods, 0);
|
||||
|
||||
// make our test routine available to Lua
|
||||
lua_register(L, "matrixpanel", getmatrixpanel);
|
||||
return 0;
|
||||
lua_pushliteral(L, "__index");
|
||||
lua_pushvalue(L, -3); /* dup methods table*/
|
||||
lua_rawset(L, -3); /* metatable.__index = methods */
|
||||
lua_pushliteral(L, "__metatable");
|
||||
lua_pushvalue(L, -3); /* dup methods table*/
|
||||
lua_rawset(L, -3); /* hide metatable:
|
||||
metatable.__metatable = methods */
|
||||
lua_pop(L, 1); /* drop metatable */
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue