Buttons changing color when tapped.

Dependencies:   LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI BSP_DISCO_F429ZI

button.cpp

Committer:
fzajdel
Date:
2019-05-19
Revision:
2:bd49dd9c7bd6
Parent:
0:6d5a5f60d228

File content as of revision 2:bd49dd9c7bd6:

#include "button.h"

Button::Button(uint8_t x, uint8_t y, uint8_t width, uint8_t height, string Text){
    
    MyRectangle = new Rectangle(x,y,width, height);
    MyRectangle->SetText(Text, BUTTON_TEXT_COLOR, BUTTON_TEXT_BACK_COLOR);
    
    CbOnPress = NULL;
    CbOnRelease = NULL;
    
    State = RELEASED;
}

Button::Button(uint8_t x, uint8_t y, uint8_t width, uint8_t height, 
                WidgetCallback* CbOnPress, WidgetCallback* CbOnRelease, 
                string Text): CbOnPress(CbOnPress), CbOnRelease(CbOnRelease)  {

    MyRectangle = new Rectangle(x,y,width, height);
    MyRectangle->SetText(Text, BUTTON_TEXT_COLOR, BUTTON_TEXT_BACK_COLOR);
    
    State = RELEASED;
}  

bool Button::CheckRectRange(uint16_t X, uint16_t Y){
    uint16_t RectX = MyRectangle->GetX();
    uint16_t RectY = MyRectangle->GetY();
    uint16_t RectHeight = MyRectangle->GetHeight();
    uint16_t RectWidth = MyRectangle->GetHeight();
    
    return (X>=RectX && X<RectX+RectWidth && Y>=RectY && Y<RectY+RectHeight);
}

void Button::Check(uint16_t X, uint16_t Y){
    
    State = (CheckRectRange(X,Y) ? PRESSED : RELEASED);
    
    switch(State){
        case PRESSED:
            OnPress();
            break;
        case RELEASED:
            OnRelease();
            break;
    }
};         

bool Button::isPressed(uint16_t X, uint16_t Y){
    return (CheckRectRange(X,Y) ? PRESSED : RELEASED);
} 

void Button::OnPress(){
    
    MyRectangle->SetFillingColor(BUTTON_PUSH_COLOR);
    
    if(NULL != CbOnPress){
        CbOnPress->Execute();
    }
}

void Button::OnRelease(){
    
    MyRectangle->SetFillingColor(BUTTON_RELEASE_COLOR);
    
    if(NULL != CbOnRelease) {
        CbOnRelease->Execute();
    }
}       

Figure *Button::GetFigure(){
    return MyRectangle;
}