X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/graphlib.git/blobdiff_plain/263b75ba0ef15fc023288642c64824740adaeecf..49c1dd920c3d23d19d2a0de75066865057589129:/DrawingWindow.cpp diff --git a/DrawingWindow.cpp b/DrawingWindow.cpp index e5ab690..ae740b7 100644 --- a/DrawingWindow.cpp +++ b/DrawingWindow.cpp @@ -34,54 +34,54 @@ #include /*! \class DrawingWindow - * \brief Fenêtre de dessin. + * \brief Fenêtre de dessin. * * \author Arnaud Giersch * \date 2007-2010 * - * Cette classe décrit un widget Qt permettant d'écrire des - * applications graphiques simples. Pour cela, il faut définir une + * Cette classe décrit un widget Qt permettant d'écrire des + * applications graphiques simples. Pour cela, il faut définir une * fonction de dessin. Cette fonction ne retourne rien et prend comme - * unique paramètre une référence vers un objet de class + * unique paramètre une référence vers un objet de class * DrawingWindow. * - * La fonction devra ensuite être passée en paramètre pour les + * La fonction devra ensuite être passée en paramètre pour les * constructeurs de la classe, ainsi que les dimension requises pour - * la fenêtre graphique. Le programme est ensuite compilé comme + * la fenêtre graphique. Le programme est ensuite compilé comme * n'importe quel programme Qt. * - * Concrètement, la fonction sera exécutée dans un nouveau thread, + * Concrètement, la fonction sera exécutée dans un nouveau thread, * tandis que le thread principal s'occupera de la gestion des - * évènements et du rendu dans la fenêtre. + * évènements et du rendu dans la fenêtre. * - * NB. Pour toutes les méthodes de dessin, le coin en haut à gauche - * de la fenêtre a les coordonnées (0, 0). Le coin en bas à droite de - * la fenêtre a les coordonnées (largeur - 1, hauteur - 1), si la - * fenêtre est de dimension largeur × hauteur. + * NB. Pour toutes les méthodes de dessin, le coin en haut à gauche + * de la fenêtre a les coordonnées (0, 0). Le coin en bas à droite de + * la fenêtre a les coordonnées (largeur - 1, hauteur - 1), si la + * fenêtre est de dimension largeur × hauteur. * - * Un appui sur la touche <Esc> provoque la fermeture de la fenêtre. - * Comme pour la plupart des applications, il est également possible - * de fermer la fenêtre via le gestionnaire de fenêtres. + * Un appui sur la touche <Esc> provoque la fermeture de la fenêtre. + * Comme pour la plupart des applications, il est également possible + * de fermer la fenêtre via le gestionnaire de fenêtres. * - * Il est possible, dans une application, d'ouvrir plusieurs fenêtres, - * avec des fonctions de dessin éventuellement différentes. - * L'application se terminera normalement lorsque la dernière fenêtre - * sera fermée. + * Il est possible, dans une application, d'ouvrir plusieurs fenêtres, + * avec des fonctions de dessin éventuellement différentes. + * L'application se terminera normalement lorsque la dernière fenêtre + * sera fermée. */ /*! \example hello.cpp * - * Voir le code source à la fin de la page. Pour compiler et exécuter + * Voir le code source à la fin de la page. Pour compiler et exécuter * ce programme, il faut : * - * 1. Créer le fichier \c hello.pro + * 1. Créer le fichier \c hello.pro * * Pour simplifier, ce fichier contient la liste des fichiers sources * composant le programme. * * \include hello.pro * - * 2. Créer le fichier \c Makefile avec la commande : + * 2. Créer le fichier \c Makefile avec la commande : * * \verbatim qmake-qt4 hello.pro \endverbatim * ou tout simplement : @@ -93,7 +93,7 @@ * ou tout simplement : * \verbatim make \endverbatim * - * 4. Exécuter le programme avec la commande : + * 4. Exécuter le programme avec la commande : * * \verbatim ./hello \endverbatim * @@ -102,7 +102,7 @@ /*! \example exemple.cpp * - * Un exemple un peu plus sophistiqué. + * Un exemple un peu plus sophistiqué. */ //! Classe de thread. @@ -124,8 +124,8 @@ private: enum UserEvents { SyncRequest = QEvent::User, //!< Demande de synchronisation. - CloseRequest, //!< Demande de fermeture de la fenêtre. - DrawTextRequest, //!< Demande d'écriture de texte. + CloseRequest, //!< Demande de fermeture de la fenêtre. + DrawTextRequest, //!< Demande d'écriture de texte. }; //! Demande de synchronisation. @@ -135,14 +135,14 @@ public: { } }; -//! Demande de fermeture de fenêtre. +//! Demande de fermeture de fenêtre. class CloseRequestEvent: public QEvent { public: CloseRequestEvent(): QEvent(static_cast(CloseRequest)) { } }; -//! Demande de tracé de texte. +//! Demande de tracé de texte. class DrawTextEvent: public QEvent { public: const int x; @@ -162,19 +162,19 @@ public: */ /*! \typedef DrawingWindow::ThreadFunction - * \brief Type de la fonction de dessin, passée en paramètre de construction. + * \brief Type de la fonction de dessin, passée en paramètre de construction. */ /*! \var DrawingWindow::DEFAULT_WIDTH - * \brief Largeur par défaut de la fenêtre. + * \brief Largeur par défaut de la fenêtre. */ /*! \var DrawingWindow::DEFAULT_HEIGHT - * \brief Hauteur par défaut de la fenêtre. + * \brief Hauteur par défaut de la fenêtre. */ /*! \var DrawingWindow::width - * \brief Largeur de la fenêtre. + * \brief Largeur de la fenêtre. */ /*! \var DrawingWindow::height - * \brief Hauteur de la fenêtre. + * \brief Hauteur de la fenêtre. */ /*! \var DrawingWindow::paintInterval * \brief Intervalle de temps entre deux rendus (ms). @@ -182,13 +182,13 @@ public: //! Constructeur. /*! - * Construit une nouvelle fenêtre de dessin avec les dimensions - * passées en paramètres. La fonction fun sera exécutée dans un + * Construit une nouvelle fenêtre de dessin avec les dimensions + * passées en paramètres. La fonction fun sera exécutée dans un * nouveau thread. * * \param fun fonction de dessin - * \param width_ largeur de la fenêtre - * \param height_ hauteur de la fenêtre + * \param width_ largeur de la fenêtre + * \param height_ hauteur de la fenêtre * * \see QWidget */ @@ -202,14 +202,14 @@ DrawingWindow::DrawingWindow(ThreadFunction fun, int width_, int height_) //! Constructeur. /*! - * Construit un nouveau widget de dessin avec les dimensions passées - * en paramètres. La fonction fun sera exécutée dans un nouveau + * Construit un nouveau widget de dessin avec les dimensions passées + * en paramètres. La fonction fun sera exécutée dans un nouveau * thread. * * \param parent widget parent * \param fun fonction de dessin - * \param width_ largeur de la fenêtre - * \param height_ hauteur de la fenêtre + * \param width_ largeur de la fenêtre + * \param height_ hauteur de la fenêtre * * \see QWidget */ @@ -224,15 +224,15 @@ DrawingWindow::DrawingWindow(QWidget *parent, //! Constructeur. /*! - * Construit un nouveau widget de dessin avec les dimensions passées - * en paramètres. La fonction fun sera exécutée dans un nouveau + * Construit un nouveau widget de dessin avec les dimensions passées + * en paramètres. La fonction fun sera exécutée dans un nouveau * thread. * * \param parent widget parent - * \param flags flags passés au constructeur de QWidget + * \param flags flags passés au constructeur de QWidget * \param fun fonction de dessin - * \param width_ largeur de la fenêtre - * \param height_ hauteur de la fenêtre + * \param width_ largeur de la fenêtre + * \param height_ hauteur de la fenêtre * * \see QWidget */ @@ -255,7 +255,7 @@ DrawingWindow::~DrawingWindow() //! Change la couleur de dessin. /*! - * La couleur est un entier, tel que retourné par getPointColor. + * La couleur est un entier, tel que retourné par getPointColor. * Normalement de la forme #00RRGGBB. * * \param color couleur @@ -286,9 +286,9 @@ void DrawingWindow::setColor(const char *name) //! Change la couleur de dessin. /*! - * Les composantes de rouge, vert et bleu de la couleur doivent être - * compris entre 0 et 1. Si le trois composantes sont à 0, on obtient - * du noir; si les trois composantes sont à 1, on obtient du blanc. + * Les composantes de rouge, vert et bleu de la couleur doivent être + * compris entre 0 et 1. Si le trois composantes sont à 0, on obtient + * du noir; si les trois composantes sont à 1, on obtient du blanc. * * \param red composante de rouge * \param green composante de vert @@ -345,9 +345,9 @@ void DrawingWindow::setBgColor(float red, float green, float blue) setBgColor(QColor::fromRgbF(red, green, blue)); } -//! Efface la fenêtre. +//! Efface la fenêtre. /*! - * La fenêtre est effacée avec la couleur de fond courante. + * La fenêtre est effacée avec la couleur de fond courante. * * \see setBgColor */ @@ -361,10 +361,10 @@ void DrawingWindow::clearGraph() //! Dessine un point. /*! - * Dessine un point (pixel) aux coordonnées (x, y), avec la couleur de + * Dessine un point (pixel) aux coordonnées (x, y), avec la couleur de * dessin courante. * - * \param x, y coordonnées du point + * \param x, y coordonnées du point * * \see setColor */ @@ -378,11 +378,11 @@ void DrawingWindow::drawPoint(int x, int y) //! Dessine un segment. /*! - * Dessine un segement de droite entre les coordonnées (x1, y1) et + * Dessine un segement de droite entre les coordonnées (x1, y1) et * (x2, y2), avec la couleur de dessin courante. * - * \param x1, y1 coordonnées d'une extrémité du segment - * \param x2, y2 coordonnées de l'autre extrémité du segment + * \param x1, y1 coordonnées d'une extrémité du segment + * \param x2, y2 coordonnées de l'autre extrémité du segment * * \see setColor */ @@ -396,12 +396,12 @@ void DrawingWindow::drawLine(int x1, int y1, int x2, int y2) //! Dessine un rectangle. /*! - * Dessine le rectangle parallèle aux axes et défini par les - * coordonnées de deux sommets opposés (x1, y1) et (x2, y2). Utilise + * Dessine le rectangle parallèle aux axes et défini par les + * coordonnées de deux sommets opposés (x1, y1) et (x2, y2). Utilise * la couleur de dessin courante. * - * \param x1, y1 coordonnées d'un sommet du rectangle - * \param x2, y2 coordonnées du sommet opposé du rectangle + * \param x1, y1 coordonnées d'un sommet du rectangle + * \param x2, y2 coordonnées du sommet opposé du rectangle * * \see fillRect, setColor */ @@ -419,12 +419,12 @@ void DrawingWindow::drawRect(int x1, int y1, int x2, int y2) //! Dessine un rectangle plein. /*! - * Dessine le rectangle plein parallèle aux axes et défini par les - * coordonnées de deux sommets opposés (x1, y1) et (x2, y2). Utilise + * Dessine le rectangle plein parallèle aux axes et défini par les + * coordonnées de deux sommets opposés (x1, y1) et (x2, y2). Utilise * la couleur de dessin courante. * - * \param x1, y1 coordonnées d'un sommet du rectangle - * \param x2, y2 coordonnées du sommet opposé du rectangle + * \param x1, y1 coordonnées d'un sommet du rectangle + * \param x2, y2 coordonnées du sommet opposé du rectangle * * \see drawRect, setColor */ @@ -440,7 +440,7 @@ void DrawingWindow::fillRect(int x1, int y1, int x2, int y2) * Dessine un cercle de centre (x, y) et de rayon r. Utilise la * couleur de dessin courante. * - * \param x, y coordonnées du centre du cercle + * \param x, y coordonnées du centre du cercle * \param r rayon du cercle * * \see fillCircle, setColor @@ -461,7 +461,7 @@ void DrawingWindow::drawCircle(int x, int y, int r) * Dessine un disque (cercle plein) de centre (x, y) et de rayon r. * Utilise la couleur de dessin courante. * - * \param x, y coordonnées du centre du disque + * \param x, y coordonnées du centre du disque * \param r rayon du disque * * \see drawCircle, setColor @@ -473,18 +473,18 @@ void DrawingWindow::fillCircle(int x, int y, int r) painter->setBrush(Qt::NoBrush); } -//! Écrit du texte. +//! Écrit du texte. /*! - * Écrit le texte text, aux coordonnées (x, y) et avec les paramètres - * d'alignement flags. Le texte est écrit avec la couleur de dessin + * Écrit le texte text, aux coordonnées (x, y) et avec les paramètres + * d'alignement flags. Le texte est écrit avec la couleur de dessin * courante. Les flags sont une combinaison (ou binaire) de * Qt::AlignLeft, Qt::AligneRight, Qt::AlignHCenter, Qt::AlignTop, - * Qt::AlignBottom, Qt::AlignVCenter, Qt::AlignCenter. Par défaut, le - * texte est aligné en haut à gauche. + * Qt::AlignBottom, Qt::AlignVCenter, Qt::AlignCenter. Par défaut, le + * texte est aligné en haut à gauche. * - * \param x, y coordonnées du texte - * \param text texte à écrire - * \param flags paramètres d'alignement + * \param x, y coordonnées du texte + * \param text texte à écrire + * \param flags paramètres d'alignement * * \see drawTextBg, setColor * \see QPainter::drawText @@ -499,14 +499,14 @@ void DrawingWindow::drawText(int x, int y, const char *text, int flags) safeUnlock(syncMutex); } -//! Écrit du texte sur fond coloré. +//! Écrit du texte sur fond coloré. /*! - * Écrit du texte comme drawText, mais l'arrière-plan est coloré avec + * Écrit du texte comme drawText, mais l'arrière-plan est coloré avec * la couleur de fond courante. * - * \param x, y coordonnées du texte - * \param text texte à écrire - * \param flags paramètres d'alignement + * \param x, y coordonnées du texte + * \param text texte à écrire + * \param flags paramètres d'alignement * * \see drawText, setColor, setColorBg */ @@ -520,11 +520,11 @@ void DrawingWindow::drawTextBg(int x, int y, const char *text, int flags) //! Retourne la couleur d'un pixel. /*! - * Retourne la couleur du pixel de coordonnées (x, y). La valeur - * retournée peut servir de paramètres à setColor(unsigned int) ou + * Retourne la couleur du pixel de coordonnées (x, y). La valeur + * retournée peut servir de paramètres à setColor(unsigned int) ou * setBgColor(unsigned int). * - * \param x, y coordonnées du pixel + * \param x, y coordonnées du pixel * \return couleur du pixel * * \see setColor(unsigned int), setBgColor(unsigned int) @@ -537,16 +537,16 @@ unsigned int DrawingWindow::getPointColor(int x, int y) //! Attend l'appui sur un des boutons de la souris. /*! * Attend l'appui sur un des boutons de la souris. Retourne le bouton - * qui a été pressé et les coordonnées du pointeur de souris à ce - * moment-là. + * qui a été pressé et les coordonnées du pointeur de souris à ce + * moment-là. * - * \param x, y coordonnées du pointeur de souris - * \param button numéro du bouton qui a été pressé + * \param x, y coordonnées du pointeur de souris + * \param button numéro du bouton qui a été pressé * (1: gauche, 2: droit, 3: milieu, 0 sinon) - * \param time durée maximale de l'attente - * \return true si un bouton a été pressé + * \param time durée maximale de l'attente + * \return true si un bouton a été pressé * - * \bug expérimental + * \bug expérimental */ bool DrawingWindow::waitMousePress(int &x, int &y, int &button, unsigned long time) @@ -574,16 +574,16 @@ bool DrawingWindow::waitMousePress(int &x, int &y, int &button, return pressed; } -//! Synchronise le contenu de la fenêtre. +//! Synchronise le contenu de la fenêtre. /*! - * Pour des raisons d'efficacités, le résultat des fonctions de dessin - * n'est pas affiché immédiatement. L'appel à sync permet de - * synchroniser le contenu de la fenêtre. Autrement dit, cela bloque - * l'exécution du programme jusqu'à ce que le contenu de la fenêtre - * soit à jour. + * Pour des raisons d'efficacités, le résultat des fonctions de dessin + * n'est pas affiché immédiatement. L'appel à sync permet de + * synchroniser le contenu de la fenêtre. Autrement dit, cela bloque + * l'exécution du programme jusqu'à ce que le contenu de la fenêtre + * soit à jour. * - * \param time durée maximale de l'attente - * \return true si la fenêtre a pu être synchronisée + * \param time durée maximale de l'attente + * \return true si la fenêtre a pu être synchronisée */ bool DrawingWindow::sync(unsigned long time) { @@ -599,13 +599,13 @@ bool DrawingWindow::sync(unsigned long time) return synced; } -//! Ferme la fenêtre graphique. +//! Ferme la fenêtre graphique. void DrawingWindow::closeGraph() { qApp->postEvent(this, new CloseRequestEvent()); } -//! Suspend l'exécution pendant un certain temps. +//! Suspend l'exécution pendant un certain temps. /*! * \param secs temps d'attente en seconde */ @@ -614,7 +614,7 @@ void DrawingWindow::sleep(unsigned long secs) DrawingThread::sleep(secs); } -//! Suspend l'exécution pendant un certain temps. +//! Suspend l'exécution pendant un certain temps. /*! * \param msecs temps d'attente en millisecondes */ @@ -623,7 +623,7 @@ void DrawingWindow::msleep(unsigned long msecs) DrawingThread::msleep(msecs); } -//! Suspend l'exécution pendant un certain temps. +//! Suspend l'exécution pendant un certain temps. /*! * \param usecs temps d'attente en microsecondes */ @@ -677,7 +677,7 @@ void DrawingWindow::customEvent(QEvent *ev) /*! * \see QWidget * - * \bug expérimental + * \bug expérimental */ void DrawingWindow::mousePressEvent(QMouseEvent *ev) { @@ -749,7 +749,7 @@ void DrawingWindow::timerEvent(QTimerEvent *ev) //! Fonction d'initialisation. /*! - * Fonction appelée par les différents constructeurs. + * Fonction appelée par les différents constructeurs. * * \param fun fonction de dessin */ @@ -817,10 +817,10 @@ QColor DrawingWindow::getBgColor() //! Verrouille un mutex. /*! - * S'assure que le thread courant ne peut pas être terminé s'il - * détient un mutex. Pendant de safeUnlock. + * S'assure que le thread courant ne peut pas être terminé s'il + * détient un mutex. Pendant de safeUnlock. * - * \param mutex le mutex à verrouiller + * \param mutex le mutex à verrouiller * * \see safeUnlock */ @@ -832,12 +832,12 @@ void DrawingWindow::safeLock(QMutex &mutex) mutex.lock(); } -//! Déverrouille un mutex. +//! Déverrouille un mutex. /*! - * S'assure que le thread courant ne peut pas être terminé s'il - * détient un mutex. Pendant de safeLock. + * S'assure que le thread courant ne peut pas être terminé s'il + * détient un mutex. Pendant de safeLock. * - * \param mutex le mutex à déverrouiller + * \param mutex le mutex à déverrouiller * * \see safeLock */ @@ -849,7 +849,7 @@ void DrawingWindow::safeUnlock(QMutex &mutex) thread->setTerminationEnabled(true); } -//! Marque l'image entière comme non à jour. +//! Marque l'image entière comme non à jour. inline void DrawingWindow::dirty() { @@ -857,9 +857,9 @@ void DrawingWindow::dirty() dirtyRect = image->rect(); } -//! Marque un point de l'image comme non à jour. +//! Marque un point de l'image comme non à jour. /*! - * \param x, y coordonnées du point + * \param x, y coordonnées du point */ inline void DrawingWindow::dirty(int x, int y) @@ -867,13 +867,13 @@ void DrawingWindow::dirty(int x, int y) dirty(QRect(x, y, 1, 1)); } -//! Marque une zone de l'image comme non à jour. +//! Marque une zone de l'image comme non à jour. /*! - * La zone est définie par un rectangle dont les coordonnées de deux - * sommets oppposés sont données. + * La zone est définie par un rectangle dont les coordonnées de deux + * sommets oppposés sont données. * - * \param x1, y1 coordonnées d'un sommet du rectangle - * \param x2, y2 coordonnées du sommet opposé du rectangle + * \param x1, y1 coordonnées d'un sommet du rectangle + * \param x2, y2 coordonnées du sommet opposé du rectangle */ inline void DrawingWindow::dirty(int x1, int y1, int x2, int y2) @@ -883,9 +883,9 @@ void DrawingWindow::dirty(int x1, int y1, int x2, int y2) dirty(r.normalized()); } -//! Marque une zone de l'image comme non à jour. +//! Marque une zone de l'image comme non à jour. /*! - * \param rect rectangle délimitant la zone + * \param rect rectangle délimitant la zone */ void DrawingWindow::dirty(const QRect &rect) { @@ -897,9 +897,9 @@ void DrawingWindow::dirty(const QRect &rect) } } -//! Génère un update si besoin. +//! Génère un update si besoin. /*! - * Génère une demande de mise à jour de la fenêtre (appel à update) + * Génère une demande de mise à jour de la fenêtre (appel à update) * s'il y en a besoin. */ void DrawingWindow::mayUpdate() @@ -938,7 +938,7 @@ void DrawingWindow::realSync() //! Fonction bas-niveau pour drawText. /*! - * Le rendu de texte doit être fait dans le thread principal. D'où + * Le rendu de texte doit être fait dans le thread principal. D'où * les manipulations tordues et la synchronisation qui s'en suit. * * \param x, y, text, flags cf. drawText @@ -991,7 +991,7 @@ DrawingThread::DrawingThread(DrawingWindow &w, DrawingWindow::ThreadFunction f) { } -//! Démarre le thread si ce n'a pas encore été fait. +//! Démarre le thread si ce n'a pas encore été fait. void DrawingThread::start_once(Priority priority) { if (!started_once) {