+//--- DrawingWindowPrivate ---------------------------------------------
+
+DrawingWindowPrivate::DrawingWindowPrivate(DrawingWindow *w,
+ DrawingWindow::ThreadFunction f)
+ : q(w)
+ , image(new QImage(q->width, q->height, QImage::Format_RGB32))
+ , painter(new QPainter(image))
+ , thread(new DrawingThread(*q, f))
+{
+}
+
+void DrawingWindowPrivate::initialize()
+{
+ q->setFocusPolicy(Qt::StrongFocus);
+ q->setFixedSize(image->size());
+ q->setAttribute(Qt::WA_OpaquePaintEvent);
+ q->setFocus();
+
+ q->setColor(0.0, 0.0, 0.0);
+ q->setBgColor(1.0, 1.0, 1.0);
+ q->clearGraph();
+
+ dirtyFlag = false;
+}
+
+DrawingWindowPrivate::~DrawingWindowPrivate()
+{
+ delete thread;
+ delete painter;
+ delete image;
+}
+
+inline
+void DrawingWindowPrivate::lock()
+{
+ thread->setTerminationEnabled(false);
+ mutex.lock();
+}
+
+inline
+void DrawingWindowPrivate::unlock()
+{
+ mutex.unlock();
+ thread->setTerminationEnabled(true);
+}
+
+inline
+void DrawingWindowPrivate::setDirtyRect()
+{
+ dirtyFlag = true;
+ dirtyRect = image->rect();
+}
+
+inline
+void DrawingWindowPrivate::setDirtyRect(int x, int y)
+{
+ setDirtyRect(QRect(x, y, 1, 1));
+}
+
+inline
+void DrawingWindowPrivate::setDirtyRect(int x1, int y1, int x2, int y2)
+{
+ QRect r;
+ r.setCoords(x1, y1, x2, y2);
+ setDirtyRect(r.normalized());
+}
+
+void DrawingWindowPrivate::setDirtyRect(const QRect &rect)