diff options
Diffstat (limited to 'src/declarative/canvas/qsimplecanvas.cpp')
-rw-r--r-- | src/declarative/canvas/qsimplecanvas.cpp | 85 |
1 files changed, 48 insertions, 37 deletions
diff --git a/src/declarative/canvas/qsimplecanvas.cpp b/src/declarative/canvas/qsimplecanvas.cpp index e1dd0e8..cb46f94 100644 --- a/src/declarative/canvas/qsimplecanvas.cpp +++ b/src/declarative/canvas/qsimplecanvas.cpp @@ -53,7 +53,7 @@ #include <glheaders.h> #endif #include "qboxlayout.h" -#include "qsimplecanvasserver_p.h" +#include "qsimplecanvasdebugplugin_p.h" #include "qsimplecanvas.h" @@ -533,8 +533,8 @@ void QSimpleCanvasGraphicsView::paintEvent(QPaintEvent *pe) int frametimer = canvas->frameTimer.elapsed(); gfxCanvasTiming.append(QSimpleCanvasTiming(r, frametimer, canvas->lrpTime, tbf)); canvas->lrpTime = 0; - if (canvas->canvasServer) - canvas->canvasServer->addTiming(canvas->lrpTime, frametimer, tbf); + if (canvas->debugPlugin) + canvas->debugPlugin->addTiming(canvas->lrpTime, frametimer, tbf); } void QSimpleCanvasGraphicsView::focusInEvent(QFocusEvent *) @@ -573,11 +573,9 @@ void QSimpleCanvasPrivate::init(QSimpleCanvas::CanvasMode mode) if (continuousUpdate()) qWarning("QSimpleCanvas: Continuous update enabled"); - QByteArray env = qgetenv("GFX_CANVAS_SERVER_PORT"); - if (!env.isEmpty()){ - int port = env.toInt(); - if (port >= 1024) - canvasServer = new QSimpleCanvasServer(port, q); + if (QmlDebugServerPlugin::isDebuggingEnabled()) { + debugPlugin = new QSimpleCanvasDebugPlugin(q); + new QSimpleCanvasSceneDebugPlugin(q); } root = new QSimpleCanvasRootLayer(q); @@ -621,8 +619,10 @@ QSimpleCanvas::~QSimpleCanvas() void QSimpleCanvasPrivate::paint(QPainter &p) { #if defined(QFX_RENDER_QPAINTER) - if (!isSetup) + if (!isSetup) { + ++paintVersion; root->d_func()->setupPainting(0, q->rect()); + } lrpTimer.start(); @@ -830,24 +830,25 @@ void QSimpleCanvas::queueUpdate() void QSimpleCanvas::addDirty(QSimpleCanvasItem *c) { + Q_ASSERT(d->isSimpleCanvas()); queueUpdate(); - if (d->isSimpleCanvas()) { - d->oldDirty |= c->d_func()->data()->lastPaintRect; + d->oldDirty |= c->d_func()->data()->lastPaintRect; #if defined(QFX_RENDER_OPENGL) - // Check for filters - QSimpleCanvasItem *fi = c->parent(); - while(fi) { - if (fi->d_func()->data()->dirty) { - break; - } else if (fi->filter()) { - fi->update(); - break; - } - fi = fi->parent(); + // ### Is this parent crawl going to be a problem for scenes with nots + // of things changing? + // Check for filters + QSimpleCanvasItem *fi = c->parent(); + while(fi) { + if (fi->d_func()->data()->dirty) { + break; + } else if (fi->filter()) { + fi->update(); + break; } -#endif - d->dirtyItems.append(c); + fi = fi->parent(); } +#endif + d->dirtyItems.append(c); } QRect QSimpleCanvasPrivate::dirtyItemClip() const @@ -867,7 +868,7 @@ QRect QSimpleCanvasPrivate::dirtyItemClip() const return rv; } -QRegion QSimpleCanvasPrivate::resetDirty() +QRect QSimpleCanvasPrivate::resetDirty() { if (isSimpleCanvas()) { #if defined(QFX_RENDER_OPENGL) @@ -883,11 +884,11 @@ QRegion QSimpleCanvasPrivate::resetDirty() oldDirty = QRect(); if (fullUpdate()) - return QRegion(); + return QRect(); else - return QRegion(r); + return r; } else { - return QRegion(); + return QRect(); } } @@ -914,18 +915,23 @@ QSimpleCanvasItem *QSimpleCanvas::focusItem(QSimpleCanvasItem *item) const bool QSimpleCanvas::event(QEvent *e) { if (e->type() == QEvent::User && d->isSimpleCanvas()) { + int tbf = d->frameTimer.restart(); d->timer = 0; d->isSetup = true; #if defined(QFX_RENDER_OPENGL1) unsigned int zero = 0; d->root->d_func()->setupPainting(0, rect(), &zero); +#elif defined(QFX_RENDER_OPENGL2) + ++d->paintVersion; + d->opaqueList = 0; + int z = 0; + d->root->d_func()->setupPainting(0, z, &d->opaqueList); #else + ++d->paintVersion; d->root->d_func()->setupPainting(0, rect()); #endif - QRegion r = d->resetDirty(); - - int tbf = d->frameTimer.restart(); + QRect r = d->resetDirty(); #if defined(QFX_RENDER_QPAINTER) if (r.isEmpty() || fullUpdate()) @@ -934,12 +940,12 @@ bool QSimpleCanvas::event(QEvent *e) repaint(r); emit framePainted(); #else - QRect br = r.boundingRect(); - QRect nr(br.x(), height() - br.y() - br.height(), br.width(), br.height()); + + QRect nr(r.x(), height() - r.y() - r.height(), r.width(), r.height()); if (r.isEmpty() || fullUpdate()) d->egl.updateGL(); - else + else d->egl.updateGL(nr); emit framePainted(); #endif @@ -947,16 +953,21 @@ bool QSimpleCanvas::event(QEvent *e) int frametimer = d->frameTimer.elapsed(); gfxCanvasTiming.append(QSimpleCanvasTiming(r, frametimer, d->lrpTime, tbf)); - if (d->canvasServer) - d->canvasServer->addTiming(d->lrpTime, frametimer, tbf); + if (d->debugPlugin) + d->debugPlugin->addTiming(d->lrpTime, frametimer, tbf); d->lrpTime = 0; if (continuousUpdate()) queueUpdate(); return true; - } else { - return QWidget::event(e); } + + if (e->type() == QEvent::ShortcutOverride) { + if (QSimpleCanvasItem *focus = focusItem()) + return focus->event(e); + } + + return QWidget::event(e); } void QSimpleCanvas::paintEvent(QPaintEvent *) |