diff -r 2b40d63a9c3d -r 90517678cc4f qhbstyle/qhbstyleanimation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qhbstyle/qhbstyleanimation.cpp Mon May 03 13:18:40 2010 +0300 @@ -0,0 +1,146 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, version 2.1 of the License. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, +* see "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html/". +* +* Description: +* +*/ +#include "qhbstyleanimation.h" +#include +#include +#include +#include +#include + +#include "qhbstyle.h" +#include "hbframedrawer.h" + + +QHbStyleAnimation::QHbStyleAnimation(QWidget* target, QObject *parent) : + QObject(parent), m_animationIcon(0), m_target(target), m_point(QPoint(0, 0)), m_mask(0) +{ +} + +QHbStyleAnimation::~QHbStyleAnimation() +{ + delete m_animationIcon; + delete m_mask; +} + +const QWidget* QHbStyleAnimation::target()const +{ + return m_target; +} + +QPoint QHbStyleAnimation::point() +{ + return m_point; +} + +void QHbStyleAnimation::setPoint(const QPoint& point) +{ + m_point = point; + m_target->update(); +} + +void QHbStyleAnimation::createAnimationIcon(QStyle::ControlElement element, Qt::Orientations orientation) +{ + //Create mask + HbFrameDrawer drawer; + if (orientation == Qt::Horizontal){ + drawer.setFrameGraphicsName("qtg_fr_progbar_h_mask"); + drawer.setFrameType(HbFrameDrawer::ThreePiecesHorizontal); + } + else { + drawer.setFrameGraphicsName("qtg_fr_progbar_v_mask"); + drawer.setFrameType(HbFrameDrawer::ThreePiecesVertical); + } + drawer.setFillWholeRect(true); + if (m_mask) + delete m_mask; + m_mask = new QPixmap(m_target->rect().size()); + m_mask->fill(Qt::transparent); + QPainter p(m_mask); + drawer.paint(&p, m_target->rect()); + p.end(); + + //Create animated icon + QString iconName; + switch (element) { + case QStyle::CE_ProgressBarContents: { + if (orientation == Qt::Horizontal) + iconName = QLatin1String("qtg_graf_progbar_h_wait"); + else + iconName = QLatin1String("qtg_graf_progbar_v_wait"); + break; + } + default: + break; + } + + if (!iconName.isNull() && !m_target->rect().isEmpty()) { + HbIcon* icon = q_check_ptr(new HbIcon(iconName)); + if(orientation == Qt::Horizontal) + icon->setSize(QSize(icon->width(), m_target->rect().height())); + else + icon->setSize(QSize(m_target->rect().width(), icon->height())); + + const qreal rectWidth = m_target->rect().width(); + const qreal iconWidth = icon->width(); + const qreal rectHeight = m_target->rect().height(); + const qreal iconHeight = icon->height(); + + if (m_animationIcon) + delete m_animationIcon; + + const int animationWidth = (orientation == Qt::Horizontal) ? int(rectWidth + iconWidth) : int(rectWidth); + const int animationHeight = (orientation == Qt::Horizontal) ? int(rectHeight) : int(rectHeight + iconHeight); + + m_animationIcon = q_check_ptr(new QPixmap(animationWidth, animationHeight)); + m_animationIcon->fill(Qt::transparent); + QPainter p(m_animationIcon); + + if (orientation == Qt::Horizontal) { + if (iconWidth > 0) + for (qreal i = 0 ; i < (rectWidth + iconWidth); i += iconWidth) + icon->paint(&p, QRectF(i, 0, iconWidth, iconHeight), Qt::IgnoreAspectRatio, Qt::AlignCenter, QIcon::Normal, QIcon::On); + } else { + if (iconHeight > 0) + for(qreal i = 0 ; i < (rectHeight + iconHeight) ; i += iconHeight) + icon->paint(&p, QRectF(0, i, iconWidth, iconHeight), Qt::IgnoreAspectRatio, Qt::AlignCenter, QIcon::Normal, QIcon::On); + } + p.end(); + } +} + +void QHbStyleAnimation::paintAnimation(QPainter *painter) +{ + Q_ASSERT(m_animationIcon); + Q_ASSERT(painter); + + //Take part from animation icon + QPixmap icon(m_target->rect().size()); + icon.fill(Qt::transparent); + QPainter p(&icon); + p.setCompositionMode(QPainter::CompositionMode_SourceOver); + p.drawPixmap(QPointF(0, 0), *m_mask); + p.setCompositionMode(QPainter::CompositionMode_SourceIn); + p.drawPixmap(m_point, *m_animationIcon, QRect(0, 0, m_target->rect().width() + m_point.rx() * -1, m_target->rect().height() + m_point.ry() * -1)); + p.end(); + + //paint animation + painter->drawPixmap(QPointF(0, 0), icon); +}