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 | }; |
