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/
Diff: ObjetGraphic.cpp
- Revision:
- 1:a74e42cf52b2
- Parent:
- 0:65fd8b1cbf86
--- a/ObjetGraphic.cpp Sun Jul 06 10:36:27 2014 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2608 +0,0 @@ - -#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(); -} -//----------------------------------------- \ No newline at end of file