// #define MOUSE_DEBUG
// #define TOUCH_DEBUG
// #define DIRTY_DEBUG
-#define THREAD_DEBUG
+// #define THREAD_DEBUG
// #define FRAME_TIMING
void QSGCanvas::resizeEvent(QResizeEvent *e)
{
+ // Since we are faking resizeEvent from QEvent::Map in event(), spit
+ // out a warning when it starts to work properly
+ if (e)
+ qDebug("Resize events are working, remove this code: %s : %d", __FILE__, __LINE__);
+
Q_D(QSGCanvas);
- d->thread->resize(e->size());
+ d->thread->resize(size());
}
void QSGCanvas::showEvent(QShowEvent *e)
{
+ // Since we are faking the showEvent from QEvent::Map in ::event(), spit
+ // out a warning when it starts to work properly...
+ if (e)
+ qDebug("Show events are working, remove this code: %s : %d", __FILE__, __LINE__);
+
Q_D(QSGCanvas);
if (d->vsyncAnimations) {
}
d->animationDriver->install();
}
- d->thread->startRenderThread();
+
+ if (!d->thread->isRunning()) {
+ d->thread->windowSize = size();
+ d->thread->startRenderThread();
+ }
}
void QSGCanvas::hideEvent(QHideEvent *e)
{
+ // Since we are faking the showEvent from QEvent::Map in ::event(), spit
+ // out a warning when it starts to work properly...
+ if (e)
+ qDebug("Hide events are working, remove this code: %s : %d", __FILE__, __LINE__);
+
Q_D(QSGCanvas);
d->thread->stopRenderThread();
}
thread = new QSGCanvasRenderThread;
thread->renderer = q;
thread->d = this;
+
+ context = QSGContext::createDefaultContext();
+ context->moveToThread(thread);
}
void QSGCanvasPrivate::sceneMouseEventForTransform(QGraphicsSceneMouseEvent &sceneEvent,
: QWindow(parent)
{
Q_D(QSGCanvas);
-
d->init(this);
}
: QWindow(dd, parent)
{
Q_D(QSGCanvas);
-
d->init(this);
}
bool QSGCanvas::event(QEvent *e)
{
+ // Fake a resize/show/hide events until QWindow starts sending events properly.
+ if (e->type() == QEvent::Map) {
+ resizeEvent(0);
+ showEvent(0);
+ } else if(e->type() == QEvent::Unmap) {
+ hideEvent(0);
+ }
+
Q_D(QSGCanvas);
if (e->type() == QEvent::User) {
QSGView::ResizeMode resizeMode;
QSize initialSize;
QElapsedTimer frameTimer;
+
+ bool resized;
};
void QSGViewPrivate::init()
}
QSGViewPrivate::QSGViewPrivate()
-: root(0), component(0), resizeMode(QSGView::SizeViewToRootObject), initialSize(0,0)
+ : root(0), component(0), resizeMode(QSGView::SizeViewToRootObject), initialSize(0,0), resized(false)
{
}
delete obj;
root = 0;
}
-
if (root) {
initialSize = rootObjectSize();
- if ((resizeMode == QSGView::SizeViewToRootObject) // ### refactor: || !q->testAttribute(Qt::WA_Resized)
+ if ((resizeMode == QSGView::SizeViewToRootObject || !resized) // ### refactor: || !q->testAttribute(Qt::WA_Resized)
&& initialSize != q->size()) {
- q->resize(initialSize);
+
+ q->resize(initialSize);
+ resized = true;
}
initResize();
}