Basic calculator example to show the LPC4088 Experiment Base Board with a touch LCD from DisplayModule

Dependencies:   DmTftLibrary mbed

Fork of dm_calc by Display Module

Committer:
embeddedartists
Date:
Wed Oct 01 11:22:41 2014 +0000
Revision:
6:2063744e0512
Parent:
2:b17b19212e5a
Updated used libraries

Who changed what in which revision?

UserRevisionLine numberNew 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 }