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:
Fri Mar 25 16:49:45 2016 +0000
Revision:
0:402fb0c36182
Child:
1:ece0ecedf40a
Demos single and double taps and sort of demos drag

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 0:402fb0c36182 1 #include "main.h"
duncanFrance 0:402fb0c36182 2
duncanFrance 0:402fb0c36182 3
duncanFrance 0:402fb0c36182 4 unsigned short backgroundcolor=Black;
duncanFrance 0:402fb0c36182 5 unsigned short foregroundcolor=White;
duncanFrance 0:402fb0c36182 6
duncanFrance 0:402fb0c36182 7 ILI932x* mySCREEN;
duncanFrance 0:402fb0c36182 8 TouchScreen* touchScreen;
duncanFrance 0:402fb0c36182 9 TouchScreenEventSource* eventSource;
duncanFrance 0:402fb0c36182 10 EventDispatcher* eventDispatcher;
duncanFrance 0:402fb0c36182 11 TextWidget* widget1;
duncanFrance 0:402fb0c36182 12 TextWidget* widget2;
duncanFrance 0:402fb0c36182 13 TextWidget* widget3;
duncanFrance 0:402fb0c36182 14
duncanFrance 0:402fb0c36182 15 Serial *pc;
duncanFrance 0:402fb0c36182 16
duncanFrance 0:402fb0c36182 17 volatile bool done;
duncanFrance 0:402fb0c36182 18 volatile int xt, yt;
duncanFrance 0:402fb0c36182 19 volatile int xmin = 9999;
duncanFrance 0:402fb0c36182 20 volatile int xmax = 0;
duncanFrance 0:402fb0c36182 21 volatile int ymin = 9999;
duncanFrance 0:402fb0c36182 22 volatile int ymax = 0;
duncanFrance 0:402fb0c36182 23
duncanFrance 0:402fb0c36182 24
duncanFrance 0:402fb0c36182 25 void touchStart(TouchPosition p) {
duncanFrance 0:402fb0c36182 26 eventSource->touchStartHandler(p);
duncanFrance 0:402fb0c36182 27 }
duncanFrance 0:402fb0c36182 28
duncanFrance 0:402fb0c36182 29 void touchMove(TouchPosition p) {
duncanFrance 0:402fb0c36182 30 eventSource->touchMoveHandler(p);
duncanFrance 0:402fb0c36182 31 }
duncanFrance 0:402fb0c36182 32
duncanFrance 0:402fb0c36182 33 void touchEnd(TouchPosition p) {
duncanFrance 0:402fb0c36182 34 eventSource->touchEndHandler(p);
duncanFrance 0:402fb0c36182 35 }
duncanFrance 0:402fb0c36182 36
duncanFrance 0:402fb0c36182 37 void tapHandler1(Event e, EventListener* target) {
duncanFrance 0:402fb0c36182 38 TextWidget* w = (TextWidget*) target;
duncanFrance 0:402fb0c36182 39 if(done) {
duncanFrance 0:402fb0c36182 40 w->setBackground(Green);
duncanFrance 0:402fb0c36182 41 } else {
duncanFrance 0:402fb0c36182 42 w->setBackground(Blue);
duncanFrance 0:402fb0c36182 43 }
duncanFrance 0:402fb0c36182 44 done = !done;
duncanFrance 0:402fb0c36182 45 w->draw();
duncanFrance 0:402fb0c36182 46 }
duncanFrance 0:402fb0c36182 47 void tapHandler2(Event e, EventListener* target) {
duncanFrance 0:402fb0c36182 48 TextWidget* w = (TextWidget*) target;
duncanFrance 0:402fb0c36182 49 if(done) {
duncanFrance 0:402fb0c36182 50 w->setBackground(Green);
duncanFrance 0:402fb0c36182 51 } else {
duncanFrance 0:402fb0c36182 52 w->setBackground(Red);
duncanFrance 0:402fb0c36182 53 }
duncanFrance 0:402fb0c36182 54 done = !done;
duncanFrance 0:402fb0c36182 55 w->draw();
duncanFrance 0:402fb0c36182 56 }
duncanFrance 0:402fb0c36182 57
duncanFrance 0:402fb0c36182 58 void dragHandler(Event e, EventListener* target) {
duncanFrance 0:402fb0c36182 59 TextWidget* w = (TextWidget*) target;
duncanFrance 0:402fb0c36182 60 w->setLocation(e.screenX, e.screenY);
duncanFrance 0:402fb0c36182 61 w->draw();
duncanFrance 0:402fb0c36182 62 }
duncanFrance 0:402fb0c36182 63
duncanFrance 0:402fb0c36182 64 int main()
duncanFrance 0:402fb0c36182 65 {
duncanFrance 0:402fb0c36182 66 pc = new Serial(USBTX, USBRX);
duncanFrance 0:402fb0c36182 67 pc->baud (9600);
duncanFrance 0:402fb0c36182 68 pc->printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000);
duncanFrance 0:402fb0c36182 69
duncanFrance 0:402fb0c36182 70 mySCREEN = new ILI932x(PAR_8, PortC, LCD_CS, LCD_RESET, LCD_RS, LCD_WR, LCD_RD,"myLCD");
duncanFrance 0:402fb0c36182 71
duncanFrance 0:402fb0c36182 72 pc->printf("Screen id %d\r\n", mySCREEN->tftID);
duncanFrance 0:402fb0c36182 73
duncanFrance 0:402fb0c36182 74 mySCREEN->set_orientation(0);
duncanFrance 0:402fb0c36182 75 mySCREEN->cls(); // clear the screen
duncanFrance 0:402fb0c36182 76 mySCREEN->locate(0,0);
duncanFrance 0:402fb0c36182 77 mySCREEN->background(backgroundcolor); // set background to black
duncanFrance 0:402fb0c36182 78 mySCREEN->foreground(foregroundcolor); // set chars to white
duncanFrance 0:402fb0c36182 79 mySCREEN->set_font((unsigned char*) Arial24x23);
duncanFrance 0:402fb0c36182 80
duncanFrance 0:402fb0c36182 81 touchScreen = new TouchScreen(T_DIN, T_DOUT, T_CLK, T_CS, T_IRQ);
duncanFrance 0:402fb0c36182 82 touchScreen->setTouchStartHandler(&touchStart);
duncanFrance 0:402fb0c36182 83 touchScreen->setTouchMoveHandler(&touchMove);
duncanFrance 0:402fb0c36182 84 touchScreen->setTouchEndHandler(&touchEnd);
duncanFrance 0:402fb0c36182 85 touchScreen->setLCDGeometry(LCD_X_RES, LCD_Y_RES, TOUCHSCREEN_ORIENTATION_PORTRAIT | TOUCHSCREEN_ORIENTATION_ROTATED);
duncanFrance 0:402fb0c36182 86 touchScreen->setCalibration(TOUCH_X_MIN, TOUCH_X_MAX, TOUCH_Y_MIN, TOUCH_Y_MAX);
duncanFrance 0:402fb0c36182 87
duncanFrance 0:402fb0c36182 88 eventDispatcher = new EventDispatcher();
duncanFrance 0:402fb0c36182 89
duncanFrance 0:402fb0c36182 90 eventSource = new TouchScreenEventSource(touchScreen, eventDispatcher);
duncanFrance 0:402fb0c36182 91
duncanFrance 0:402fb0c36182 92 widget1 = new TextWidget(mySCREEN);
duncanFrance 0:402fb0c36182 93 widget1->setLocation(10,10);
duncanFrance 0:402fb0c36182 94 widget1->setSize(200,30);
duncanFrance 0:402fb0c36182 95 widget1->setText("Hello world I'm going to be clipped");
duncanFrance 0:402fb0c36182 96 widget1->setFont((unsigned char*) Arial24x23);
duncanFrance 0:402fb0c36182 97 widget1->draw();
duncanFrance 0:402fb0c36182 98
duncanFrance 0:402fb0c36182 99 widget2 = new TextWidget(mySCREEN);
duncanFrance 0:402fb0c36182 100 widget2->setLocation(10,100);
duncanFrance 0:402fb0c36182 101 widget2->setSize(200,30);
duncanFrance 0:402fb0c36182 102 widget2->setText("I am widget2");
duncanFrance 0:402fb0c36182 103 widget2->setFont((unsigned char*) Arial24x23);
duncanFrance 0:402fb0c36182 104 widget2->draw();
duncanFrance 0:402fb0c36182 105
duncanFrance 0:402fb0c36182 106 widget3 = new TextWidget(mySCREEN);
duncanFrance 0:402fb0c36182 107 widget3->setLocation(10,150);
duncanFrance 0:402fb0c36182 108 widget3->setSize(200,30);
duncanFrance 0:402fb0c36182 109 widget3->setText("DRAG ME!!");
duncanFrance 0:402fb0c36182 110 widget3->setFont((unsigned char*) Arial24x23);
duncanFrance 0:402fb0c36182 111 widget3->draw();
duncanFrance 0:402fb0c36182 112
duncanFrance 0:402fb0c36182 113 eventDispatcher->attachListener(widget1);
duncanFrance 0:402fb0c36182 114 widget1->setEventHandler(touchTapEvent, &tapHandler1);
duncanFrance 0:402fb0c36182 115
duncanFrance 0:402fb0c36182 116 eventDispatcher->attachListener(widget2);
duncanFrance 0:402fb0c36182 117 widget2->setEventHandler(touchDoubleTapEvent, &tapHandler2);
duncanFrance 0:402fb0c36182 118
duncanFrance 0:402fb0c36182 119 eventDispatcher->attachListener(widget3);
duncanFrance 0:402fb0c36182 120 widget3->setEventHandler(touchMoveEvent, &dragHandler);
duncanFrance 0:402fb0c36182 121
duncanFrance 0:402fb0c36182 122
duncanFrance 0:402fb0c36182 123 while (1) {
duncanFrance 0:402fb0c36182 124 Thread::wait(1000);
duncanFrance 0:402fb0c36182 125 }
duncanFrance 0:402fb0c36182 126 }