gamebloke/src/widgets.cpp

84 lines
2.6 KiB
C++

#include "widgets.h"
#include "globals.h"
#include "teensy-display.h"
Widgets::Widgets()
{
}
Widgets::~Widgets()
{
}
void Widgets::drawBatteryText() {
uint16_t back = BLACK;
char buf[10];
if (g_charge > 15) {
sprintf(buf, "Charge"); //charging
back = BLUE;
}
else {
if (g_battery > 1000) {
int bat = g_battery;
if (bat > 4200) bat = 4200;
if (bat < 3000) bat = 3000;
if (bat > 3400) back = DARK_GREEN; //Good
else if (bat > 3200) back = BROWN; //Low
else back = ORANGE; //Expired
bat = map(bat, 3000, 4200, 0, 100);
sprintf(buf, "%d%%", bat);
}
else {
sprintf(buf, "Full"); //Fully charged (off)
back = DARK_BLUE;
}
}
g_display->fillRoundRect(battX, battY, 53, 20, 5, back);
g_display->drawRoundRect(battX, battY, 53, 20, 5, battColor);
g_display->drawRoundRect(battX+52, battY+7, 5, 6, 2, battColor);
g_display->setBackground(back);
g_display->drawString(M_NORMAL, battX+2, battY+4, " ");
g_display->drawString(M_NORMAL, (battX+27) - (strlen(buf) * 4), battY+4, buf);
g_display->setBackground(DARK_BLUE);
}
void Widgets::drawBattery(int16_t x, int16_t y, uint16_t color) {
battX = x;
battY = y;
battColor = color;
drawBatteryText();
}
//Caption 1 or 2 chars long
void Widgets::drawCaptionText(uint8_t style, uint16_t x, uint16_t y, const char* str) {
uint8_t len = strlen(str)>1?4:0;
g_display->drawString(style, x-len, y, str);
}
void Widgets::drawKey (uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color, const char* str) {
g_display->drawRoundRect(x, y, w, h, 2, color);
g_display->fillRoundRect(x+2, y+2, w-4, h-4, 4, BLACK);
g_display->drawRoundRect(x+2, y+2, w-4, h-4, 4, color);
drawCaptionText(M_HIGHLIGHT, x+12, y+5, str);
}
void Widgets::drawButton (uint16_t x, uint16_t y, uint16_t color, const char* str) {
g_display->drawCircle(x+14, y+14, 14, color);
g_display->fillCircle(x+14, y+14, 12, BLACK);
g_display->drawCircle(x+14, y+14, 12, color);
drawCaptionText(M_HIGHLIGHT, x+10, y+8, str);
}
void Widgets::drawStick (uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t color, const char* str0, const char* str1, const char* str2, const char* str3) {
g_display->fillRoundRect(x, y, w, h, 6, BLACK);
g_display->drawRoundRect(x, y, w, h, 6, color);
g_display->drawCircle(x+(w/2), y+(h/2), 3, color);
uint8_t len = strlen(str0)>1?8:0;
g_display->drawString(M_HIGHLIGHT, x+(w/2)-14-len, y+(h/2)-6, str0);
g_display->drawString(M_HIGHLIGHT, x+(w/2)+6, y+(h/2)-6, str1);
drawCaptionText(M_HIGHLIGHT, x+(w/2)-3, y+(h/2)-16, str2);
drawCaptionText(M_HIGHLIGHT, x+(w/2)-3, y+(h/2)+4, str3);
}