ELEC2645 (2018/19) / Mbed 2 deprecated el17ajf

Dependencies:   mbed

Fork of el17ajf by Angus Findlay

Menus/UI/UI.cpp

Committer:
el17ajf
Date:
2019-04-04
Revision:
26:baa7077449e7
Parent:
21:62d2b5b73160
Child:
27:2ed9e3c9f4e9

File content as of revision 26:baa7077449e7:

#include "UI.h"
#include "Graphics.h"
#include "Math.h"

namespace Menus {
    UI::UI() {
        reset();
    }
    
    void UI::reset() {
        buttonCurrentlySelected = 0; 
    }
    
    UI::~UI() {
        
    }
    
    void UI::clear() {
        buttonPressedFrame = false;
        nextYPos = PADDING_Y;
        buttonCurrentlyDrawing = -1;
    }
    
    void UI::drawTitle(const char * text) {
        drawLabel(text);
    }
    
    void UI::drawLabel(const char * text) {
        Graphics::UI::drawText(PADDING_X, nextY(), text);
    }
    
    void UI::newLine() {
        nextY();
    }
    
    int oldBorderX1,oldBorderY1, oldBorderX2, oldBorderY2;
    
    bool UI::drawAndCheckButton(const char * text) {
        buttonCurrentlyDrawing++;
        
        int y = nextY();
        
        Graphics::UI::drawText(PADDING_X, y, text);
        
        bool selected = buttonCurrentlyDrawing == buttonCurrentlySelected;
        
        int wordWidth = strlen(text) * (Graphics::UI::CHAR_WIDTH + Graphics::UI::CHAR_SPACE) - 1;
        
        if (selected) {
            int borderX1 = PADDING_X - 2;
            int borderY1 = y - 2;
            int borderX2 = PADDING_X + wordWidth + 2;
            int borderY2 = y + Graphics::UI::CHAR_HEIGHT + 1;
            Graphics::UI::drawBorder(
                Math::lerp(oldBorderX1, borderX1),
                Math::lerp(oldBorderY1, borderY1),
                Math::lerp(oldBorderX2, borderX2),
                Math::lerp(oldBorderY2, borderY2)
            );
            oldBorderX1 = Math::lerp(oldBorderX1, borderX1);
            oldBorderY1 = Math::lerp(oldBorderY1, borderY1);
            oldBorderX2 = Math::lerp(oldBorderX2, borderX2);
            oldBorderY2 = Math::lerp(oldBorderY2, borderY2);
        }
    
        return buttonPressedFrame && selected;
    }
    
    void UI::selectNextButton() {
        if (buttonCurrentlySelected < buttonCurrentlyDrawing) {
            buttonCurrentlySelected++;
        }
    }
    
    void UI::selectPreviousButton() {
        if (buttonCurrentlySelected > 0) {
            buttonCurrentlySelected--;
        }
    }
    
    void UI::pressButton() {
        buttonPressedFrame = true;
    }
    
    int UI::nextY() {
        int currentYPos = nextYPos;
        nextYPos += Graphics::UI::CHAR_HEIGHT + LINE_PADDING;
        return currentYPos;
    }
};