Revision control
Copy as Markdown
// Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#include "qabstractspritesheet.h"
#include "qabstractspritesheet_p.h"
#include <Qt3DRender/qabstracttexture.h>
QT_BEGIN_NAMESPACE
namespace Qt3DExtras {
using namespace Qt3DCore;
QAbstractSpriteSheetPrivate::QAbstractSpriteSheetPrivate()
: QNodePrivate()
, m_texture(nullptr)
, m_currentIndex(-1)
{
}
void QAbstractSpriteSheetPrivate::init()
{
m_textureTransform.setToIdentity();
}
void QAbstractSpriteSheetPrivate::updateTexture(Qt3DRender::QAbstractTexture *texture)
{
if (m_texture) {
disconnect(m_texture, &Qt3DRender::QAbstractTexture::widthChanged,
this, &QAbstractSpriteSheetPrivate::updateSizes);
disconnect(m_texture, &Qt3DRender::QAbstractTexture::heightChanged,
this, &QAbstractSpriteSheetPrivate::updateSizes);
}
m_texture = texture;
if (m_texture) {
connect(m_texture, &Qt3DRender::QAbstractTexture::widthChanged,
this, &QAbstractSpriteSheetPrivate::updateSizes);
connect(m_texture, &Qt3DRender::QAbstractTexture::heightChanged,
this, &QAbstractSpriteSheetPrivate::updateSizes);
}
}
void QAbstractSpriteSheetPrivate::updateIndex(int newIndex)
{
Q_Q(QAbstractSpriteSheet);
if (newIndex > maxIndex())
newIndex = 0;
m_currentIndex = newIndex;
emit q->currentIndexChanged(newIndex);
updateTransform();
}
QAbstractSpriteSheet::QAbstractSpriteSheet(QAbstractSpriteSheetPrivate &dd, QNode *parent)
: Qt3DCore::QNode(dd, parent)
{
Q_D(QAbstractSpriteSheet);
d->init();
}
QAbstractSpriteSheet::~QAbstractSpriteSheet()
{
}
/*!
\property Qt3DExtras::QAbstractSpriteSheet::texture
Holds the current texture used by the material.
*/
Qt3DRender::QAbstractTexture *QAbstractSpriteSheet::texture() const
{
Q_D(const QAbstractSpriteSheet);
return d->m_texture;
}
void QAbstractSpriteSheet::setTexture(Qt3DRender::QAbstractTexture *texture)
{
Q_D(QAbstractSpriteSheet);
if (d->m_texture != texture) {
d->updateTexture(texture);
d->updateSizes();
emit textureChanged(d->m_texture);
}
}
/*!
\property Qt3DExtras::QAbstractSpriteSheet::textureTransform
\brief Holds the current texture transform.
Holds the texture transform matrix applied to map sprite coordinates
within the sprite sheet texture.
*/
QMatrix3x3 QAbstractSpriteSheet::textureTransform() const
{
Q_D(const QAbstractSpriteSheet);
return d->m_textureTransform;
}
/*!
\property Qt3DExtras::QAbstractSpriteSheet::currentIndex
\brief Holds the current sprite index in the sprite sheet.
The sprite index determines which sprite from the sprite sheet is currently
displayed. Valid indices are based on the specific sprite sheet implementation.
*/
int QAbstractSpriteSheet::currentIndex() const
{
Q_D(const QAbstractSpriteSheet);
return d->m_currentIndex;
}
void QAbstractSpriteSheet::setCurrentIndex(int currentIndex)
{
Q_D(QAbstractSpriteSheet);
d->updateIndex(currentIndex);
}
} // namespace Qt3DExtras
QT_END_NAMESPACE
#include "moc_qabstractspritesheet.cpp"