test export
Dependencies: DmTftLibrary mbed
Fork of dm_calc by
Button.cpp@2:b17b19212e5a, 2014-07-09 (annotated)
- Committer:
- displaymodule
- Date:
- Wed Jul 09 08:34:25 2014 +0000
- Revision:
- 2:b17b19212e5a
- Parent:
- 0:3713b01e72fe
Added fix for online compiler. Fixed issue with Button class.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
displaymodule | 0:3713b01e72fe | 1 | #include "Button.h" |
displaymodule | 0:3713b01e72fe | 2 | |
displaymodule | 0:3713b01e72fe | 3 | Button::Button(const char* caption, uint16_t x, uint16_t y, uint16_t width, uint16_t height) : |
displaymodule | 0:3713b01e72fe | 4 | _caption(caption), _x0(x), _y0(y), _x1(x+width), _y1(y+height), _bgCol(BLACK), |
displaymodule | 0:3713b01e72fe | 5 | _fgCol(WHITE), _bgColPressed(CYAN), _fgColPressed(BLACK) |
displaymodule | 0:3713b01e72fe | 6 | { |
displaymodule | 0:3713b01e72fe | 7 | _enabled = true; |
displaymodule | 0:3713b01e72fe | 8 | _pressed = false; |
displaymodule | 0:3713b01e72fe | 9 | _func = NULL; |
displaymodule | 0:3713b01e72fe | 10 | } |
displaymodule | 0:3713b01e72fe | 11 | |
displaymodule | 0:3713b01e72fe | 12 | void Button::setColors(uint16_t bg, uint16_t fg, uint16_t bgPressed, uint16_t fgPressed) |
displaymodule | 0:3713b01e72fe | 13 | { |
displaymodule | 0:3713b01e72fe | 14 | _bgCol = bg; |
displaymodule | 0:3713b01e72fe | 15 | _fgCol = fg; |
displaymodule | 0:3713b01e72fe | 16 | _bgColPressed = bgPressed; |
displaymodule | 0:3713b01e72fe | 17 | _fgColPressed = fgPressed; |
displaymodule | 0:3713b01e72fe | 18 | } |
displaymodule | 0:3713b01e72fe | 19 | |
displaymodule | 0:3713b01e72fe | 20 | bool Button::handle(uint16_t x, uint16_t y, bool pressed) |
displaymodule | 0:3713b01e72fe | 21 | { |
displaymodule | 0:3713b01e72fe | 22 | bool needsRepaint = false; |
displaymodule | 0:3713b01e72fe | 23 | if (_enabled) { |
displaymodule | 2:b17b19212e5a | 24 | if (!pressed && _pressed) { |
displaymodule | 2:b17b19212e5a | 25 | // user released => click |
displaymodule | 2:b17b19212e5a | 26 | needsRepaint = true; |
displaymodule | 2:b17b19212e5a | 27 | _pressed = false; |
displaymodule | 2:b17b19212e5a | 28 | if (_func != NULL) { |
displaymodule | 2:b17b19212e5a | 29 | _func(_funcArg); |
displaymodule | 2:b17b19212e5a | 30 | } |
displaymodule | 2:b17b19212e5a | 31 | } |
displaymodule | 2:b17b19212e5a | 32 | else if ((x >= _x0) && (y >= _y0) && (x <= _x1) && (y <= _y1)) { |
displaymodule | 0:3713b01e72fe | 33 | if (pressed && !_pressed) { |
displaymodule | 0:3713b01e72fe | 34 | // user pressing inside area |
displaymodule | 0:3713b01e72fe | 35 | needsRepaint = true; |
displaymodule | 0:3713b01e72fe | 36 | _pressed = true; |
displaymodule | 2:b17b19212e5a | 37 | } |
displaymodule | 0:3713b01e72fe | 38 | } |
displaymodule | 0:3713b01e72fe | 39 | } |
displaymodule | 0:3713b01e72fe | 40 | return needsRepaint; |
displaymodule | 0:3713b01e72fe | 41 | } |
displaymodule | 0:3713b01e72fe | 42 | |
displaymodule | 0:3713b01e72fe | 43 | void Button::draw(DmTftBase* tft) |
displaymodule | 0:3713b01e72fe | 44 | { |
displaymodule | 0:3713b01e72fe | 45 | if (_pressed) { |
displaymodule | 0:3713b01e72fe | 46 | tft->fillRectangle(_x0+1, _y0+1, _x1-1, _y1-1, _bgColPressed); |
displaymodule | 0:3713b01e72fe | 47 | tft->drawRectangle(_x0, _y0, _x1, _y1, _fgColPressed); |
displaymodule | 0:3713b01e72fe | 48 | tft->setTextColor(_bgColPressed, _fgColPressed); |
displaymodule | 0:3713b01e72fe | 49 | tft->drawStringCentered(_x0, _y0, _x1-_x0, _y1-_y0, _caption); |
displaymodule | 0:3713b01e72fe | 50 | } else { |
displaymodule | 0:3713b01e72fe | 51 | tft->fillRectangle(_x0+1, _y0+1, _x1-1, _y1-1, _bgCol); |
displaymodule | 0:3713b01e72fe | 52 | tft->drawRectangle(_x0, _y0, _x1, _y1, _fgCol); |
displaymodule | 0:3713b01e72fe | 53 | tft->setTextColor(_bgCol, _fgCol); |
displaymodule | 0:3713b01e72fe | 54 | tft->drawStringCentered(_x0, _y0, _x1-_x0, _y1-_y0, _caption); |
displaymodule | 0:3713b01e72fe | 55 | } |
displaymodule | 0:3713b01e72fe | 56 | } |