171 lines
4.0 KiB
C++
171 lines
4.0 KiB
C++
/* *************************************
|
|
* 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);
|
|
}
|
|
}
|