Simple program to demo using the SimpleGUI with TouchScreen. Widgets demonstrate handling of single- and double-tap events, as well as touchMover

Dependencies:   SimpleGUI SimpleGUITouchScreen TouchScreen UniGraphic mbed-rtos mbed

Committer:
duncanFrance
Date:
Mon Apr 11 16:54:57 2016 +0000
Revision:
2:fe93c85e8f0b
Parent:
1:ece0ecedf40a
Child:
3:ca2285e07824
Updated to use SimpleGUI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 0:402fb0c36182 1 #include "main.h"
duncanFrance 0:402fb0c36182 2
duncanFrance 2:fe93c85e8f0b 3 #include "FastFontRenderer.h"
duncanFrance 2:fe93c85e8f0b 4 #include "FFArial24x23.h"
duncanFrance 2:fe93c85e8f0b 5 #include "FFTerminal6x8.h"
duncanFrance 2:fe93c85e8f0b 6
duncanFrance 2:fe93c85e8f0b 7 #include "resources/radiator_64x64_on_bmp.h"
duncanFrance 0:402fb0c36182 8
duncanFrance 0:402fb0c36182 9 unsigned short backgroundcolor=Black;
duncanFrance 0:402fb0c36182 10 unsigned short foregroundcolor=White;
duncanFrance 0:402fb0c36182 11
duncanFrance 0:402fb0c36182 12 TouchScreen* touchScreen;
duncanFrance 0:402fb0c36182 13 TouchScreenEventSource* eventSource;
duncanFrance 0:402fb0c36182 14 EventDispatcher* eventDispatcher;
duncanFrance 0:402fb0c36182 15 TextWidget* widget1;
duncanFrance 0:402fb0c36182 16 TextWidget* widget2;
duncanFrance 0:402fb0c36182 17 TextWidget* widget3;
duncanFrance 2:fe93c85e8f0b 18 BitmapWidget* bm1;
duncanFrance 2:fe93c85e8f0b 19 ContainerWidget* cw1;
duncanFrance 2:fe93c85e8f0b 20 GUI* gui;
duncanFrance 2:fe93c85e8f0b 21 FastFontRenderer* fontRenderer;
duncanFrance 2:fe93c85e8f0b 22 FastFont* defaultFont;
duncanFrance 0:402fb0c36182 23
duncanFrance 2:fe93c85e8f0b 24 ILI932x* tft;
duncanFrance 1:ece0ecedf40a 25
duncanFrance 0:402fb0c36182 26 Serial *pc;
duncanFrance 0:402fb0c36182 27
duncanFrance 0:402fb0c36182 28 volatile bool done;
duncanFrance 0:402fb0c36182 29 volatile int xt, yt;
duncanFrance 0:402fb0c36182 30 volatile int xmin = 9999;
duncanFrance 0:402fb0c36182 31 volatile int xmax = 0;
duncanFrance 0:402fb0c36182 32 volatile int ymin = 9999;
duncanFrance 0:402fb0c36182 33 volatile int ymax = 0;
duncanFrance 0:402fb0c36182 34
duncanFrance 0:402fb0c36182 35
duncanFrance 0:402fb0c36182 36 void touchStart(TouchPosition p) {
duncanFrance 0:402fb0c36182 37 eventSource->touchStartHandler(p);
duncanFrance 0:402fb0c36182 38 }
duncanFrance 0:402fb0c36182 39
duncanFrance 0:402fb0c36182 40 void touchMove(TouchPosition p) {
duncanFrance 0:402fb0c36182 41 eventSource->touchMoveHandler(p);
duncanFrance 0:402fb0c36182 42 }
duncanFrance 0:402fb0c36182 43
duncanFrance 0:402fb0c36182 44 void touchEnd(TouchPosition p) {
duncanFrance 0:402fb0c36182 45 eventSource->touchEndHandler(p);
duncanFrance 0:402fb0c36182 46 }
duncanFrance 0:402fb0c36182 47
duncanFrance 0:402fb0c36182 48 void tapHandler1(Event e, EventListener* target) {
duncanFrance 0:402fb0c36182 49 TextWidget* w = (TextWidget*) target;
duncanFrance 0:402fb0c36182 50 if(done) {
duncanFrance 0:402fb0c36182 51 w->setBackground(Green);
duncanFrance 0:402fb0c36182 52 } else {
duncanFrance 0:402fb0c36182 53 w->setBackground(Blue);
duncanFrance 0:402fb0c36182 54 }
duncanFrance 0:402fb0c36182 55 done = !done;
duncanFrance 0:402fb0c36182 56 w->draw();
duncanFrance 0:402fb0c36182 57 }
duncanFrance 0:402fb0c36182 58 void tapHandler2(Event e, EventListener* target) {
duncanFrance 0:402fb0c36182 59 TextWidget* w = (TextWidget*) target;
duncanFrance 0:402fb0c36182 60 if(done) {
duncanFrance 0:402fb0c36182 61 w->setBackground(Green);
duncanFrance 0:402fb0c36182 62 } else {
duncanFrance 0:402fb0c36182 63 w->setBackground(Red);
duncanFrance 0:402fb0c36182 64 }
duncanFrance 0:402fb0c36182 65 done = !done;
duncanFrance 0:402fb0c36182 66 w->draw();
duncanFrance 0:402fb0c36182 67 }
duncanFrance 0:402fb0c36182 68
duncanFrance 0:402fb0c36182 69 void dragHandler(Event e, EventListener* target) {
duncanFrance 2:fe93c85e8f0b 70 Widget* w = (Widget*) target;
duncanFrance 2:fe93c85e8f0b 71 w->clear();
duncanFrance 2:fe93c85e8f0b 72 w->setLocation(w->x(), e.screenY - w->height()/2);
duncanFrance 0:402fb0c36182 73 w->draw();
duncanFrance 0:402fb0c36182 74 }
duncanFrance 0:402fb0c36182 75
duncanFrance 2:fe93c85e8f0b 76 void initSerial() {
duncanFrance 0:402fb0c36182 77 pc = new Serial(USBTX, USBRX);
duncanFrance 0:402fb0c36182 78 pc->baud (9600);
duncanFrance 0:402fb0c36182 79 pc->printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000);
duncanFrance 2:fe93c85e8f0b 80 }
duncanFrance 0:402fb0c36182 81
duncanFrance 2:fe93c85e8f0b 82 void initGui() {
duncanFrance 1:ece0ecedf40a 83
duncanFrance 2:fe93c85e8f0b 84 tft = new ILI932x(PAR_8, PortC, LCD_CS, LCD_RESET, LCD_RS, LCD_WR, LCD_RD,"myLCD");
duncanFrance 2:fe93c85e8f0b 85 tft->set_orientation(0);
duncanFrance 2:fe93c85e8f0b 86 tft->cls(); // clear the screen
duncanFrance 2:fe93c85e8f0b 87 tft->locate(0,0);
duncanFrance 2:fe93c85e8f0b 88 tft->setBackground(backgroundcolor); // set background to black
duncanFrance 2:fe93c85e8f0b 89 tft->setForeground(foregroundcolor); // set chars to white
duncanFrance 2:fe93c85e8f0b 90 tft->set_font((unsigned char*) Arial24x23);
duncanFrance 2:fe93c85e8f0b 91 eventDispatcher = new EventDispatcher();
duncanFrance 2:fe93c85e8f0b 92 fontRenderer = new FastFontRenderer();
duncanFrance 2:fe93c85e8f0b 93 defaultFont = new FastFont((uint8_t*)FFArial24x23);
duncanFrance 2:fe93c85e8f0b 94 gui = new GUI(tft, eventDispatcher, fontRenderer, defaultFont);
duncanFrance 2:fe93c85e8f0b 95 }
duncanFrance 0:402fb0c36182 96
duncanFrance 2:fe93c85e8f0b 97 void initTouchScreen() {
duncanFrance 0:402fb0c36182 98 touchScreen = new TouchScreen(T_DIN, T_DOUT, T_CLK, T_CS, T_IRQ);
duncanFrance 0:402fb0c36182 99 touchScreen->setTouchStartHandler(&touchStart);
duncanFrance 0:402fb0c36182 100 touchScreen->setTouchMoveHandler(&touchMove);
duncanFrance 0:402fb0c36182 101 touchScreen->setTouchEndHandler(&touchEnd);
duncanFrance 0:402fb0c36182 102 touchScreen->setLCDGeometry(LCD_X_RES, LCD_Y_RES, TOUCHSCREEN_ORIENTATION_PORTRAIT | TOUCHSCREEN_ORIENTATION_ROTATED);
duncanFrance 0:402fb0c36182 103 touchScreen->setCalibration(TOUCH_X_MIN, TOUCH_X_MAX, TOUCH_Y_MIN, TOUCH_Y_MAX);
duncanFrance 0:402fb0c36182 104 eventSource = new TouchScreenEventSource(touchScreen, eventDispatcher);
duncanFrance 2:fe93c85e8f0b 105 }
duncanFrance 2:fe93c85e8f0b 106
duncanFrance 2:fe93c85e8f0b 107 int main()
duncanFrance 2:fe93c85e8f0b 108 {
duncanFrance 2:fe93c85e8f0b 109
duncanFrance 2:fe93c85e8f0b 110 initSerial();
duncanFrance 2:fe93c85e8f0b 111 initGui();
duncanFrance 2:fe93c85e8f0b 112 initTouchScreen();
duncanFrance 1:ece0ecedf40a 113
duncanFrance 2:fe93c85e8f0b 114
duncanFrance 2:fe93c85e8f0b 115
duncanFrance 2:fe93c85e8f0b 116 widget1 = new TextWidget(gui);
duncanFrance 0:402fb0c36182 117 widget1->setLocation(10,10);
duncanFrance 2:fe93c85e8f0b 118 widget1->setSize(100,60);
duncanFrance 2:fe93c85e8f0b 119 widget1->setText("This widget will change\ncolour when tapped");
duncanFrance 0:402fb0c36182 120 widget1->draw();
duncanFrance 2:fe93c85e8f0b 121 widget1->setEventHandler(touchTapEvent, &tapHandler1);
duncanFrance 0:402fb0c36182 122
duncanFrance 2:fe93c85e8f0b 123 widget2 = new TextWidget(gui);
duncanFrance 0:402fb0c36182 124 widget2->setLocation(10,100);
duncanFrance 2:fe93c85e8f0b 125 widget2->setSize(200,60);
duncanFrance 2:fe93c85e8f0b 126 widget2->setText("A double-tap will make this\nwidget change colour");
duncanFrance 0:402fb0c36182 127 widget2->draw();
duncanFrance 0:402fb0c36182 128 widget2->setEventHandler(touchDoubleTapEvent, &tapHandler2);
duncanFrance 0:402fb0c36182 129
duncanFrance 2:fe93c85e8f0b 130 widget3 = new TextWidget(gui);
duncanFrance 2:fe93c85e8f0b 131 widget3->setLocation(10,10);
duncanFrance 2:fe93c85e8f0b 132 widget3->setSize(200,60);
duncanFrance 2:fe93c85e8f0b 133 widget3->setText("ABCDEF\nGHIJKL\nMNOPQRS\nTUVWXYZ");
duncanFrance 2:fe93c85e8f0b 134 widget3->draw();
duncanFrance 0:402fb0c36182 135 widget3->setEventHandler(touchMoveEvent, &dragHandler);
duncanFrance 0:402fb0c36182 136
duncanFrance 2:fe93c85e8f0b 137 bm1 = new BitmapWidget(gui);
duncanFrance 2:fe93c85e8f0b 138 bm1->setLocation(10,200);
duncanFrance 2:fe93c85e8f0b 139 bm1->setSize(64,64);
duncanFrance 2:fe93c85e8f0b 140 bm1->setBitmap(radiator_64x64_on_bmp);
duncanFrance 2:fe93c85e8f0b 141
duncanFrance 2:fe93c85e8f0b 142 cw1 = new ContainerWidget(gui);
duncanFrance 2:fe93c85e8f0b 143 cw1->setLocation(50,150);
duncanFrance 2:fe93c85e8f0b 144 cw1->setSize(20,20);
duncanFrance 2:fe93c85e8f0b 145 cw1->setBorder(4, Green);
duncanFrance 2:fe93c85e8f0b 146 cw1->append(widget1);
duncanFrance 2:fe93c85e8f0b 147 cw1->append(bm1);
duncanFrance 2:fe93c85e8f0b 148 cw1->draw();
duncanFrance 2:fe93c85e8f0b 149
duncanFrance 0:402fb0c36182 150
duncanFrance 0:402fb0c36182 151 while (1) {
duncanFrance 0:402fb0c36182 152 Thread::wait(1000);
duncanFrance 0:402fb0c36182 153 }
duncanFrance 0:402fb0c36182 154 }