Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
.
[graphlib.git] / DrawingWindow.cpp
index 9a8d501..4e34d9e 100644 (file)
@@ -3,6 +3,8 @@
 #include <QThread>
 #include <QTimerEvent>
 
+#include <iostream>
+
 class DrawingWindow::DrawingThread: public QThread {
 public:
     DrawingThread(DrawingWindow &w, ThreadFunction f)
@@ -13,7 +15,7 @@ public:
 
     void run()
     {
-        exit(threadFunction(drawingWindow));
+        threadFunction(drawingWindow);
     }
 
 private:
@@ -49,12 +51,6 @@ void DrawingWindow::initialize(ThreadFunction fun, int width, int height)
 
     painter = new QPainter(image);
 
-#ifdef USE_PIXMAP_CACHE
-    pixmap = new QPixmap(image->size());
-    QPainter pixmapPainter(pixmap);
-    pixmapPainter.drawImage(0, 0, *image);
-#endif
-
     dirtyFlag = false;
 
     setFocusPolicy(Qt::StrongFocus);
@@ -65,16 +61,24 @@ void DrawingWindow::initialize(ThreadFunction fun, int width, int height)
 
     thread = new DrawingThread(*this, fun);
     thread_started = false;
+
+    mutex_enabled = true;
 }
 
 DrawingWindow::~DrawingWindow()
 {
+    mutex.lock();
+    mutex_enabled = false;
+    mutex.unlock();
+    std::cerr << "A\n";
+    thread->terminate();    
+    std::cerr << "B\n";
+    thread->wait();
+    std::cerr << "C\n";
     delete thread;
-#ifdef USE_PIXMAP_CACHE
-    delete pixmap;
-#endif
     delete painter;
     delete image;
+    std::cerr << "D\n";
 }
 
 void DrawingWindow::setColor(const QColor &color)
@@ -111,13 +115,10 @@ void DrawingWindow::paintEvent(QPaintEvent *ev)
 {
     QPainter widgetPainter(this);
     QRect rect = ev->rect();
-#ifdef USE_PIXMAP_CACHE
-    widgetPainter.drawPixmap(rect, *pixmap, rect);
-#else
     lock();
-    widgetPainter.drawImage(rect, *image, rect);
+    QImage imageCopy(*image);
     unlock();
-#endif
+    widgetPainter.drawImage(rect, imageCopy, rect);
 }
 
 void DrawingWindow::showEvent(QShowEvent *ev)
@@ -134,37 +135,16 @@ void DrawingWindow::timerEvent(QTimerEvent *ev)
     if (ev->timerId() == timer.timerId()) {
         lock();
         if (dirtyFlag) {
-#ifdef USE_PIXMAP_CACHE
-            QPainter pixmapPainter(pixmap);
-            pixmapPainter.drawImage(dirtyRect, *image, dirtyRect);
-#endif
-            dirtyFlag = false;
             update(dirtyRect);
-            timer.start(paintInterval, this);
+            dirtyFlag = false;
         }
         unlock();
+        timer.start(paintInterval, this);
     } else {
         QWidget::timerEvent(ev);
     }
 }
 
-void DrawingWindow::setDirtyRect()
-{
-    setDirtyRect(QRect(0, 0, width(), height()));
-}
-
-void DrawingWindow::setDirtyRect(int x, int y)
-{
-    setDirtyRect(QRect(x, y, 1, 1));
-}
-
-void DrawingWindow::setDirtyRect(int x1, int y1, int x2, int y2)
-{
-    QRect r;
-    r.setCoords(x1, y1, x2, y2);
-    setDirtyRect(r.normalized());
-}
-
 void DrawingWindow::setDirtyRect(const QRect &rect)
 {
     if (dirtyFlag) {