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/
Ellipse.cpp
- Committer:
- adelino
- Date:
- 2015-04-05
- Revision:
- 1:a74e42cf52b2
File content as of revision 1:a74e42cf52b2:
#include "Ellipse.h" Ellipse::Ellipse(Screen* mScreen,UINT16 _xc,UINT16 _yc,UINT16 _radiusX,UINT16 _radiusY,Color _color): Sprite(mScreen,0,_xc-_radiusX,_yc-_radiusY,_radiusX+_radiusX,_radiusY+_radiusY,_color) { myCenterX=_xc; myCenterY=_yc; myRadiusX=_radiusX; myRadiusY=_radiusY; myType=OBJ_ELLIPSE; myScreen->addWidget((Widget*) this); } //---------------------------------------------- void Ellipse::draw(void) { // isVisible ? if(myIsVisible==false) { return; } // PicasoSerial* ps=0; ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_ellipse(myCenterX,myCenterY,myRadiusX,myRadiusY,myColor); } ps=0; } //---------------------------------------------- void Ellipse::update(float delta) { if(myIsUpdateAutomatic) elementUpdate(); float xcnew=myCenterX+mySpeedX*delta; float ycnew=myCenterY+mySpeedY*delta; this->setNewPosition((INT16)xcnew,(INT16)ycnew,true); } //----------------------------------------------- void Ellipse::setInvisible(bool _state) { // element devient invisible if(_state==true) { if(myIsVisible==false) return; myIsVisible=false; Color c= myScreen->getColorBkg(); PicasoSerial* ps=0; ps=myScreen->getPicasoSerial(); if(ps!=0) { ps->draw_filled_ellipse(myCenterX,myCenterY,myRadiusX,myRadiusY,c); } ps=0; } // element devient visible else { myIsVisible=true; this->draw(); } } //----------------------------------------------- void Ellipse::setNewPosition(INT16 _xcnew,INT16 _ycnew) { setNewPosition(_xcnew,_ycnew,true); } //----------------------------------------------- void Ellipse::setNewPosition(INT16 _xcnew,INT16 _ycnew,bool isScreenLimits) { if(myIsVisible==false) return; // if(myCenterX==_xcnew && myCenterY==_ycnew) return; // this->setInvisible(true); // colorie le cir avec couleur de la screen myIsVisible=true; if(isScreenLimits) { //test Xmax if(_xcnew+myRadiusX >= myXMoveMax) { _xcnew=myXMoveMax-myRadiusX; if(myState==STATE_ON) myState=BUMP_RIGHT; } //test Xmin if(_xcnew <= myRadiusX) { _xcnew=myXMoveMin+myRadiusX; if(myState==STATE_ON) myState=BUMP_LEFT; } //test Ymax if(_ycnew +myRadiusY >= myYMoveMax && _ycnew >0) { _ycnew = myYMoveMax- myRadiusY; if(myState==STATE_ON) myState=BUMP_DOWN; } //test yminMin; if(_ycnew <= myRadiusY) { _ycnew=myYMoveMin+myRadiusY; if(myState==STATE_ON) myState=BUMP_UP; } } // myCenterX=_xcnew; myCenterY=_ycnew; myX=_xcnew-myRadiusX; myY=_ycnew-myRadiusY; this->draw(); } //----------------------------------------------- Ellipse::~Ellipse(void) { } //---------------------------------------------- UINT16 Ellipse::getCenterX(void) const { return this->myCenterX; } //--------------------------------------------- UINT16 Ellipse::getCenterY(void) const { return this->myCenterY; } //---------------------------------------------- void Ellipse::setCenterX(UINT16 _xcenter) { myCenterX=_xcenter; } //---------------------------------------------- void Ellipse::setCenterY(UINT16 _ycenter) { myCenterY=_ycenter; }