Logo AND Algorithmique Numérique Distribuée

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