+ dirty(r);
+ safeUnlock(imageMutex);
+}
+
+/*! 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
+ * 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
+ *
+ * \see drawRect, setColor
+ */
+void DrawingWindow::fillRect(int x1, int y1, int x2, int y2)
+{
+ painter->setBrush(getColor());
+ drawRect(x1, y1, x2, y2);
+ painter->setBrush(Qt::NoBrush);
+}
+
+/*! Dessine un cercle.
+ *
+ * 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 r rayon du cercle
+ *
+ * \see fillCircle, setColor
+ */
+void DrawingWindow::drawCircle(int x, int y, int r)
+{
+ QRect rect;
+ rect.setCoords(x - r, y - r, x + r - 1, y + r - 1);
+ safeLock(imageMutex);
+ painter->drawEllipse(rect);
+ rect.adjust(0, 0, 1, 1);
+ dirty(rect);
+ safeUnlock(imageMutex);
+}
+
+/*! Dessine un disque.
+ *
+ * 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 r rayon du disque
+ *
+ * \see drawCircle, setColor
+ */
+void DrawingWindow::fillCircle(int x, int y, int r)
+{
+ painter->setBrush(getColor());
+ drawCircle(x, y, r);
+ painter->setBrush(Qt::NoBrush);
+}
+
+/*! É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
+ * 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.
+ *
+ * \param x, y coordonnées du texte
+ * \param text texte à écrire
+ * \param flags paramètres d'alignement
+ *
+ * \see drawTextBg, setColor
+ * \see QPainter::drawText
+ */
+void DrawingWindow::drawText(int x, int y, const char *text, int flags)
+{
+ safeLock(syncMutex);
+ if (!terminateThread) {
+ qApp->postEvent(this, new DrawTextEvent(x, y, text, flags));
+ syncCondition.wait(&syncMutex);
+ }
+ safeUnlock(syncMutex);
+}
+
+/*! Écrit du texte sur fond coloré.
+ *
+ * É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
+ *
+ * \see drawText, setColor, setColorBg
+ */
+void DrawingWindow::drawTextBg(int x, int y, const char *text, int flags)
+{
+ painter->setBackgroundMode(Qt::OpaqueMode);
+ drawText(x, y, text, flags);
+ painter->setBackgroundMode(Qt::TransparentMode);