mirror of
https://git.mirrors.martin98.com/https://github.com/luc-github/ESP3D.git
synced 2025-06-06 02:36:49 +08:00
77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
/***************************************************************************************
|
|
** Code for the GFX button UI element
|
|
** Grabbed from Adafruit_GFX library and enhanced to handle any label font
|
|
***************************************************************************************/
|
|
TFT_eSPI_Button::TFT_eSPI_Button(void) {
|
|
_gfx = 0;
|
|
}
|
|
|
|
// Classic initButton() function: pass center & size
|
|
void TFT_eSPI_Button::initButton(
|
|
TFT_eSPI *gfx, int16_t x, int16_t y, uint16_t w, uint16_t h,
|
|
uint16_t outline, uint16_t fill, uint16_t textcolor,
|
|
char *label, uint8_t textsize)
|
|
{
|
|
// Tweak arguments and pass to the newer initButtonUL() function...
|
|
initButtonUL(gfx, x - (w / 2), y - (h / 2), w, h, outline, fill,
|
|
textcolor, label, textsize);
|
|
}
|
|
|
|
// Newer function instead accepts upper-left corner & size
|
|
void TFT_eSPI_Button::initButtonUL(
|
|
TFT_eSPI *gfx, int16_t x1, int16_t y1, uint16_t w, uint16_t h,
|
|
uint16_t outline, uint16_t fill, uint16_t textcolor,
|
|
char *label, uint8_t textsize)
|
|
{
|
|
_x1 = x1;
|
|
_y1 = y1;
|
|
_w = w;
|
|
_h = h;
|
|
_outlinecolor = outline;
|
|
_fillcolor = fill;
|
|
_textcolor = textcolor;
|
|
_textsize = textsize;
|
|
_gfx = gfx;
|
|
strncpy(_label, label, 9);
|
|
}
|
|
|
|
void TFT_eSPI_Button::drawButton(boolean inverted) {
|
|
uint16_t fill, outline, text;
|
|
|
|
if(!inverted) {
|
|
fill = _fillcolor;
|
|
outline = _outlinecolor;
|
|
text = _textcolor;
|
|
} else {
|
|
fill = _textcolor;
|
|
outline = _outlinecolor;
|
|
text = _fillcolor;
|
|
}
|
|
|
|
uint8_t r = min(_w, _h) / 4; // Corner radius
|
|
_gfx->fillRoundRect(_x1, _y1, _w, _h, r, fill);
|
|
_gfx->drawRoundRect(_x1, _y1, _w, _h, r, outline);
|
|
|
|
_gfx->setTextColor(text);
|
|
_gfx->setTextSize(_textsize);
|
|
|
|
uint8_t tempdatum = _gfx->getTextDatum();
|
|
_gfx->setTextDatum(MC_DATUM);
|
|
_gfx->drawString(_label, _x1 + (_w/2), _y1 + (_h/2));
|
|
_gfx->setTextDatum(tempdatum);
|
|
}
|
|
|
|
boolean TFT_eSPI_Button::contains(int16_t x, int16_t y) {
|
|
return ((x >= _x1) && (x < (_x1 + _w)) &&
|
|
(y >= _y1) && (y < (_y1 + _h)));
|
|
}
|
|
|
|
void TFT_eSPI_Button::press(boolean p) {
|
|
laststate = currstate;
|
|
currstate = p;
|
|
}
|
|
|
|
boolean TFT_eSPI_Button::isPressed() { return currstate; }
|
|
boolean TFT_eSPI_Button::justPressed() { return (currstate && !laststate); }
|
|
boolean TFT_eSPI_Button::justReleased() { return (!currstate && laststate); }
|