Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of el17ajf by
Menus/UI/UI.cpp@27:2ed9e3c9f4e9, 2019-04-05 (annotated)
- Committer:
- el17ajf
- Date:
- Fri Apr 05 17:16:59 2019 +0000
- Revision:
- 27:2ed9e3c9f4e9
- Parent:
- 26:baa7077449e7
- Child:
- 30:11838cb6979f
Highscores working
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| el17ajf | 17:cc448ab7266f | 1 | #include "UI.h" | 
| el17ajf | 17:cc448ab7266f | 2 | #include "Graphics.h" | 
| el17ajf | 26:baa7077449e7 | 3 | #include "Math.h" | 
| el17ajf | 26:baa7077449e7 | 4 | |
| el17ajf | 21:62d2b5b73160 | 5 | namespace Menus { | 
| el17ajf | 21:62d2b5b73160 | 6 | UI::UI() { | 
| el17ajf | 21:62d2b5b73160 | 7 | reset(); | 
| el17ajf | 21:62d2b5b73160 | 8 | } | 
| el17ajf | 21:62d2b5b73160 | 9 | |
| el17ajf | 21:62d2b5b73160 | 10 | void UI::reset() { | 
| el17ajf | 21:62d2b5b73160 | 11 | buttonCurrentlySelected = 0; | 
| el17ajf | 21:62d2b5b73160 | 12 | } | 
| el17ajf | 21:62d2b5b73160 | 13 | |
| el17ajf | 21:62d2b5b73160 | 14 | UI::~UI() { | 
| el17ajf | 21:62d2b5b73160 | 15 | |
| el17ajf | 21:62d2b5b73160 | 16 | } | 
| el17ajf | 16:3f84f2d7b910 | 17 | |
| el17ajf | 21:62d2b5b73160 | 18 | void UI::clear() { | 
| el17ajf | 21:62d2b5b73160 | 19 | buttonPressedFrame = false; | 
| el17ajf | 21:62d2b5b73160 | 20 | nextYPos = PADDING_Y; | 
| el17ajf | 21:62d2b5b73160 | 21 | buttonCurrentlyDrawing = -1; | 
| el17ajf | 27:2ed9e3c9f4e9 | 22 | frame++; | 
| el17ajf | 21:62d2b5b73160 | 23 | } | 
| el17ajf | 17:cc448ab7266f | 24 | |
| el17ajf | 21:62d2b5b73160 | 25 | void UI::drawTitle(const char * text) { | 
| el17ajf | 21:62d2b5b73160 | 26 | drawLabel(text); | 
| el17ajf | 21:62d2b5b73160 | 27 | } | 
| el17ajf | 17:cc448ab7266f | 28 | |
| el17ajf | 21:62d2b5b73160 | 29 | void UI::drawLabel(const char * text) { | 
| el17ajf | 21:62d2b5b73160 | 30 | Graphics::UI::drawText(PADDING_X, nextY(), text); | 
| el17ajf | 21:62d2b5b73160 | 31 | } | 
| el17ajf | 21:62d2b5b73160 | 32 | |
| el17ajf | 27:2ed9e3c9f4e9 | 33 | void UI::drawFlashingLabel(const char * text) { | 
| el17ajf | 27:2ed9e3c9f4e9 | 34 | Graphics::UI::drawText(PADDING_X, nextY(), (frame % 16) > 8 ? text : ""); | 
| el17ajf | 27:2ed9e3c9f4e9 | 35 | } | 
| el17ajf | 27:2ed9e3c9f4e9 | 36 | |
| el17ajf | 21:62d2b5b73160 | 37 | void UI::newLine() { | 
| el17ajf | 21:62d2b5b73160 | 38 | nextY(); | 
| el17ajf | 21:62d2b5b73160 | 39 | } | 
| el17ajf | 17:cc448ab7266f | 40 | |
| el17ajf | 26:baa7077449e7 | 41 | int oldBorderX1,oldBorderY1, oldBorderX2, oldBorderY2; | 
| el17ajf | 26:baa7077449e7 | 42 | |
| el17ajf | 21:62d2b5b73160 | 43 | bool UI::drawAndCheckButton(const char * text) { | 
| el17ajf | 21:62d2b5b73160 | 44 | buttonCurrentlyDrawing++; | 
| el17ajf | 21:62d2b5b73160 | 45 | |
| el17ajf | 21:62d2b5b73160 | 46 | int y = nextY(); | 
| el17ajf | 21:62d2b5b73160 | 47 | |
| el17ajf | 21:62d2b5b73160 | 48 | Graphics::UI::drawText(PADDING_X, y, text); | 
| el17ajf | 21:62d2b5b73160 | 49 | |
| el17ajf | 21:62d2b5b73160 | 50 | bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected; | 
| el17ajf | 21:62d2b5b73160 | 51 | |
| el17ajf | 21:62d2b5b73160 | 52 | int wordWidth = strlen(text) * (Graphics::UI::CHAR_WIDTH + Graphics::UI::CHAR_SPACE) - 1; | 
| el17ajf | 21:62d2b5b73160 | 53 | |
| el17ajf | 21:62d2b5b73160 | 54 | if (selected) { | 
| el17ajf | 26:baa7077449e7 | 55 | int borderX1 = PADDING_X - 2; | 
| el17ajf | 26:baa7077449e7 | 56 | int borderY1 = y - 2; | 
| el17ajf | 26:baa7077449e7 | 57 | int borderX2 = PADDING_X + wordWidth + 2; | 
| el17ajf | 26:baa7077449e7 | 58 | int borderY2 = y + Graphics::UI::CHAR_HEIGHT + 1; | 
| el17ajf | 21:62d2b5b73160 | 59 | Graphics::UI::drawBorder( | 
| el17ajf | 26:baa7077449e7 | 60 | Math::lerp(oldBorderX1, borderX1), | 
| el17ajf | 26:baa7077449e7 | 61 | Math::lerp(oldBorderY1, borderY1), | 
| el17ajf | 26:baa7077449e7 | 62 | Math::lerp(oldBorderX2, borderX2), | 
| el17ajf | 26:baa7077449e7 | 63 | Math::lerp(oldBorderY2, borderY2) | 
| el17ajf | 21:62d2b5b73160 | 64 | ); | 
| el17ajf | 26:baa7077449e7 | 65 | oldBorderX1 = Math::lerp(oldBorderX1, borderX1); | 
| el17ajf | 26:baa7077449e7 | 66 | oldBorderY1 = Math::lerp(oldBorderY1, borderY1); | 
| el17ajf | 26:baa7077449e7 | 67 | oldBorderX2 = Math::lerp(oldBorderX2, borderX2); | 
| el17ajf | 26:baa7077449e7 | 68 | oldBorderY2 = Math::lerp(oldBorderY2, borderY2); | 
| el17ajf | 21:62d2b5b73160 | 69 | } | 
| el17ajf | 18:24ce897024d0 | 70 | |
| el17ajf | 21:62d2b5b73160 | 71 | return buttonPressedFrame && selected; | 
| el17ajf | 17:cc448ab7266f | 72 | } | 
| el17ajf | 21:62d2b5b73160 | 73 | |
| el17ajf | 21:62d2b5b73160 | 74 | void UI::selectNextButton() { | 
| el17ajf | 21:62d2b5b73160 | 75 | if (buttonCurrentlySelected < buttonCurrentlyDrawing) { | 
| el17ajf | 21:62d2b5b73160 | 76 | buttonCurrentlySelected++; | 
| el17ajf | 21:62d2b5b73160 | 77 | } | 
| el17ajf | 21:62d2b5b73160 | 78 | } | 
| el17ajf | 21:62d2b5b73160 | 79 | |
| el17ajf | 21:62d2b5b73160 | 80 | void UI::selectPreviousButton() { | 
| el17ajf | 21:62d2b5b73160 | 81 | if (buttonCurrentlySelected > 0) { | 
| el17ajf | 21:62d2b5b73160 | 82 | buttonCurrentlySelected--; | 
| el17ajf | 21:62d2b5b73160 | 83 | } | 
| el17ajf | 17:cc448ab7266f | 84 | } | 
| el17ajf | 21:62d2b5b73160 | 85 | |
| el17ajf | 21:62d2b5b73160 | 86 | void UI::pressButton() { | 
| el17ajf | 21:62d2b5b73160 | 87 | buttonPressedFrame = true; | 
| el17ajf | 17:cc448ab7266f | 88 | } | 
| el17ajf | 21:62d2b5b73160 | 89 | |
| el17ajf | 21:62d2b5b73160 | 90 | int UI::nextY() { | 
| el17ajf | 21:62d2b5b73160 | 91 | int currentYPos = nextYPos; | 
| el17ajf | 21:62d2b5b73160 | 92 | nextYPos += Graphics::UI::CHAR_HEIGHT + LINE_PADDING; | 
| el17ajf | 21:62d2b5b73160 | 93 | return currentYPos; | 
| el17ajf | 21:62d2b5b73160 | 94 | } | 
| el17ajf | 21:62d2b5b73160 | 95 | }; | 
