/* ************************************* * Includes * *************************************/ #include "Gfx.h" /* ************************************* * Defines * *************************************/ /* ************************************* * Structs and enums * *************************************/ /* ************************************* * Local variables * *************************************/ static bool GfxIsInsideScreenArea(int8_t x, int8_t y, uint8_t w, uint8_t h); void GfxInit(void) { gb.display.persistence = true; /* Clears screen automatically. */ } void GfxDrawSprite(TYPE_SPRITE* ptrSprite) { if (ptrSprite == NULL) { return; } if (GfxIsSpriteInsideScreenArea(ptrSprite) != false) { int8_t orig_color = gb.display.getColor(); gb.display.setColor(ptrSprite->color, GFX_WHITE); gb.display.drawBitmap( ptrSprite->x, ptrSprite->y, ptrSprite->Data, ptrSprite->rotation, ptrSprite->flip ); gb.display.setColor(orig_color); } } bool GfxRefreshNeeded(void) { return gb.update(); } void GfxShowKeyboard(char* str, uint8_t length) { gb.keyboard(str, length); } bool GfxIsInsideScreenArea(int8_t x, int8_t y, uint8_t w, uint8_t h) { if ( ( (x + w) >= 0) && (x < X_SCREEN_RESOLUTION) && ( (y + h) >= 0) && (y < Y_SCREEN_RESOLUTION) ) { return true; } return false; } bool GfxIsSpriteInsideScreenArea(TYPE_SPRITE* spr) { return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h); } uint8_t GfxGetWidthFromSpriteData(const uint8_t* sprData) { /* On Gamebuino bitmaps, width is always stored on first byte.. */ return pgm_read_byte_near(&sprData[0]); } uint8_t GfxGetHeightFromSpriteData(const uint8_t* sprData) { /* On Gamebuino bitmaps, height is always stored on second byte.. */ return pgm_read_byte_near(&sprData[1]); } void GfxPrintText_Flash(const __FlashStringHelper * str) { gb.popup(str, 20 * 3 /* 3 seconds */); } void GfxPrintTextFont(const char* str, const uint8_t* font, uint8_t x, uint8_t y) { uint8_t* orig_font = gb.display.getFont(); gb.display.cursorX = x; gb.display.cursorY = y; gb.display.setFont(font); gb.display.setColor(GFX_BLACK, GFX_WHITE); gb.display.print(str); if (orig_font != NULL) { gb.display.setFont(orig_font); } } void GfxPrintText(const char* str, uint8_t x, uint8_t y) { GfxPrintTextFont(str, font3x5, x, y); } void GfxDrawCircle(uint16_t x, uint16_t y, uint8_t radius, int8_t color) { if (GfxIsInsideScreenArea(x, y, radius, radius) != false) { int8_t orig_color = gb.display.getColor(); gb.display.setColor(color); gb.display.drawCircle(x, y, radius); gb.display.setColor(orig_color); } } void GfxDrawFillCircle(uint16_t x, uint16_t y, uint8_t radius, int8_t color) { if (GfxIsInsideScreenArea(x, y, radius, radius) != false) { int8_t orig_color = gb.display.getColor(); gb.display.setColor(color); gb.display.fillCircle(x, y, radius); gb.display.setColor(orig_color); } } void GfxDrawRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, int8_t color) { if (GfxIsInsideScreenArea(x, y, w, h) != false) { int8_t orig_color = gb.display.getColor(); gb.display.setColor(color); gb.display.drawRect(x, y, w, h); gb.display.setColor(orig_color); } } void GfxDrawLine(uint8_t x0, uint8_t x1, uint8_t y0, uint8_t y1, uint8_t color) { gb.display.setColor(color); gb.display.drawLine(x0, y0, x1, y1); } void GfxFillRectangle(uint8_t x, uint8_t y, uint8_t w, uint8_t h, int8_t color) { if (GfxIsInsideScreenArea(x, y, w, h) != false) { int8_t orig_color = gb.display.getColor(); gb.display.setColor(color); gb.display.fillRect(x, y, w, h); gb.display.setColor(orig_color); } }