#include "luamatrix.h" #include "matrix.h" #include "lua.hpp" #include "log.h" static int matrixpanel_swapbuffer(lua_State *L) { matrixpanel.swapBuffers(true); return 0; } 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) { float x = luaL_checkint(L, 1); float y = luaL_checkint(L, 2); float c = luaL_checkint(L, 3); matrixpanel.drawPixel(x, y, c); 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); return 0; } // 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) { int x = luaL_checkint(L, 1); int y = luaL_checkint(L, 2); matrixpanel.setCursor(x, y); return 0; } // setTextColor(uint16_t c), // setTextColor(uint16_t c, uint16_t bg), static int matrixpanel_settextcolor (lua_State *L) { int color = luaL_checkint(L, 1); // int y = luaL_checkint(L, 2); matrixpanel.setTextColor(color); return 0; } // setTextSize(uint8_t s), static int matrixpanel_settextsize (lua_State *L) { int size = luaL_checkint(L, 1); matrixpanel.setTextSize(size); return 0; } // setTextWrap(boolean w), static int matrixpanel_settextwrap (lua_State *L) { bool flag = lua_isboolean(L, 1) ? lua_toboolean(L, 1) : false; matrixpanel.setTextWrap(flag); return 0; } // setRotation(uint8_t r), static int matrixpanel_setrotation (lua_State *L) { int rot = luaL_checkint(L, 1); matrixpanel.setRotation(rot); return 0; } // setFont(const GFXfont *f = NULL), static int matrixpanel_setfont (lua_State *L) { const char *font = luaL_checkstring(L, 1); // Need to do some kind of lookup based on the string. matrixpanel.setFont(&TomThumb); return 0; } // 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) { char *string = (char *) luaL_checkstring(L, 1); // cast off the const, pointer won't actually be changed int x = luaL_checkint(L, 2); int y = luaL_checkint(L, 2); int16_t x1 = 0, y1 = 0; uint16_t w = 0, h = 0; matrixpanel.getTextBounds(string, x, y, &x1, &y1, &w, &h); lua_pushnumber(L, x1); lua_pushnumber(L, y1); lua_pushnumber(L, w); lua_pushnumber(L, h); return 4; } static const struct luaL_Reg matrixpanel_methods[] = { { "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} }; int luaopen_matrixpanel (lua_State* L) { luaL_newlib(L, matrixpanel_methods); lua_setglobal(L, "matrixpanel"); return 0; }