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:
Sun Mar 27 14:42:53 2016 +0000
Revision:
1:ece0ecedf40a
Parent:
0:402fb0c36182
Child:
2:fe93c85e8f0b
Updated to use FontRenderer

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