forked from Bodmer/TFT_eSPI
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
34 changed files
with
4,032 additions
and
1,916 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/*************************************************************************************** | ||
** 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); } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
/*************************************************************************************** | ||
// The following button class has been ported over from the Adafruit_GFX library so | ||
// should be compatible. | ||
// A slightly different implementation in this TFT_eSPI library allows the button | ||
// legends to be in any font | ||
***************************************************************************************/ | ||
|
||
class TFT_eSPI_Button { | ||
|
||
public: | ||
TFT_eSPI_Button(void); | ||
// "Classic" initButton() uses center & size | ||
void 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); | ||
|
||
// New/alt initButton() uses upper-left corner & size | ||
void 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); | ||
void drawButton(boolean inverted = false); | ||
boolean contains(int16_t x, int16_t y); | ||
|
||
void press(boolean p); | ||
boolean isPressed(); | ||
boolean justPressed(); | ||
boolean justReleased(); | ||
|
||
private: | ||
TFT_eSPI *_gfx; | ||
int16_t _x1, _y1; // Coordinates of top-left corner | ||
uint16_t _w, _h; | ||
uint8_t _textsize; | ||
uint16_t _outlinecolor, _fillcolor, _textcolor; | ||
char _label[10]; | ||
|
||
boolean currstate, laststate; | ||
}; |
Oops, something went wrong.