#include <iostream>
+/*
+ TODO :
+ class DrawingWindowPrivate { ... }
+ externalize class DrawingThread
+*/
+
DrawingWindow::DrawingWindow(ThreadFunction fun, int width, int height)
: QWidget()
{
void DrawingWindow::closeEvent(QCloseEvent *ev)
{
- std::cerr << "A\n";
- lock();
- std::cerr << "B\n";
thread->terminate();
- std::cerr << "C\n";
QWidget::closeEvent(ev);
- std::cerr << "D\n";
thread->wait();
- std::cerr << "E\n";
- unlock();
- std::cerr << "F\n";
}
void DrawingWindow::paintEvent(QPaintEvent *ev)
{
QPainter widgetPainter(this);
QRect rect = ev->rect();
- lock();
+ mutex.lock();
QImage imageCopy(*image);
- unlock();
+ mutex.unlock();
widgetPainter.drawImage(rect, imageCopy, rect);
}
void DrawingWindow::timerEvent(QTimerEvent *ev)
{
if (ev->timerId() == timer.timerId()) {
- lock();
+ mutex.lock();
if (dirtyFlag) {
update(dirtyRect);
dirtyFlag = false;
}
- unlock();
+ mutex.unlock();
timer.start(paintInterval, this);
} else {
QWidget::timerEvent(ev);
inline
void DrawingWindow::DrawingThread::enableTerminate()
{
- if (currentThread() == this)
- setTerminationEnabled(true);
+ setTerminationEnabled(true);
}
inline
void DrawingWindow::DrawingThread::disableTerminate()
{
- if (currentThread() == this)
- setTerminationEnabled(false);
+ setTerminationEnabled(false);
}
#endif // !DRAWING_WINDOW_H