diff -r b0dd75e285d2 -r 0954f5dd2cd0 ginebra/graphicsitemflipper.cpp --- 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 -#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(); -}