ginebra/graphicsitemflipper.cpp
changeset 3 0954f5dd2cd0
parent 1 b0dd75e285d2
child 4 d5cdb6bc139d
--- a/ginebra/graphicsitemflipper.cpp	Fri May 14 15:40:36 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,126 +0,0 @@
-/*
-* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-
-#include <assert.h>
-#include "graphicsitemflipper.h"
-#include "utilities.h"
-
-GraphicsItemFlipper::GraphicsItemFlipper(QGraphicsItem *parentItem, QGraphicsScene *scene, int duration,
-                                         uint updateInterval, int zValue)
-  : m_timeLine(duration)
-{
-    m_timeLine.setUpdateInterval(updateInterval);
-    m_timeLine.setCurveShape(QTimeLine::EaseInOutCurve);
-    safe_connect(&m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(updateFlipStep(qreal)));
-    safe_connect(&m_timeLine, SIGNAL(finished()), this, SLOT(onFinished()));
-
-    m_pixmapItem = new QGraphicsPixmapItem(parentItem);
-    scene->addItem(m_pixmapItem);
-    m_pixmapItem->setZValue(zValue);
-}
-
-GraphicsItemFlipper::~GraphicsItemFlipper()
-{
-    delete m_pixmapItem;
-    if(m_sourcePixmap) delete m_sourcePixmap;
-    if(m_targetPixmap) delete m_targetPixmap;
-}
-
-void GraphicsItemFlipper::start(QGraphicsView *view, QGraphicsWidget *sourceWidget, QGraphicsWidget *targetWidget,
-                                bool forward)
-{
-    emit starting();
-
-    getPixmaps(view, sourceWidget, targetWidget);
-
-    m_pixmapItem->setPixmap(forward ? *m_sourcePixmap : *m_targetPixmap);
-
-    m_pixmapItem->show();
-
-    m_timeLine.setDirection(forward ? QTimeLine::Forward : QTimeLine::Backward);
-    m_timeLine.start();
-}
-
-void GraphicsItemFlipper::getPixmaps(QGraphicsView *view, QGraphicsWidget *sourceWidget, QGraphicsWidget *targetWidget)
-{
-    Q_UNUSED(view)
-    QStyleOptionGraphicsItem options;
-
-    m_sourceRect = sourceWidget->geometry();
-    m_targetRect = targetWidget->geometry();
-
-    // Get a snapshot of the source widget.
-    m_sourcePixmap = new QPixmap(m_sourceRect.size().toSize());
-    QPainter painter(m_sourcePixmap);
-    options.exposedRect = m_sourceRect;
-    sourceWidget->paint(&painter, &options);
-    painter.end();
-
-    // Get a snapshot of the target widget and flip it left to right.
-    QPixmap tmpPixmap(m_targetRect.size().toSize());
-    QPainter targetPainter(&tmpPixmap);
-    options.exposedRect = m_targetRect;
-    targetWidget->paint(&targetPainter, &options);
-    targetPainter.end();
-    m_targetPixmap = new QPixmap(tmpPixmap.transformed(QTransform().rotate(180, Qt::YAxis)));
-}
-
-void GraphicsItemFlipper::updateFlipStep(qreal value)  // slot
-{
-    //qreal scale = 1 - sin(3.14 * value) * 0.5;
-    qreal sourceW = m_sourceRect.width();
-    qreal sourceH = m_sourceRect.height();
-    qreal deltaW = m_targetRect.width() - sourceW;
-    qreal deltaH = m_targetRect.height() - sourceH;
-    qreal deltaX = m_targetRect.left() - m_sourceRect.left();
-    qreal deltaY = m_targetRect.top() - m_sourceRect.top();
-    qreal xScale = (sourceW + (deltaW * value))/sourceW;
-    qreal yScale = (sourceH + (deltaH * value))/sourceH;
-    qreal newW = sourceW * xScale;
-    qreal newH = sourceH * yScale;
-    qreal dx = m_pixmapItem->pos().x() + (deltaX * value) + (newW/2);
-
-//    qDebug() << "GraphicsItemFlipper::updateFlipStep: value=" << value;
-//            << " xScale=" << xScale
-//            << " newW=" << newW
-//            << " deltaX=" << deltaX;
-
-    // Set the appropriate pixmap.  If we've gone past the halfway point, ie. the item is edge-on,
-    // switch pixmaps.
-    // To do: Only set the pixmap twice, once when the animation starts and once at the halfway
-    //        point.  Need to be sure resolution is correct at the end of the animation.
-    if(value > 0.5) {
-        m_pixmapItem->setPixmap(m_targetPixmap->scaled(int(newW), int(newH)));
-    }
-    else {
-        m_pixmapItem->setPixmap(m_sourcePixmap->scaled(int(newW), int(newH)));
-    }
-
-    QTransform transform;
-    transform.translate(dx, 0);
-    transform.rotate(180 * value, Qt::YAxis);
-    transform.translate(-dx, 0);
-    transform.translate(deltaX * value, deltaY * value);
-    m_pixmapItem->setTransform(transform);
-}
-
-void GraphicsItemFlipper::onFinished()
-{
-    m_pixmapItem->hide();
-    emit finished();
-}