Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
.
[graphlib.git] / DrawingWindow.cpp
1 #include "DrawingWindow.h"
2 #include <QPainter>
3 #include <QPaintEvent>
4
5 #include <iostream>
6
7 DrawingWindow::DrawingWindow(DrawingArea &a)
8     : QWidget()
9     , drawingArea(a)
10     , pixmap(a.size())
11 {
12     initialize();
13 }
14
15 DrawingWindow::DrawingWindow(QWidget *parent, DrawingArea &a)
16     : QWidget(parent)
17     , drawingArea(a)
18     , pixmap(a.size())
19 {
20     initialize();
21 }
22
23 DrawingWindow::DrawingWindow(QWidget *parent, Qt::WindowFlags flags,
24                              DrawingArea &a)
25     : QWidget(parent, flags)
26     , drawingArea(a)
27     , pixmap(a.size())
28 {
29     initialize();
30 }
31
32 void DrawingWindow::paintEvent(QPaintEvent *ev)
33 {
34     QRect rect = ev->rect();
35     drawingArea.lock();
36     if (drawingArea.isDirty()) {
37         QPainter pixmapPainter(&pixmap);
38         pixmapPainter.drawImage(drawingArea.getDirtyRect(),
39                                 drawingArea.getImage(),
40                                 drawingArea.getDirtyRect());
41         drawingArea.setClean();
42         rect |= drawingArea.getDirtyRect();
43     }
44     drawingArea.unlock();
45     QPainter painter(this);
46     painter.drawPixmap(0, 0, pixmap);
47 }
48
49 void DrawingWindow::timerEvent(QTimerEvent *ev)
50 {
51     if (ev->timerId() == timer.timerId()) {
52         update();
53     } else {
54         QWidget::timerEvent(ev);
55     }
56 }
57
58 void DrawingWindow::initialize()
59 {
60     setFocusPolicy(Qt::StrongFocus);
61     setFixedSize(drawingArea.getImage().size());
62     setAttribute(Qt::WA_OpaquePaintEvent);
63     timer.start(50, this);
64 }