Library for 3.2'' uLcd Picaso Display4D system Picaso Serial Environment Command Set web: http://www.4dsystems.com.au/product/20/67/Processors_Graphics/PICASO/

Scaler.cpp

Committer:
adelino
Date:
2015-04-05
Revision:
1:a74e42cf52b2

File content as of revision 1:a74e42cf52b2:

#include "Scaler.h"

Scaler::Scaler(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _width,UINT16 _height,float _valMin,float _valInc,
               float _valMax):
    Widget(mScreen,_id,_x,_y,_width,_height,WHITE)
{
    myValMin=_valMin;
    myValInc=_valInc;
    myValMax=_valMax;
    myValue=0.0;
    myColorBkg=WHITE;
    myColorCursorUp=BLUE;
    myColorCursorDown=BLUE;

    myType=OBJ_SCALER;
    myState=SCALER_STATE_RELEASED;

    myScreen->addWidget((Widget*) this);
}
//-------------------------------------
Scaler::~Scaler(void)
{
}
//-------------------------------------
void Scaler::setColorBkg(Color _color)
{
    myColorBkg=_color;
    this->draw();
}
//--------------------------------------
void Scaler::setColorCursorUp(Color _color)
{
    myColorCursorUp=_color;
    this->draw();
}
//-------------------------------------
void Scaler::setColorCursorDown(Color _color)
{
    myColorCursorDown=_color;
    this->draw();
}
//-------------------------------------
void Scaler::draw(void)
{
    if(myIsVisible==false)
        return;
    //
    PicasoSerial* ps=0;
    ps=myScreen->getPicasoSerial();

    //rect up
    if(ps!=0)
        ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight/2,myColorBkg);

    //rect down
    if(ps!=0)
        ps->draw_filled_rectangle(myX,myY+myHeight/2+3,myX+myWidth,myY+3+myHeight,myColorBkg);

    //fleche up
    UINT16 x1=myX+myWidth/2;
    UINT16 y1=myY;

    UINT16 x2=myX+myWidth;
    UINT16 y2=myY+myHeight/2;

    UINT16 x3=myX;
    UINT16 y3=myY+myHeight/2;
    if(ps!=0)
        ps->draw_filled_triangle(x1,y1,x2,y2,x3,y3, myColorCursorUp);

    //fleche down
    x1=myX;
    y1=myY+3+myHeight/2;

    x2=myX+myWidth;
    y2=y1;

    x3=myX+myWidth/2;
    y3=y2+myHeight/2;
    if(ps!=0)
        ps->draw_filled_triangle(x1,y1,x2,y2,x3,y3, myColorCursorDown);

    //cadre
    if(ps!=0)
        ps->draw_rectangle(myX,myY,myX+myWidth,myY+myHeight+3,BLACK);
        
    ps=0;

}
//-------------------------------------
void Scaler::setInvisible(bool _state)
{
    // element devient invisible
    if(_state==true) {
        if(myIsVisible==false)
            return;

        myIsVisible=false;

        Color c= myScreen->getColorBkg();

        PicasoSerial* ps=0;
        ps=myScreen->getPicasoSerial();

        if(ps!=0) {
            ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight+3,c);
        }
        ps=0;
    }

    // element devient visible
    else {
        myIsVisible=true;


        this->draw();
    }
}
//--------------------------------------
float Scaler::getValue(GraphicMessage* msg)
{
    if(myIsVisible==false)
        return 0.0;
        
    float val=0.0;
    //
    TouchEvent ev=msg->event;
    UINT16 yn=msg->posiY;

    UINT16 y0=myY;
    UINT16 ybut1=y0+myHeight/2;
    UINT16 ybut2=y0+myHeight;
    Color couleurUp=myColorCursorUp;
    Color couleurDown=myColorCursorDown;

    if(ev==EVENT_PRESS && myState==SCALER_STATE_RELEASED) {
        //up ?
        if(yn >= y0 && yn <= ybut1) {
            myState=SCALER_STATE_PRESSED_UP;
            setColorCursorUp(WHITE);
            wait(0.1);
            setColorCursorUp(couleurUp);

            val=myValue+myValInc;
            if(val >myValMax)
                val=myValMax;

            myValue=val;
        }
        //
        //down?
        if(yn >= ybut1 && yn <= ybut2) {
            myState=SCALER_STATE_PRESSED_DOWN;
            setColorCursorDown(WHITE);
            wait(0.1);
            setColorCursorDown(couleurDown);

            val=myValue-myValInc;
            if(val <myValMin)
                val=myValMin;

            myValue=val;
        }
    }
    //
    if(ev==EVENT_RELEASE || ev==EVENT_MOVE) {
        myState=SCALER_STATE_RELEASED;
    }

    return myValue;
}