X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/graphlib.git/blobdiff_plain/e1e6264f7d64fc0fc64263e55099e6a993596520..d36574805d09410419348c7ae3d65365a8fdd26d:/DrawingWindow.h diff --git a/DrawingWindow.h b/DrawingWindow.h index 73fdc26..cf3ff9c 100644 --- a/DrawingWindow.h +++ b/DrawingWindow.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -11,21 +12,15 @@ #include #include #include +#include class DrawingThread; -/*! - * Fenêtre de dessin. - * - */ class DrawingWindow: public QWidget { public: - //! Type de la fonction de dessin, passée en paramètre de construction. typedef void (*ThreadFunction)(DrawingWindow &); - //! Largeur par défaut de la fenêtre. static const int DEFAULT_WIDTH = 640; - //! Hauteur par défaut de la fenêtre. static const int DEFAULT_HEIGHT = 480; DrawingWindow(ThreadFunction fun, @@ -39,9 +34,7 @@ public: ~DrawingWindow(); - //! Largeur de la fenêtre. const int width; - //! Hauteur de la fenêtre. const int height; void setColor(unsigned int color); @@ -52,6 +45,13 @@ public: void setBgColor(const char *name); void setBgColor(float red, float green, float blue); + void setPenWidth(int width); + + const QFont &getFont() const; + void setFont(const QFont &font); + + void setAntialiasing(bool state); + void clearGraph(); void drawPoint(int x, int y); @@ -60,27 +60,36 @@ public: void fillRect(int x1, int y1, int x2, int y2); void drawCircle(int x, int y, int r); void fillCircle(int x, int y, int r); + void drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3); + void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3); void drawText(int x, int y, const char *text, int flags = 0); + void drawText(int x, int y, const std::string &text, int flags = 0); void drawTextBg(int x, int y, const char *text, int flags = 0); + void drawTextBg(int x, int y, const std::string &text, int flags = 0); - unsigned int getPointColor(int x, int y); + unsigned int getPointColor(int x, int y) const; + bool waitMousePress(int &x, int &y, int &button, + unsigned long time = ULONG_MAX); bool sync(unsigned long time = ULONG_MAX); void closeGraph(); - void sleep(unsigned long secs); - void msleep(unsigned long msecs); - void usleep(unsigned long usecs); + static void sleep(unsigned long secs); + static void msleep(unsigned long msecs); + static void usleep(unsigned long usecs); protected: + //! \cond show_protected void closeEvent(QCloseEvent *ev); void customEvent(QEvent *ev); + void mousePressEvent(QMouseEvent *ev); void keyPressEvent(QKeyEvent *ev); void paintEvent(QPaintEvent *ev); void showEvent(QShowEvent *ev); void timerEvent(QTimerEvent *ev); + //! \endcond private: //! Intervalle de temps entre deux rendus (ms) @@ -88,6 +97,8 @@ private: QBasicTimer timer; QMutex imageMutex; + QMutex inputMutex; + QWaitCondition inputCondition; QMutex syncMutex; QWaitCondition syncCondition; bool terminateThread; @@ -96,6 +107,9 @@ private: QImage *image; QPainter *painter; + QPoint mousePos; + Qt::MouseButton mouseButton; + bool dirtyFlag; QRect dirtyRect; @@ -103,8 +117,8 @@ private: void initialize(ThreadFunction fun); - void setColor(const QColor& color); - void setBgColor(const QColor& color); + void setColor(const QColor &color); + void setBgColor(const QColor &color); QColor getColor(); QColor getBgColor();