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/
ObjetGraphic.cpp
- Committer:
- adelino
- Date:
- 2014-07-06
- Revision:
- 0:65fd8b1cbf86
File content as of revision 0:65fd8b1cbf86:
#include "ObjetGraphic.h" PicasoSerial* ps=0; Screen::Screen(PicasoSerial* serial,UINT16 _x,UINT16 _y,UINT16 _w,UINT16 _h,Color _colorBkg): myXpos(_x),myYpos(_y),myWidth(_w),myHeight(_h),myColorBkg(_colorBkg) { mySerial=serial; } //------------------------------------ Screen::~Screen(void) { ps=0; for(int i=0; i<myVectorObjet.size(); i++) { delete myVectorObjet[i]; myVectorObjet[i]=0; } } //------------------------------------ UINT16 Screen::getXpos(void) { return this->myXpos; } //---------------------------------- UINT16 Screen::getYpos(void) { return this->myYpos; } //------------------------------------ UINT16 Screen::getWidth(void) { return this->myWidth; } //------------------------------------- UINT16 Screen::getHeight(void) { return this->myHeight; } //------------------------------------ void Screen::drawObj(ObjetHeader* pObj) { pObj->draw(); } //------------------------------------ void Screen::drawAll(void) { mySerial->draw_filled_rectangle(myXpos,myYpos,myXpos+myWidth,myYpos+myHeight,myColorBkg); // for(int i=0; i<myVectorObjet.size(); i++) { drawObj(myVectorObjet[i]); } } //------------------------------------- void Screen::drawCells(void) { for(int i=1; i<3; i++) { mySerial->draw_line(80*i,0,80*i,320,BLACK); } // for(int i=1; i<4; i++) { mySerial->draw_line(0,80*i,240,80*i,BLACK); } } //------------------------------------- void Screen::addObj(ObjetHeader* pObj) { myVectorObjet.push_back(pObj); } //--------------------------------------- PicasoSerial* Screen::getPicasoSerial(void) { return mySerial; } //--------------------------------------- Color Screen::getColorBkg(void) { return myColorBkg; } //-------------------------------------- bool Screen::isContent(ObjetHeader* pObj, UINT16 _x,UINT16 _y) { UINT16 xd=pObj->getXpos(); UINT16 w=pObj->getWidth(); UINT16 xf=xd+w; UINT16 yd=pObj->getYpos(); UINT16 h=pObj->getHeight(); UINT16 yf=yd+h; if(_x >= xd && _x<= xf && _y>=yd && _y<= yf) { return true; } return false; } //------------------------------------- ObjetHeader* Screen::getObjetPosition(UINT16 _x,UINT16 _y) { if(myVectorObjet.size()==0) return NULL; // for(int i=0; i<myVectorObjet.size(); i++) { if(isContent(myVectorObjet[i],_x,_y)) return myVectorObjet[i]; } return NULL; } //------------------------------------- ObjetHeader* Screen::getObjetById(UINT16 _id) { if(myVectorObjet.size()==0) return NULL; // for(int i=0; i<myVectorObjet.size(); i++) { if((myVectorObjet[i]->getElementId())== _id) return myVectorObjet[i]; } return NULL; } //------------------------------------- TouchEvent Screen::getTouchEvent(GraphicMessage* msg) { TouchEvent ev=EVENT_NO_ACTIVITY; UINT16 xp=0; UINT16 yp=0; ev=mySerial->touch_get_status(); // if(ev >EVENT_NO_ACTIVITY) { xp=mySerial->touch_get_x(); yp=mySerial->touch_get_y(); msg->event=ev; msg->posiX=xp; msg->posiY=yp; msg->objId=0; return ev; } else { msg->event=EVENT_NO_ACTIVITY; msg->posiX=0; msg->posiY=0; msg->objId=0; } // return ev; } //------------------------------------- void Screen::getProcessMessage(GraphicMessage* msg) { UINT16 xt=msg->posiX; UINT16 yt=msg->posiY; UINT16 res=0; ObjetHeader* obj=NULL; obj=getObjetPosition(xt,yt); if(obj!=NULL && obj->getIsVisible()==true) { res=obj->getElementId(); msg->objId=res; } else { msg->objId=0; } } //------------------------------------- // // // //--------------------------------------- ObjetHeader::ObjetHeader(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _w,UINT16 _h,Color _color,bool _isVisible): myScreen(mScreen),myElementId(_id),myX(_x),myY(_y),myWidth(_w),myHeight(_h),myColor(_color),myElementIsVisible(_isVisible) { myElementState=STATE_ON; myIsUpdateAutomatic=true; myXMoveMin=myScreen->getXpos(); myYMoveMin=myScreen->getYpos(); myXMoveMax=myXMoveMin+myScreen->getWidth(); myYMoveMax= myYMoveMin+myScreen->getHeight(); mySpeedX=0.0; mySpeedY=0.0; } //------------------------------------- ObjetHeader::~ObjetHeader(void) { } //------------------------------------- void ObjetHeader::updateCellId(void) { UINT16 cellX=myX/(ObjetHeader::CELL_DIM); UINT16 cellY=myY/(ObjetHeader::CELL_DIM); myCellId=cellX+(cellY*ObjetHeader::CELL_COL); } //------------------------------------- UINT16 ObjetHeader::getCellId(void) { return this->myCellId; } //------------------------------------- void ObjetHeader::setUpdateAutomatic(bool _state) { myIsUpdateAutomatic=_state; } //--------------------------------------- bool ObjetHeader::getUpdateAutomatic(void) { return this->myIsUpdateAutomatic; } //------------------------------------- bool ObjetHeader::overlapWith(ObjetHeader* pObj) { return overlap(this,pObj); } //------------------------------------- bool ObjetHeader::overlap(ObjetHeader* pObj1,ObjetHeader* pObj2) { UINT16 x1=pObj1->getXpos(); UINT16 x2=pObj2->getXpos(); UINT16 y1=pObj1->getYpos(); UINT16 y2=pObj2->getYpos(); UINT16 xa=pObj1->getXpos()+pObj1->getWidth(); UINT16 xb=pObj2->getXpos()+pObj2->getWidth(); UINT16 ya=pObj1->getYpos()+pObj1->getHeight(); UINT16 yb=pObj2->getYpos()+pObj2->getHeight(); // if(x1 <xb && xa>x2 && y1<yb && ya>y2) { return true; } else { return false; } } //------------------------------------- void ObjetHeader::elementUpdate(void) { switch(myElementState) { // case BUMP_DOWN: setInvertSpeedY(); myElementState=STATE_ON; break; // case BUMP_LEFT: setInvertSpeedX(); myElementState=STATE_ON; break; // case BUMP_RIGHT: setInvertSpeedX(); myElementState=STATE_ON; break; // case BUMP_UP: setInvertSpeedY(); myElementState=STATE_ON; break; // case STATE_OFF: break; // default: break; } // } //------------------------------------- void ObjetHeader::draw(void) { //to do } //------------------------------------- UINT16 ObjetHeader::getXpos(void) { return this->myX; } //--------------------------------------- UINT16 ObjetHeader::getYpos(void) { return this->myY; } //---------------------------------------- UINT16 ObjetHeader::getWidth(void) { return this->myWidth; } //---------------------------------------- UINT16 ObjetHeader::getHeight(void) { return this->myHeight; } //---------------------------------------- UINT16 ObjetHeader::getElementId(void) { return this->myElementId; } //---------------------------------------- GRAPHIC_OBJ_TYPE ObjetHeader::getElementType(void) { return this->myElementType; } //---------------------------------------- bool ObjetHeader::getIsVisible(void) { return this->myElementIsVisible; } //---------------------------------------- float ObjetHeader::getSpeedX(void) { return this->mySpeedX; } //---------------------------------------- float ObjetHeader::getSpeedY(void) { return this->mySpeedY; } //---------------------------------------- Color ObjetHeader::getColor(void) { return myColor; } //---------------------------------------- void ObjetHeader::setVisibility(bool _val) { (this->myElementIsVisible)=_val; } //---------------------------------------- State ObjetHeader::getElementState(void) { return this->myElementState; } //---------------------------------------- void ObjetHeader::setInvertSpeedX(void) { mySpeedX=-(this->mySpeedX); } //---------------------------------------- void ObjetHeader::setInvertSpeedY(void) { mySpeedY=-(this->mySpeedY); } //---------------------------------------- void ObjetHeader::setSpeedX(float _speedX) { mySpeedX=_speedX; } //---------------------------------------- void ObjetHeader::setSpeedY(float _speedY) { mySpeedY=_speedY; } //---------------------------------------- void ObjetHeader::setSpeedXY(float _speedX,float _speedY) { mySpeedX=_speedX; mySpeedY=_speedY; } //------------------------------------------ void ObjetHeader::setColor(Color _color) { myColor=_color; } //------------------------------------------ void ObjetHeader::setElementState(State _state) { myElementState=_state; } //------------------------------------------ void ObjetHeader::setElementId(UINT16 _id) { myElementId=_id; } //------------------------------------------ void ObjetHeader::setXpos(UINT16 _xpos) { this->myX=_xpos; } //------------------------------------------ void ObjetHeader::setYpos(UINT16 _ypos) { this->myY=_ypos; } //------------------------------------------- // // // //-------------------------------------------- void Isocele::updateOrientation(void) { switch(myOrientation) { // case Isocele::ORIENTATION_UP: mySpeedX=0.0; mySpeedY=-mySpeed; myX=myXcenter-myRadius; myY=myYcenter-myRadius; myWidth=myRadius+myRadius; myHeight=myRadius; myX1=myXcenter; myY1=myYcenter-myRadius; myX2=myXcenter-myRadius; myY2=myYcenter; myX3=myXcenter+myRadius; myY3=myYcenter; break; // case Isocele::ORIENTATION_RIGHT: mySpeedX=mySpeed; mySpeedY=0.0; myX=myXcenter; myY=myYcenter-myRadius; myWidth=myRadius; myHeight=myRadius+myRadius; myX1=myXcenter; myY1=myYcenter-myRadius; myX2=myXcenter; myY2=myYcenter+myRadius; myX3=myXcenter+myRadius; myY3=myYcenter; break; // case Isocele::ORIENTATION_DOWN: mySpeedX=0.0; mySpeedY=mySpeed; myX=myXcenter-myRadius; myY=myYcenter; myWidth=myRadius+myRadius; myHeight=myRadius; myX1=myXcenter-myRadius; myY1=myYcenter; myX2=myXcenter; myY2=myYcenter+myRadius; myX3=myXcenter+myRadius; myY3=myYcenter; break; // case Isocele::ORIENTATION_LEFT: mySpeedX=-mySpeed; mySpeedY=0.0; myX=myXcenter-myRadius; myY=myYcenter-myRadius; myWidth=myRadius; myHeight=myRadius+myRadius; myX1=myXcenter-myRadius; myY1=myYcenter; myX2=myXcenter; myY2=myYcenter+myRadius; myX3=myXcenter; myY3=myYcenter-myRadius; break; // default: break; } } //-------------------------------------------- Isocele::Isocele(Screen* mScreen,UINT16 _id,UINT16 xc,UINT16 yc,UINT16 radius,int orientation,float _speed, Color color,bool isVisible): ObjetHeader(mScreen,_id,xc-radius,yc-radius,radius+radius,radius,color,isVisible) { myXcenter=xc; myYcenter=yc; myRadius=radius; myOrientation=orientation; mySpeed=_speed; updateOrientation(); myIsUpdateAutomatic=false; myElementType=OBJ_ISOCELE; myScreen->addObj((ObjetHeader*) this); } //-------------------------------------------- void Isocele::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_triangle(myX1,myY1,myX2,myY2,myX3,myY3,myColor); // //ps->draw_rectangle(myX,myY,myX+myWidth,myY+myHeight,BLACK); } } //--------------------------------------------- Isocele::~Isocele(void) { } //-------------------------------------------- void Isocele:: setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_triangle(myX1,myY1,myX2,myY2,myX3,myY3,c); //ps->draw_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //------------------------------------------- void Isocele::setNewPosition(INT16 _xcnew,INT16 _ycnew) { if(myElementIsVisible==false) return; // if(myXcenter==_xcnew && myYcenter==_ycnew) return; // this->setInvisible(true); // colorie le cir avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xcnew+myRadius >= myXMoveMax) { _xcnew=myXMoveMax-myRadius; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } //test Xmin if(_xcnew <= myRadius) { _xcnew=myXMoveMin+myRadius; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ycnew +myRadius >= myYMoveMax && _ycnew >0) { _ycnew = myYMoveMax- myRadius; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ycnew <= myRadius) { _ycnew=myYMoveMin+myRadius; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myXcenter=_xcnew; myYcenter=_ycnew; updateOrientation(); this->draw(); } //-------------------------------------------- void Isocele::myElementUpdate(void) { switch(myElementState) { // case BUMP_DOWN: setInvertSpeedY(); myElementState=STATE_ON; myOrientation=Isocele::ORIENTATION_UP; break; // case BUMP_LEFT: setInvertSpeedX(); myElementState=STATE_ON; myOrientation=Isocele::ORIENTATION_RIGHT; break; // case BUMP_RIGHT: setInvertSpeedX(); myElementState=STATE_ON; myOrientation=Isocele::ORIENTATION_LEFT; break; // case BUMP_UP: setInvertSpeedY(); myElementState=STATE_ON; myOrientation=Isocele::ORIENTATION_DOWN; break; // case STATE_OFF: break; // default: break; } } //-------------------------------------------- void Isocele::update(float delta) { if(myIsUpdateAutomatic) myElementUpdate(); // float xnew=myXcenter+mySpeedX*delta; float ynew=myYcenter+mySpeedY*delta; this->setNewPosition((INT16)xnew,(INT16)ynew); updateCellId(); } //-------------------------------------------- void Isocele::setOrientation(int _orientation) { myOrientation=_orientation; } //-------------------------------------------- int Isocele::getOrientation(void) { return this->myOrientation; } //-------------------------------------------- UINT16 Isocele::getXcenter(void) { return this->myXcenter; } //-------------------------------------------- UINT16 Isocele::getYcenter(void) { return this->myYcenter; } //-------------------------------------------- void Isocele::turnLeft(void) { myOrientation+=1; if(myOrientation >Isocele::ORIENTATION_RIGHT) myOrientation=ORIENTATION_UP; } //-------------------------------------------- void Isocele::turnRight(void) { myOrientation-=1; if(myOrientation <Isocele::ORIENTATION_UP) myOrientation=ORIENTATION_RIGHT; } //-------------------------------------------- // // // Rectangle::Rectangle(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _w,UINT16 _h,Color _color,bool _isVisible): ObjetHeader(mScreen,_id,_x,_y,_w,_h,_color,_isVisible) { myElementType=OBJ_RECTANGLE; myScreen->addObj((ObjetHeader*) this); } //------------------------------------ Rectangle::~Rectangle(void) { } //------------------------------------ void Rectangle::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,myColor); } } //------------------------------------- void Rectangle::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //-------------------------------------- void Rectangle::setNewPosition(INT16 _xnew,INT16 _ynew) { if(myElementIsVisible==false) return; // if(myX==_xnew && myY==_ynew) return; setInvisible(true); // colorie le rec avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xnew+myWidth >= myXMoveMax) { _xnew=myXMoveMax-myWidth; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } //test Xmin if(_xnew <= myXMoveMin) { _xnew=myXMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ynew +myHeight >= myYMoveMax && _ynew >0) { _ynew = myYMoveMax- myHeight; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ynew <= myYMoveMin) { _ynew=myYMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myX=_xnew; myY=_ynew; this->draw(); } //-------------------------------------- void Rectangle::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); // float xnew=myX+mySpeedX*delta; float ynew=myY+mySpeedY*delta; this->setNewPosition((INT16)xnew,(INT16)ynew); updateCellId(); } //------------------------------------- // // Circle::Circle(Screen* mScreen,UINT16 _id,UINT16 _xc,UINT16 _yc,UINT16 _radius,Color _color,bool _isVisible): ObjetHeader(mScreen,_id,_xc-_radius,_yc-_radius,_radius+_radius,_radius+_radius,_color,_isVisible) { myRadius=_radius; myCenterX=_xc; myCenterY=_yc; myElementType=OBJ_CIRCLE; myScreen->addObj((ObjetHeader*) this); } //----------------------------------------- Circle::~Circle(void) { } //------------------------------------------ void Circle::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_circle(myCenterX,myCenterY,myRadius,myColor); } } //------------------------------------------ void Circle::setCenterX(UINT16 _xcenter) { this->myCenterX=_xcenter; } //------------------------------------------ void Circle::setCenterY(UINT16 _ycenter) { this->myCenterY=_ycenter; } //------------------------------------------ UINT16 Circle::getCenterX(void) { return this->myCenterX; } //------------------------------------------- UINT16 Circle::getCenterY(void) { return this->myCenterY; } //-------------------------------------------- void Circle::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_circle(myCenterX,myCenterY,myRadius,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //--------------------------------------------- void Circle::setNewPosition(INT16 _xcnew,INT16 _ycnew) { if(myElementIsVisible==false) return; // if(myCenterX==_xcnew && myCenterY==_ycnew) return; // this->setInvisible(true); // colorie le cir avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xcnew+myRadius >= myXMoveMax) { _xcnew=myXMoveMax-myRadius; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } //test Xmin if(_xcnew <= myRadius) { _xcnew=myXMoveMin+myRadius; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ycnew +myRadius >= myYMoveMax && _ycnew >0) { _ycnew = myYMoveMax- myRadius; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ycnew <= myRadius) { _ycnew=myYMoveMin+myRadius; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myCenterX=_xcnew; myCenterY=_ycnew; myX=_xcnew-myRadius; myY=_ycnew-myRadius; this->draw(); } //---------------------------------------------- void Circle::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); float xcnew=myCenterX+mySpeedX*delta; float ycnew=myCenterY+mySpeedY*delta; this->setNewPosition((INT16)xcnew,(INT16)ycnew); updateCellId(); } //---------------------------------------------- // // // Ellipse::Ellipse(Screen* mScreen,UINT16 _id,UINT16 _xc,UINT16 _yc,UINT16 _radiusX,UINT16 _radiusY,Color _color, bool _isVisible):ObjetHeader(mScreen,_id,_xc-_radiusX,_yc-_radiusY,_radiusX+_radiusX,_radiusY+_radiusY,_color,_isVisible) { myCenterX=_xc; myCenterY=_yc; myRadiusX=_radiusX; myRadiusY=_radiusY; myElementType=OBJ_ELLIPSE; myScreen->addObj((ObjetHeader*) this); } //---------------------------------------------- void Ellipse::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_ellipse(myCenterX,myCenterY,myRadiusX,myRadiusY,myColor); } } //---------------------------------------------- void Ellipse::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); float xcnew=myCenterX+mySpeedX*delta; float ycnew=myCenterY+mySpeedY*delta; this->setNewPosition((INT16)xcnew,(INT16)ycnew); updateCellId(); } //----------------------------------------------- void Ellipse::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_ellipse(myCenterX,myCenterY,myRadiusX,myRadiusY,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //----------------------------------------------- void Ellipse::setNewPosition(INT16 _xcnew,INT16 _ycnew) { if(myElementIsVisible==false) return; // if(myCenterX==_xcnew && myCenterY==_ycnew) return; // this->setInvisible(true); // colorie le cir avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xcnew+myRadiusX >= myXMoveMax) { _xcnew=myXMoveMax-myRadiusX; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } //test Xmin if(_xcnew <= myRadiusX) { _xcnew=myXMoveMin+myRadiusX; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ycnew +myRadiusY >= myYMoveMax && _ycnew >0) { _ycnew = myYMoveMax- myRadiusY; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ycnew <= myRadiusY) { _ycnew=myYMoveMin+myRadiusY; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myCenterX=_xcnew; myCenterY=_ycnew; myX=_xcnew-myRadiusX; myY=_ycnew-myRadiusY; this->draw(); } //----------------------------------------------- Ellipse::~Ellipse(void) { } //---------------------------------------------- UINT16 Ellipse::getCenterX(void) { return this->myCenterX; } //--------------------------------------------- UINT16 Ellipse::getCenterY(void) { return this->myCenterY; } //---------------------------------------------- void Ellipse::setCenterX(UINT16 _xcenter) { myCenterX=_xcenter; } //---------------------------------------------- void Ellipse::setCenterY(UINT16 _ycenter) { myCenterY=_ycenter; } //---------------------------------------------- // // // Triangle::Triangle(Screen* mScreen,UINT16 _id,UINT16 _x1,UINT16 _y1, UINT16 _x2,UINT16 _y2, UINT16 _x3,UINT16 _y3,Color _color,bool _isVisible): ObjetHeader(mScreen,_id,_x2,_y1,_x3-_x2,_y3-_y1,_color,_isVisible) { myX1=_x1; myY1=_y1; myX2=_x2; myY2=_y2; myX3=_x3; myY3=_y3; myU=_x1-_x2; myV=_y2-_y1; myElementType=OBJ_TRIANGLE; myScreen->addObj((ObjetHeader*) this); } //----------------------------------------------- Triangle::~Triangle(void) { } //----------------------------------------------- void Triangle::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_triangle(myX1,myY1,myX2,myY2,myX3,myY3,myColor); } } //------------------------------------------------ void Triangle::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_triangle(myX1,myY1,myX2,myY2,myX3,myY3,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //------------------------------------------------ void Triangle::setNewPosition(INT16 _xnew,INT16 _ynew) { if(myElementIsVisible==false) return; // if(myX==_xnew && myY==_ynew) return; setInvisible(true); // colorie le tri avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xnew+myWidth >= myXMoveMax) { _xnew=myXMoveMax-myWidth; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } // //test Xmin if(_xnew <= myXMoveMin) { _xnew=myXMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ynew +myHeight >= myYMoveMax && _ynew >0) { _ynew = myYMoveMax- myHeight; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ynew <= myYMoveMin) { _ynew=myYMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myX=_xnew; myY=_ynew; myX1=_xnew+myU; myY1=_ynew; myX2=_xnew; myY2=_ynew+myV; myX3=_xnew+myWidth; myY3=_ynew+myHeight; this->draw(); } //------------------------------------------------ void Triangle::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); // float xnew=myX+mySpeedX*delta; float ynew=myY+mySpeedY*delta; this->setNewPosition((INT16)xnew,(INT16)ynew); updateCellId(); } //------------------------------------------------- // // Diamond::Diamond(Screen* mScreen,UINT16 _id,UINT16 x1,UINT16 y1,UINT16 x2,UINT16 y2, UINT16 x3,UINT16 y3,UINT16 x4,UINT16 y4,Color _color,bool _isVisible):ObjetHeader(mScreen,_id,x1,y4,x3-x1,y2-y4,_color,_isVisible) { myX1=x1; myY1=y1; myX2=x2; myY2=y2; myX3=x3; myY3=y3; myX4=x4; myY4=y4; myU1=x4-x1; myU2=x2-x1; myV1=y1-y4; myV2=y3-y4; myElementType=OBJ_DIAMOND; myScreen->addObj((ObjetHeader*) this); } //----------------------------------------- void Diamond::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_diamond(myX1,myY1,myX2,myY2,myX3,myY3,myX4,myY4,myColor); } } //----------------------------------------- Diamond::~Diamond(void) { } //---------------------------- void Diamond::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); // float xnew=myX+mySpeedX*delta; float ynew=myY+mySpeedY*delta; this->setNewPosition((INT16)xnew,(INT16)ynew); updateCellId(); } //------------------------------- void Diamond::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_diamond(myX1,myY1,myX2,myY2,myX3,myY3,myX4,myY4,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //--------------------------------- void Diamond::setNewPosition(INT16 _xnew,INT16 _ynew) { if(myElementIsVisible==false) return; // if(myX==_xnew && myY==_ynew) return; setInvisible(true); // colorie le tri avec couleur de la screen myElementIsVisible=true; //test Xmax if(_xnew+myWidth >= myXMoveMax) { _xnew=myXMoveMax-myWidth; if(myElementState==STATE_ON) myElementState=BUMP_RIGHT; } // //test Xmin if(_xnew <= myXMoveMin) { _xnew=myXMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_LEFT; } //test Ymax if(_ynew +myHeight >= myYMoveMax && _ynew >0) { _ynew = myYMoveMax- myHeight; if(myElementState==STATE_ON) myElementState=BUMP_DOWN; } //test yminMin; if(_ynew <= myYMoveMin) { _ynew=myYMoveMin; if(myElementState==STATE_ON) myElementState=BUMP_UP; } // myX=_xnew; myY=_ynew; myX1=_xnew; myY1=_ynew+myV1; myX2=_xnew+myU2; myY2=_ynew+myHeight; myX3=_xnew+myWidth; myY3=_ynew+myV2; myX4=_xnew+myU1; myY4=_ynew; this->draw(); } //--------------------------------- // // // Label::Label(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y, string _text,Font _font,Color _colorText,Color _colorBkg, bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,10,10,_colorBkg,_isVisible) { myText=_text; myFont=_font; myColorText=_colorText; myElementType=OBJ_LABEL; // UINT16 largeur=0; UINT16 hauteur=16; UINT16 taille=0; UINT16 incLargeur=12; switch(_font) { // case FONT_2: incLargeur=8; hauteur=8; largeur=8; break; // case FONT_3: incLargeur=8; hauteur=12; largeur=8; break; // case FONT_1: incLargeur=5; hauteur=7; largeur=5; break; // default: incLargeur=12; hauteur=16; largeur=8; break; } //cherche taille /* while(*_text) { taille++; largeur=largeur+incLargeur; _text++; } _text=_text-taille; */ taille=_text.size(); largeur=incLargeur*taille; if(largeur > incLargeur) largeur=largeur-incLargeur; myWidth=largeur; myHeight=hauteur; myScreen->addObj((ObjetHeader*) this); } //----------------------------------------------------- Label::~Label(void) { //myText=0; } //----------------------------------------------------- void Label::draw(void) { // isVisible ? if(myElementIsVisible==false) { return; } // ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_string(myText,myX,myY,myFont,myColorText,myColor); } } //------------------------------------------------------ void Label::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //------------------------------------------------------- void Label::setNewText(string _newText) { //if(myElementIsVisible==false) // return; UINT16 hauteur=16; UINT16 incLargeur=12; UINT16 taille=0; switch(myFont) { // case FONT_2: incLargeur=8; hauteur=8; break; // case FONT_3: incLargeur=8; hauteur=12; break; // case FONT_1: incLargeur=5; hauteur=7; break; // default: incLargeur=12; hauteur=16; break; } taille=_newText.size(); //myWidth=_nbChar*incLargeur; myWidth=taille*incLargeur; myHeight=hauteur; myText=_newText; setInvisible(true); setInvisible(false); // this->draw(); } //------------------------------------------------------- GraphicLed::GraphicLed(Screen* mScreen,UINT16 _id,UINT16 _xc,UINT16 _yc,UINT16 _radius, Color _colorOn,Color _colorOff,State _state, bool _isVisible):ObjetHeader(mScreen,_id,_xc-_radius,_yc-_radius,_radius+_radius,_radius+_radius,_colorOn,_isVisible) { myColorOn=_colorOn; myColorOff=_colorOff; myRadius=_radius; myCenterX=_xc; myCenterY=_yc; myElementState=_state; myElementType=OBJ_LED; myScreen->addObj((ObjetHeader*) this); } //--------------------------------------- GraphicLed::~GraphicLed(void) { } //--------------------------------------- void GraphicLed::draw(void) { if(myElementIsVisible==false) return; UINT16 state=getElementState(); //static PicasoSerial* ps=0; ps=myScreen->getPicasoSerial(); switch(state) { // case LED_STATE_ON: if(ps!=0) { ps->draw_filled_circle(myCenterX,myCenterY,myRadius,myColorOn); ps->draw_circle(myCenterX,myCenterY,myRadius,BLACK); } return; // case LED_STATE_OFF: if(ps!=0) { ps->draw_filled_circle(myCenterX,myCenterY,myRadius,myColorOff); ps->draw_circle(myCenterX,myCenterY,myRadius,BLACK); } return; // default: break; } } //--------------------------------------- void GraphicLed::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); //static PicasoSerial* ps=0; ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_circle(myCenterX,myCenterY,myRadius,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //--------------------------------------- void GraphicLed::setState(State _state) { if(myElementIsVisible==false) return; if(myElementState==_state) return; myElementState=_state; this->draw(); } //--------------------------------------- Button::Button(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,string _text,Font _font, Color _colorText,Color _colorBtn,State _state, bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,0,0,_colorBtn,_isVisible) { myText=_text; myFont=_font; myColorText=_colorText; myElementState=_state; myElementType=OBJ_BUTTON; // UINT16 largeur=0; UINT16 hauteur=16; UINT16 taille=0; UINT16 incLargeur=12; switch(_font) { // case FONT_2: incLargeur=8; hauteur=8; largeur=8; break; // case FONT_3: incLargeur=8; hauteur=12; largeur=8; break; // case FONT_1: incLargeur=5; hauteur=7; largeur=5; break; // default: incLargeur=12; hauteur=16; largeur=8; break; } //cherche taille /* while(*_text) { taille++; largeur=largeur+incLargeur; _text++; } _text=_text-taille; */ taille=_text.size(); largeur=taille*incLargeur; if(largeur > incLargeur) largeur=largeur-incLargeur; myWidth=largeur+incLargeur+incLargeur; myHeight=hauteur+incLargeur+incLargeur; myScreen->addObj((ObjetHeader*) this); // } //-------------------------------------- Button::~Button(void) { } //--------------------------------------- void Button::draw(void) { if(myElementIsVisible==false) return; UINT16 state=getElementState(); ps=myScreen->getPicasoSerial(); switch(state) { // case BUTTON_STATE_PRESSED: if(ps!=0) { ps->draw_button(myText,myX,myY,myFont,BUTTON_STATE_PRESSED,myColor,WHITE); } return; // case BUTTON_STATE_RELEASED: if(ps!=0) { ps->draw_button(myText,myX,myY,myFont,BUTTON_STATE_RELEASED,myColor,myColorText); } return; // default: break; } } //----------------------------------- void Button::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //------------------------------------ void Button::setState(State _state) { if(myElementIsVisible==false) return; if(myElementState==_state) return; myElementState=_state; this->draw(); } //------------------------------------- Slider::Slider(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _width,UINT16 _height,int _valMax,int _value, Color _colorBkg,bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,_width,_height,_colorBkg,_isVisible) { myValueMax=_valMax; myValue=_value; myElementType=OBJ_SLIDER; myElementState=SLIDER_STATE_RELEASED; myScreen->addObj((ObjetHeader*) this); } //--------------------------------------- Slider::~Slider(void) { } //--------------------------------------- void Slider::draw(void) { if(myElementIsVisible==false) return; ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_slider(0x0000,myX,myY,myX+myWidth,myY+myHeight,myColor,myValueMax,myValue); } } //-------------------------------------- void Slider::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //------------------------------------- int Slider::getValue(GraphicMessage* pmsg) { TouchEvent msgEvent=pmsg->event; UINT16 xn=pmsg->posiX; if(myElementIsVisible==false) return 0; // if(msgEvent==EVENT_RELEASE) { myElementState=SLIDER_STATE_RELEASED; } // if(msgEvent==EVENT_MOVE) { myElementState=SLIDER_STATE_MOVE; UINT16 dis=xn-myX; UINT16 a=dis*myValueMax; myValue=(a/myWidth); this->draw(); } return myValue; } //------------------------------------- Input::Input(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _width,UINT16 _height,float _valMin,float _valInc, float _valMax,bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,_width,_height,WHITE,_isVisible) { myValMin=_valMin; myValInc=_valInc; myValMax=_valMax; myValue=0.0; myColorBkg=WHITE; myColorCursorUp=BLUE; myColorCursorDown=BLUE; myElementType=OBJ_INPUT; myElementState=INPUT_STATE_RELEASED; myScreen->addObj((ObjetHeader*) this); } //------------------------------------- Input::~Input(void) { } //------------------------------------- void Input::setColorBkg(Color _color) { myColorBkg=_color; this->draw(); } //-------------------------------------- void Input::setColorCursorUp(Color _color) { myColorCursorUp=_color; this->draw(); } //------------------------------------- void Input::setColorCursorDown(Color _color) { myColorCursorDown=_color; this->draw(); } //------------------------------------- void Input::draw(void) { if(myElementIsVisible==false) return; // 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); } //------------------------------------- void Input::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight+3,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //-------------------------------------- float Input::getValue(GraphicMessage* msg) { if(myElementIsVisible==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 && myElementState==INPUT_STATE_RELEASED) { //up ? if(yn >= y0 && yn <= ybut1) { myElementState=INPUT_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) { myElementState=INPUT_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) { myElementState=INPUT_STATE_RELEASED; } return myValue; } //-------------------------------------- Switch::Switch(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,UINT16 _width,UINT16 _height, bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,_width,_height,WHITE,_isVisible) { myColorOn=GREEN; myColorOff=RED; myColorCursor=WHITE; myElementType=OBJ_SWITCH; myElementState=SWITCH_STATE_OFF; myScreen->addObj((ObjetHeader*) this); } //--------------------------------------- Switch::~Switch(void) { } //--------------------------------------- void Switch::draw(void) { if(myElementIsVisible==false) return; // ps=myScreen->getPicasoSerial(); State state=myElementState; Color gauche=WHITE; Color droite=WHITE; switch(state) { // case SWITCH_STATE_ON: droite=myColorOn; gauche=myColorCursor; break; // case SWITCH_STATE_OFF: droite=myColorCursor; gauche=myColorOff; break; // default: break; } // //rect gauche if(ps!=0) ps->draw_filled_rectangle(myX,myY,myX+myWidth/2,myY+myHeight,gauche); //rect droite if(ps!=0) ps->draw_filled_rectangle(myX+myWidth/2,myY,myX+myWidth,myY+myHeight,droite); //cadre if(ps!=0) { ps->draw_rectangle(myX,myY,myX+myWidth,myY+myHeight,BLACK); ps->draw_rectangle(myX,myY,myX+myWidth/2,myY+myHeight,BLACK); } } //---------------------------------------- void Switch::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //----------------------------------------- void Switch::setState(State _state) { if(myElementIsVisible==false) return; if(myElementState==_state) return; myElementState=_state; this->draw(); } //----------------------------------------- void Switch::changeState(GraphicMessage* msg) { TouchEvent ev=msg->event; if(myElementIsVisible==false) return; if(ev==EVENT_PRESS && myElementState==SWITCH_STATE_OFF) { this->setState(SWITCH_STATE_ON); return; } // if(ev==EVENT_PRESS && myElementState==SWITCH_STATE_ON) { this->setState(SWITCH_STATE_OFF); return; } // if(ev==EVENT_MOVE || ev==EVENT_RELEASE) return; } //---------------------------------------- DigitLed::DigitLed(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y,bool _ptVisible, bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,36,52,WHITE,_isVisible) { myValue=0; myColorBkg=YELLOW; myColorSeg=RED; myIncX=4; myIncY=4; isPtVisible=_ptVisible; myElementType=OBJ_DIGIT_LED; myElementState=DIGIT_LED_STATE_ON; myScreen->addObj((ObjetHeader*) this); } //----------------------------------------- DigitLed::~DigitLed(void) { } //----------------------------------------- void DigitLed::setColorBkg(Color _colorBkg) { if(myColorBkg==_colorBkg) return; myColorBkg=_colorBkg; this->draw(); } //------------------------------------------ void DigitLed::setColorSeg(Color _colorSeg) { if(myColorSeg==_colorSeg) return; myColorSeg=_colorSeg; this->draw(); } //----------------------------------------- void DigitLed::draw(void) { if(myElementIsVisible==false) return; // ps=myScreen->getPicasoSerial(); //rec if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,myColorBkg); } if(isPtVisible) draw_seg_pt(ps); // switch(myValue) { case 0: draw_seg_a(ps); draw_seg_b(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_e(ps); draw_seg_f(ps); break; // case 1: draw_seg_b(ps); draw_seg_c(ps); break; // case 2: draw_seg_a(ps); draw_seg_b(ps); draw_seg_d(ps); draw_seg_e(ps); draw_seg_g(ps); break; // case 3: draw_seg_a(ps); draw_seg_b(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_g(ps); break; // case 4: draw_seg_b(ps); draw_seg_c(ps); draw_seg_f(ps); draw_seg_g(ps); break; // case 5: draw_seg_a(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_f(ps); draw_seg_g(ps); break; // case 6: draw_seg_a(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_e(ps); draw_seg_f(ps); draw_seg_g(ps); break; // case 7: draw_seg_a(ps); draw_seg_b(ps); draw_seg_c(ps); break; // case 8: draw_seg_a(ps); draw_seg_b(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_e(ps); draw_seg_f(ps); draw_seg_g(ps); break; // case 9: draw_seg_a(ps); draw_seg_b(ps); draw_seg_c(ps); draw_seg_d(ps); draw_seg_f(ps); draw_seg_g(ps); break; } } //----------------------------------------- void DigitLed::setValue(char _value) { if(myElementIsVisible==false) return; if(myValue==_value) return; if(_value >9) _value=9; myValue=_value; this->draw(); } //----------------------------------------- void DigitLed::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //----------------------------------------- void DigitLed::setPtVisible(bool _state) { if(isPtVisible==_state) return; isPtVisible=_state; } //----------------------------------------- void DigitLed::draw_seg_a(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myIncX, myY, myX+7*myIncX, myY+myIncY, myColorSeg); } //------------------------------------------ void DigitLed::draw_seg_b(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+6*myIncX, myY, myX+7*myIncX, myY+5*myIncY, myColorSeg); } //------------------------------------------- void DigitLed::draw_seg_c(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+6*myIncX, myY+8*myIncY, myX+7*myIncX, myY+myHeight, myColorSeg); } //-------------------------------------------- void DigitLed::draw_seg_d(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myIncX, myY+myHeight-myIncY, myX+7*myIncX, myY+myHeight, myColorSeg); } //----------------------------------------- void DigitLed::draw_seg_e(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myIncX, myY+myHeight-5*myIncY, myX+2*myIncX, myY+myHeight, myColorSeg); } //----------------------------------------- void DigitLed::draw_seg_f(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myIncX, myY, myX+2*myIncX, myY+5*myIncY, myColorSeg); } //------------------------------------------ void DigitLed::draw_seg_g(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myIncX, myY+6*myIncY, myX+7*myIncX, myY+7*myIncY, myColorSeg); } //------------------------------------------ void DigitLed::draw_seg_pt(PicasoSerial* ps) { if(ps!=0) ps->draw_filled_rectangle(myX+myWidth-myIncX, myY+myHeight-myIncY, myX+myWidth, myY+myHeight, myColorSeg); } //------------------------------------------- Digit3Led::Digit3Led(Screen* mScreen,UINT16 _id,UINT16 _x,UINT16 _y, UINT8 _resolution,bool _isVisible):ObjetHeader(mScreen,_id,_x,_y,108,52,YELLOW,_isVisible) { myColorBkg=YELLOW; myColorSeg=RED; myValue=0.0; myResolution=_resolution; myDigitLedCentaine= new DigitLed(mScreen,_id,_x,_y,false,true); myDigitLedDizaine=new DigitLed(mScreen,_id,_x+36,_y,false,true); myDigitLedUnite= new DigitLed(mScreen,_id,_x+36+36,_y,false,true); myElementType= OBJ_DIGITAL_3_LED; myElementState=DIGIT_LED_STATE_ON; myScreen->addObj((ObjetHeader*) this); } //------------------------------------------ Digit3Led::~Digit3Led(void) { delete(myDigitLedCentaine); myDigitLedCentaine=0; delete(myDigitLedDizaine); myDigitLedDizaine=0; delete(myDigitLedUnite); myDigitLedUnite=0; } //------------------------------------------ void Digit3Led::draw(void) { if(myElementIsVisible==false) return; myDigitLedCentaine->draw(); myDigitLedDizaine->draw(); myDigitLedUnite->draw(); } //------------------------------------------ void Digit3Led::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myElementIsVisible==false) return; myElementIsVisible=false; Color c= myScreen->getColorBkg(); ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_rectangle(myX,myY,myX+myWidth,myY+myHeight,c); } } // element devient visible else { myElementIsVisible=true; this->draw(); } } //----------------------------------------- void Digit3Led::setValue(float _value) { if(myElementIsVisible==false) return; // if(myValue==_value) return; // myValue=_value; UINT16 temp=0; char centaine=0; char dizaine=0; char unite=0; //the Pt? switch(myResolution) { case 1: //xxx temp=(UINT16)_value; myDigitLedCentaine->setPtVisible(false); myDigitLedDizaine->setPtVisible(false); myDigitLedUnite->setPtVisible(false); break; // case 10: //xx.x temp=(UINT16)(_value*10); myDigitLedCentaine->setPtVisible(false); myDigitLedDizaine->setPtVisible(true); myDigitLedUnite->setPtVisible(false); break; // case 100: //x.xx temp=(UINT16)(_value*100); myDigitLedCentaine->setPtVisible(true); myDigitLedDizaine->setPtVisible(false); myDigitLedUnite->setPtVisible(false); break; default: break; } // if(temp <100) { centaine=0; myDigitLedCentaine->setInvisible(true); } else { myDigitLedCentaine->setInvisible(false); centaine=(char)(temp/100); temp=temp-(centaine*100); } // if(temp <10) { dizaine=0; } else { dizaine=(char)(temp/10); temp=temp-(dizaine*10); } // unite=(char)temp; myDigitLedCentaine->setValue(centaine); myDigitLedDizaine->setValue(dizaine); myDigitLedUnite->setValue(unite); this->draw(); } //------------------------------------------ void Digit3Led::setColorBkg(Color _colorBkg) { if(myColorBkg==_colorBkg) return; myColorBkg=_colorBkg; myDigitLedCentaine->setColorBkg(_colorBkg); myDigitLedDizaine->setColorBkg(_colorBkg); myDigitLedUnite->setColorBkg(_colorBkg); this->draw(); } //------------------------------------------ void Digit3Led::setColorSeg(Color _colorSeg) { if(myColorSeg==_colorSeg) return; myColorSeg=_colorSeg; myDigitLedCentaine->setColorSeg(_colorSeg); myDigitLedDizaine->setColorSeg(_colorSeg); myDigitLedUnite->setColorSeg(_colorSeg); this->draw(); } //-----------------------------------------