diff options
Diffstat (limited to 'src/ParallaxScrollerItem.cpp')
| -rw-r--r-- | src/ParallaxScrollerItem.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/ParallaxScrollerItem.cpp b/src/ParallaxScrollerItem.cpp new file mode 100644 index 0000000..0480b29 --- /dev/null +++ b/src/ParallaxScrollerItem.cpp @@ -0,0 +1,47 @@ +#include "ParallaxScrollerItem.h" + +#include <QGraphicsView> +#include <QGraphicsScene> +#include <QScrollBar> + +#include <QPainter> +#include <QDebug> + +ParallaxScrollerItem::ParallaxScrollerItem(QString layer, QPointF pos, + qreal depthFactor, qreal speed, + qreal factor, QGraphicsScene *scene, + QGraphicsItem *parent) + : QGraphicsPixmapItem(parent, scene), m_scrollSpeed(speed), m_factor(factor) +{ + m_scrollingSpeedSlowingFactor = 0; + m_layer.load(layer); + setPixmap(m_layer); + setPos(pos); + setZValue(depthFactor); +} + +ParallaxScrollerItem::~ParallaxScrollerItem() +{ + +} + +void ParallaxScrollerItem::advance(int phase) +{ + if(phase == 1) + { + m_scrollingSpeedSlowingFactor++; + if(m_scrollingSpeedSlowingFactor % m_factor == 0) + { + m_scrollingSpeedSlowingFactor = 0; + setPos(x()-m_scrollSpeed, y()); + + QGraphicsView* v = scene()->views().first(); + QPointF p = v->mapToScene(v->viewport()->x(), 0); + + if(x() <= p.x()-pixmap().width()) + { + setPos(p.x()+pixmap().width()-m_scrollSpeed, y()); + } + } + } +} |
