123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- //
- // RAN [2014-06-02]
- // - Changed the setEyebrow, setSize functions. Resize (+2,+2)
- // - EyeBrowType
- // RAN [2014-06-03]
- // - TranslucentBackground for non-default constructor
- // - Some more comments
-
- #include "bird.h"
- #include <QDebug>
-
- /// \fn Bird::Bird(QWidget *parent)
- /// \~English
- /// \brief Default constructor. The properties of the bird are set as follows:
- /// size: set to random value of either 50, 100, 150 or 200
- /// * eyeBrow: set randomly to one of the five possible values
- /// * color and eColor: set randomly to one of the five possible colors:
- /// "green", "blue", "red", "yellow", "white"
- /// \~Spanish
- /// \brief Constructor por defecto. Las propiedades de el pajaron son ajustados como sigue:
- /// * eyeBrow: ajustado aleatoriamente a uno de los 5 posibles valores
- /// * color y eColor: ajustao aleatoriamente a uno de los 5 posibles colores:
- /// "verde", "azul", "rojo", "amarillo", "blanco"
- ///
- Bird::Bird(QWidget *parent) :
- QWidget(parent)
- {
- QString prism[5] = {"green", "blue", "red", "yellow", "white"} ;
- size = randInt(1, 4) * 50 ;
- resize(size+2,size+2) ;
- move(0,0) ;
- eyeBrow = (EyeBrowType)randInt(0,3);
- color = prism[randInt(0,4)] ;
- eColor = prism[randInt(0,4)] ;
- setAttribute(Qt::WA_TranslucentBackground);
- setStyleSheet("background:transparent;");
- }
-
- /// \fn Bird::Bird(int s, EyeBrowType eb, QString col, QString eye, QWidget *parent)
- /// \~English
- /// \brief Constructor which accepts specification of the attributes of the bird
- /// \param s size
- /// \param eb eyeBrow
- /// \param col (faceColor)
- /// \param eye (eyeColor)
- /// \~Spanish
- /// \brief Constructor que acepta especificaciones de los atributos del pajaro
- /// \param s tamaño
- /// \param eb cejas
- /// \param col color de la cara
- /// \param eye color del ojo
- Bird::Bird(int s, EyeBrowType eb, QString col, QString eye, QWidget *parent):
- QWidget(parent)
- {
- resize(s+2,s+2) ;
- move(0,0) ;
- size = s; eyeBrow = eb; color=col ; eColor = eye ;
- setAttribute(Qt::WA_TranslucentBackground);
- setStyleSheet("background:transparent;");
- }
-
- /// \fn QString Bird::getEyeColor()
- /// \~English
- /// \brief Getter for the eyeColor.
- /// \~Spanish
- /// \brief Devuelve el color del ojo.
- QString Bird::getEyeColor() const {
- return eColor ;
- }
-
- /// \fn QString Bird::getFaceColor()
- /// \~English
- /// \brief Getter for the faceColor.
- /// \~Spanish
- /// \brief Devuelve el color de la cara.
- QString Bird::getFaceColor() const {
- return color ;
- }
-
- /// \fn void Bird::setEyeColor(QString eye)
- /// \~English
- /// \brief Setter for the eyeColor.
- /// \param eye eyeColor
- /// \~Spanish
- /// \brief Ajusta el color del ojo
- /// \param eje color del ojo
- void Bird::setEyeColor(QString eye){
- eColor = eye ;
- }
-
- /// \fn void Bird::setFaceColor(QString col)
- /// \~English
- /// \brief Setter for the face color.
- /// \param col face Color
- /// \~Spanish
- /// \brief Ajusta el color de la cara
- /// \param col color de la cara
- void Bird::setFaceColor(QString col){
- color = col;
- }
-
- /// \fn int Bird::getSize()
- /// \~English
- /// \brief Getter for the bird size.
- /// \~Spanish
- /// \brief Devuelve el tamano del pajaro.
- int Bird::getSize() const {
- return size ;
- }
-
- /// \fn int Bird::getEyeBrow()
- /// \~English
- /// \brief Getter for the bird eyeBrow type
- /// \~Spanish
- /// \brief Devuelve el tipo de ceja
- Bird::EyeBrowType Bird::getEyebrow() const{
- return eyeBrow ;
- }
-
- /// \fn void Bird::setSize(int s)
- /// \~English
- /// \brief Setter for the bird size.
- /// \param s bird size
- /// \~Spanish
- /// \brief Ajusta el tamano del pajaro
- /// \param s tamano del pajaro
- void Bird::setSize(int s){
-
- if(s <= 50) { size = 50; }
- else if (s >= 200) { size = 200; }
- else { size = s; }
-
- resize(size + 2, size + 2) ;
- }
-
- /// \fn void Bird::setEyeBrow(QString eye)
- /// \~English
- /// \brief Setter for the eyebrow type.
- /// \param eb eyebrow type
- /// \~Spanish
- /// \brief Ajusta el tipo de cejas
- /// \param eb tipo de ceja
- void Bird::setEyebrow(EyeBrowType eb){
- if(eb < 0 || eb > 3)
- eyeBrow = UNI ;
- else eyeBrow = eb;
- }
-
- /// \fn Qt::GlobalColor Bird::getColor(QString color)
- /// \~English
- /// \brief Converts a color specified as string to a Qt::GlobalColor
- /// \param color string with a color
- /// \~Spanish
- /// \brief Convierte un color especificado como un string a un Qt::GlobalColor
- /// \param color cadena de caracteres de un color
- Qt::GlobalColor Bird::getColor(QString color) const{
-
- if(color=="red")
- return Qt::red ;
- else if (color == "green")
- return Qt::green ;
- else if (color == "yellow")
- return Qt::yellow ;
- else if(color == "blue")
- return Qt::blue ;
- else
- return Qt::white ;
-
- }
-
- /// \fn int Bird::randInt(int min, int max)
- /// \~English
- /// \brief Generates a random integer in the range [min, max]
- /// \param min minimum random value
- /// \param max maximum random value
- /// \~Spanish
- /// \brief Genera un entero aleatorio en el rango [min, max]
- /// \param min valor aleatorio minimo
- /// \param max valor aleatorio maximo
- int Bird::randInt(int min, int max){
- return qrand() % ((max +1 )- min) + min ;
- }
-
-
- /// \fn void Bird::paintEvent(QPaintEvent *event)
- /// \~English
- /// \brief This function is automatically invoked each time the widget or
- /// its parent receives a repaint signal.
- /// \~Spanish
- /// \brief Esta funcion es invocada automaticamente cada ves que el widget
- /// o su padre recive una senal de repintar.
- ///
- void Bird::paintEvent(QPaintEvent *) {
- QPainter p(this);
-
- QPen outlinePen(Qt::black);
- QPen eyebrowsPen(Qt::black) ;
-
- int ball_size = getSize() ;
- float half_ball = ball_size/2.0 ;
- float white_ball = ball_size / 4.0 ;
- float black_ball = white_ball * .5 ;
- float up_gap = ball_size * .10 ;
- float eyebrow_gap = ball_size *.18 ;
-
- outlinePen.setWidth(2);
- eyebrowsPen.setWidth(ball_size *.05);
-
- // Face
- p.setPen(outlinePen) ;
- p.setBrush(getColor(getFaceColor())) ;
- p.drawEllipse(0, 0, ball_size, ball_size);
-
- // Eye Balls
- p.setBrush(getColor(getEyeColor())) ;
- p.drawEllipse(half_ball-white_ball,ball_size/2-up_gap,white_ball,white_ball) ; //left eye
- p.drawEllipse(half_ball,ball_size/2-up_gap,white_ball,white_ball) ; //right eye
-
- // Eye iris
- p.setBrush(Qt::black) ;
- p.drawEllipse(half_ball-black_ball,ball_size/2-up_gap+(white_ball-black_ball)/2.0,black_ball,black_ball) ;
- p.drawEllipse(half_ball,ball_size/2-up_gap+(white_ball-black_ball)/2.0 ,black_ball,black_ball) ;
-
- // Eyebrow
-
- p.setPen(eyebrowsPen) ;
-
- if(eyeBrow == UNI){
- //Normal Eyebrow
- p.drawLine(white_ball, ball_size/2-eyebrow_gap, 3*white_ball,ball_size/2-eyebrow_gap) ;
- }
- else if(eyeBrow == ANGRY){
-
- // Angry Eyebrow
- p.drawLine(white_ball, ball_size/2-eyebrow_gap, 2*white_ball, ball_size/2-eyebrow_gap+up_gap) ;
- p.drawLine(2*white_ball, ball_size/2-eyebrow_gap + up_gap, 3*white_ball,ball_size/2-eyebrow_gap) ;
- }
- else if(eyeBrow == UPSET){
- // Angry Eyebrow
- p.drawLine(white_ball, ball_size/2-eyebrow_gap, 2*white_ball, ball_size/2-eyebrow_gap+up_gap/2) ;
- p.drawLine(2*white_ball, ball_size/2-eyebrow_gap + up_gap/2, 3*white_ball,ball_size/2-eyebrow_gap) ;
-
- }
- else{
- // Hairy
- p.drawLine(white_ball, ball_size/2-eyebrow_gap, 2*white_ball, ball_size/2-eyebrow_gap+up_gap) ;
- p.drawLine(2*white_ball, ball_size/2-eyebrow_gap + up_gap, 3*white_ball,ball_size/2-eyebrow_gap) ;
- p.drawLine(white_ball, ball_size/2-eyebrow_gap, 2*white_ball, ball_size/2-eyebrow_gap+up_gap/2) ;
- p.drawLine(2*white_ball, ball_size/2-eyebrow_gap + up_gap/2, 3*white_ball,ball_size/2-eyebrow_gap) ;
-
- }
-
- }
|