summaryrefslogtreecommitdiffstats
path: root/demos/qt3d/photobrowser3d/imagedisplay.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'demos/qt3d/photobrowser3d/imagedisplay.cpp')
-rw-r--r--demos/qt3d/photobrowser3d/imagedisplay.cpp224
1 files changed, 0 insertions, 224 deletions
diff --git a/demos/qt3d/photobrowser3d/imagedisplay.cpp b/demos/qt3d/photobrowser3d/imagedisplay.cpp
deleted file mode 100644
index a39cfa02..00000000
--- a/demos/qt3d/photobrowser3d/imagedisplay.cpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation ([email protected])
-**
-** This file is part of the QtQuick3D module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** GNU Lesser General Public License Usage
-** This file may be used under the terms of the GNU Lesser General Public
-** License version 2.1 as published by the Free Software Foundation and
-** appearing in the file LICENSE.LGPL included in the packaging of this
-** file. Please review the following information to ensure the GNU Lesser
-** General Public License version 2.1 requirements will be met:
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU General
-** Public License version 3.0 as published by the Free Software Foundation
-** and appearing in the file LICENSE.GPL included in the packaging of this
-** file. Please review the following information to ensure the GNU General
-** Public License version 3.0 requirements will be met:
-** http://www.gnu.org/copyleft/gpl.html.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms and
-** conditions contained in a signed written agreement between you and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "imagedisplay.h"
-#include "thumbnailableimage.h"
-#include "thumbnailnode.h"
-#include "thumbnaileffect.h"
-#include "qglbuilder.h"
-#include "qglcube.h"
-#include "imagemanager.h"
-#include "qatlas.h"
-#include "qglshaderprogrameffect.h"
-#include "qphotobrowser3dscene.h"
-#include "photobrowser3dview.h"
-
-#include <QApplication>
-#include <QChildEvent>
-#include <QUrl>
-#include <QImage>
-
-static inline QImage qMakeFrameImage()
-{
- QImage frm(QSize(128, 128), QImage::Format_ARGB32);
- frm.fill(qRgba(8, 8, 8, 255)); // dark grey frame
- QPainter ptr;
- ptr.begin(&frm);
- QRect r(8, 8, 112, 112);
- ptr.setBackgroundMode(Qt::TransparentMode);
- ptr.fillRect(r, QColor(0, 30, 50, 64));
- ptr.setPen(QColor("orange"));
- ptr.drawText(frm.rect(), Qt::AlignCenter, "Loading...");
- ptr.end();
- return frm;
-}
-
-static inline void qAddPane(QSizeF size, QGeometryData *data)
-{
- Q_ASSERT(data);
- QSizeF f = size / 2.0f;
- QVector2D a(-f.width(), -f.height());
- QVector2D b(f.width(), -f.height());
- QVector2D c(f.width(), f.height());
- QVector2D d(-f.width(), f.height());
- QVector2D ta(0.0f, 0.0f);
- QVector2D tb(1.0f, 0.0f);
- QVector2D tc(1.0f, 1.0f);
- QVector2D td(0.0f, 1.0f);
- int k = data->count();
- data->appendVertex(a, b, c, d);
- data->appendTexCoord(ta, tb, tc, td);
- data->appendIndices(k, k+1, k+2);
- data->appendIndices(k, k+2, k+3);
-}
-
-ImageDisplay::ImageDisplay(QObject *parent, QGLMaterialCollection *materials, qreal wallSize)
- : QGLSceneNode(parent)
- , m_wall(0)
- , m_frames(0)
- , m_currentWall(0)
- , m_currentFrame(0)
- , m_imageSetToDefault(false)
- , m_count(0)
- , m_size(wallSize)
- , m_frameSize((m_size * 3.0f) / 4.0f)
- , m_maxImages(500)
- , m_frameLoadingMaterial(-1)
-{
- // the real values will get poked in here by the atlas
- m_atlasPlaceHolder.append(QVector2D(), QVector2D(), QVector2D(), QVector2D());
-
- setObjectName("ImageDisplay");
- setPalette(materials);
-
- // the frames lie in Z = 0, the wall is set back and lies in
- // the plane Z = (m_size / -4.0)
-
- // build the wall
- qAddPane(QSize(m_size, m_size), &m_wallGeometry);
- m_wall = new QGLSceneNode(this);
- m_wall->setObjectName("Wall");
- m_wall->setPalette(materials);
- m_currentWall = new QGLSceneNode(m_wall);
- m_currentWall->setObjectName("wall 0");
- m_currentWall->setGeometry(m_wallGeometry);
- m_currentWall->setCount(m_wallGeometry.indexCount());
- m_wall->setPosition(QVector3D(0.0f, 0.0f, m_size / -4.0));
-
- // paint the wall
- m_wall->setEffect(QGL::FlatReplaceTexture2D);
- QGLMaterial *mat = new QGLMaterial();
- QGLTexture2D *tex = new QGLTexture2D(mat);
- tex->setImage(QImage(":/res/images/girder.png"));
- mat->setTexture(tex);
- mat->setObjectName("girder material");
- m_wall->setMaterial(mat);
-
- // build the frames
- qAddPane(QSize(m_frameSize, m_frameSize), &m_frameGeometry);
- m_frameGeometry.appendTexCoordArray(m_atlasPlaceHolder, QGL::TextureCoord1);
- m_frames = new QGLSceneNode(this);
- m_frames->setObjectName("Frames");
- m_currentFrame = new ThumbnailNode(m_frames);
- m_currentFrame->setObjectName("frame 0");
- m_currentFrame->setGeometry(m_frameGeometry);
- m_currentFrame->setCount(m_frameGeometry.indexCount());
-
- // use the frames geometry to put the atlas data into
- QAtlas *atlas = QAtlas::instance();
- atlas->setGeometry(m_frameGeometry);
-
- // generally the frames use the thumbnail material & effect
- m_effect = new ThumbnailEffect;
- m_frames->setUserEffect(m_effect);
- m_frames->setEffectEnabled(true);
- m_frames->setMaterial(atlas->material());
-
- // unless they're loading, in which case use the "loading" image
- m_frameImage = qMakeFrameImage();
- mat = new QGLMaterial();
- tex = new QGLTexture2D(mat);
- tex->setHorizontalWrap(QGL::Clamp);
- tex->setImage(m_frameImage);
- mat->setTexture(tex);
- mat->setObjectName("loading image material - default");
- m_frameLoadingMaterial = materials->addMaterial(mat);
- m_currentFrame->setMaterialIndex(m_frameLoadingMaterial);
-
- // make the frames pickable
- PhotoBrowser3DView *view = qobject_cast<PhotoBrowser3DView*>(parent);
- view->scene()->mainNode()->addNode(m_frames);
-
- m_imageSetToDefault = true;
-}
-
-ImageDisplay::~ImageDisplay()
-{
- delete m_effect;
-}
-
-void ImageDisplay::addThumbnailNode(const QUrl &image)
-{
- Q_ASSERT(QThread::currentThread() == thread());
- ImageManager *manager = qobject_cast<ImageManager*>(sender());
- if (!m_imageSetToDefault)
- {
- QVector3D p = m_currentFrame->position();
- p.setX(p.x() - m_size);
- int start = m_frameGeometry.indexCount();
- qAddPane(QSize(m_frameSize, m_frameSize), &m_frameGeometry);
- int count = m_frameGeometry.indexCount() - start;
- m_frameGeometry.appendTexCoordArray(m_atlasPlaceHolder, QGL::TextureCoord1);
- m_currentFrame = new ThumbnailNode(m_frames);
- QString name = QLatin1String("frame %1");
- name.arg(m_count);
- m_currentFrame->setObjectName(name);
- m_currentFrame->setPosition(p);
- m_currentFrame->setStart(start);
- m_currentFrame->setCount(count);
- m_currentFrame->setGeometry(m_frameGeometry);
- m_currentFrame->setMaterialIndex(m_frameLoadingMaterial);
-
- QGLSceneNode *s = m_currentWall->clone(m_wall);
- name = QLatin1String("wall %1");
- name.arg(m_count);
- s->setObjectName(name);
- p = s->position();
- p.setX(p.x() - m_size);
- s->setPosition(p);
- m_currentWall = s;
- }
- m_currentFrame->setUrl(image);
- if (manager)
- {
- connect(m_currentFrame, SIGNAL(imageRequired(ThumbnailableImage)),
- manager, SIGNAL(deployLoader(ThumbnailableImage)));
- connect(manager, SIGNAL(imageReady(ThumbnailableImage)),
- m_currentFrame, SLOT(setImage(ThumbnailableImage)));
- }
- PhotoBrowser3DView *view = qobject_cast<PhotoBrowser3DView*>(parent());
- Q_ASSERT(view);
- connect(m_currentFrame, SIGNAL(nodeChanged()), view, SLOT(update()));
-
- m_imageSetToDefault = false;
- emit framesChanged();
- ++m_count;
-}