Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
d1c174bdb24bb5e0fa87b521530feb7ef74b3368
[graphlib.git] / DrawingWindow.h
1 #ifndef DRAWING_WINDOW_H
2 #define DRAWING_WINDOW_H
3
4 #include <QBasicTimer>
5 #include <QColor>
6 #include <QImage>
7 #include <QMutex>
8 #include <QPainter>
9 #include <QPen>
10 #include <QRect>
11 #include <QWaitCondition>
12 #include <QWidget>
13 #include <Qt>
14
15 class DrawingThread;
16
17 class DrawingWindow: public QWidget {
18 public:
19     typedef void (*ThreadFunction)(DrawingWindow &);
20
21     static const int DEFAULT_WIDTH = 640;
22     static const int DEFAULT_HEIGHT = 480;
23
24     DrawingWindow(ThreadFunction fun,
25                   int width_ = DEFAULT_WIDTH, int height_ = DEFAULT_HEIGHT);
26     DrawingWindow(QWidget *parent,
27                   ThreadFunction fun,
28                   int width_ = DEFAULT_WIDTH, int height_ = DEFAULT_HEIGHT);
29     DrawingWindow(QWidget *parent, Qt::WindowFlags flags,
30                   ThreadFunction fun,
31                   int width_ = DEFAULT_WIDTH, int height_ = DEFAULT_HEIGHT);
32
33     ~DrawingWindow();
34
35     const int width;
36     const int height;
37
38     void setColor(unsigned int color);
39     void setColor(const char *name);
40     void setColor(float red, float green, float blue);
41
42     void setBgColor(unsigned int color);
43     void setBgColor(const char *name);
44     void setBgColor(float red, float green, float blue);
45
46     void clearGraph();
47
48     void drawPoint(int x, int y);
49     void drawLine(int x1, int y1, int x2, int y2);
50     void drawRect(int x1, int y1, int x2, int y2);
51     void fillRect(int x1, int y1, int x2, int y2);
52     void drawCircle(int x, int y, int r);
53     void fillCircle(int x, int y, int r);
54
55     void drawText(int x, int y, const char *text, int flags = 0);
56     void drawTextBg(int x, int y, const char *text, int flags = 0);
57
58     unsigned int getPointColor(int x, int y);
59
60     bool sync(unsigned long time = ULONG_MAX);
61
62     void closeGraph();
63
64     void sleep(unsigned long secs);
65     void msleep(unsigned long msecs);
66     void usleep(unsigned long usecs);
67
68 protected:
69     void closeEvent(QCloseEvent *ev);
70     void customEvent(QEvent *ev);
71     void keyPressEvent(QKeyEvent *ev);
72     void paintEvent(QPaintEvent *ev);
73     void showEvent(QShowEvent *ev);
74     void timerEvent(QTimerEvent *ev);
75
76 private:
77     //! Intervalle de temps entre deux rendus (ms)
78     static const int paintInterval = 33;
79
80     QBasicTimer timer;
81     QMutex imageMutex;
82     QMutex syncMutex;
83     QWaitCondition syncCondition;
84     bool terminateThread;
85     int lockCount;
86
87     QImage *image;
88     QPainter *painter;
89
90     bool dirtyFlag;
91     QRect dirtyRect;
92
93     DrawingThread *thread;
94
95     void initialize(ThreadFunction fun);
96
97     void setColor(const QColor& color);
98     void setBgColor(const QColor& color);
99     QColor getColor();
100     QColor getBgColor();
101
102     void safeLock(QMutex &mutex);
103     void safeUnlock(QMutex &mutex);
104
105     void dirty();
106     void dirty(int x, int y);
107     void dirty(int x1, int y1, int x2, int y2);
108     void dirty(const QRect &rect);
109
110     void mayUpdate();
111     void realSync();
112     void realDrawText(int x, int y, const char *text, int flags);
113 };
114
115 #endif // !DRAWING_WINDOW_H
116
117 // Local variables:
118 // mode: c++
119 // End: