aboutsummaryrefslogtreecommitdiff
path: root/src/ParallaxScrollerItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ParallaxScrollerItem.cpp')
-rw-r--r--src/ParallaxScrollerItem.cpp47
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());
+ }
+ }
+ }
+}