src/hbwidgets/editors/hbmagnifier_p.cpp
author hgs
Mon, 18 Oct 2010 18:23:13 +0300
changeset 34 ed14f46c0e55
permissions -rw-r--r--
201041
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
34
hgs
parents:
diff changeset
     1
/****************************************************************************
hgs
parents:
diff changeset
     2
**
hgs
parents:
diff changeset
     3
** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     4
** All rights reserved.
hgs
parents:
diff changeset
     5
** Contact: Nokia Corporation (developer.feedback@nokia.com)
hgs
parents:
diff changeset
     6
**
hgs
parents:
diff changeset
     7
** This file is part of the HbWidgets module of the UI Extensions for Mobile.
hgs
parents:
diff changeset
     8
**
hgs
parents:
diff changeset
     9
** GNU Lesser General Public License Usage
hgs
parents:
diff changeset
    10
** This file may be used under the terms of the GNU Lesser General Public
hgs
parents:
diff changeset
    11
** License version 2.1 as published by the Free Software Foundation and
hgs
parents:
diff changeset
    12
** appearing in the file LICENSE.LGPL included in the packaging of this file.
hgs
parents:
diff changeset
    13
** Please review the following information to ensure the GNU Lesser General
hgs
parents:
diff changeset
    14
** Public License version 2.1 requirements will be met:
hgs
parents:
diff changeset
    15
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
hgs
parents:
diff changeset
    16
**
hgs
parents:
diff changeset
    17
** In addition, as a special exception, Nokia gives you certain additional
hgs
parents:
diff changeset
    18
** rights.  These rights are described in the Nokia Qt LGPL Exception
hgs
parents:
diff changeset
    19
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
hgs
parents:
diff changeset
    20
**
hgs
parents:
diff changeset
    21
** If you have questions regarding the use of this file, please contact
hgs
parents:
diff changeset
    22
** Nokia at developer.feedback@nokia.com.
hgs
parents:
diff changeset
    23
**
hgs
parents:
diff changeset
    24
****************************************************************************/
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
//
hgs
parents:
diff changeset
    27
//  W A R N I N G
hgs
parents:
diff changeset
    28
//  -------------
hgs
parents:
diff changeset
    29
//
hgs
parents:
diff changeset
    30
// This file is not part of the Hb API.  It exists purely as an
hgs
parents:
diff changeset
    31
// implementation detail.  This file may change from version to
hgs
parents:
diff changeset
    32
// version without notice, or even be removed.
hgs
parents:
diff changeset
    33
//
hgs
parents:
diff changeset
    34
// We mean it.
hgs
parents:
diff changeset
    35
//
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
#include "hbmagnifier_p.h"
hgs
parents:
diff changeset
    39
#include "hbwidget_p.h"
hgs
parents:
diff changeset
    40
#include "hbframedrawer.h"
hgs
parents:
diff changeset
    41
#include "hbframeitem.h"
hgs
parents:
diff changeset
    42
#include "hbicon.h"
hgs
parents:
diff changeset
    43
#include "hbeffect.h"
hgs
parents:
diff changeset
    44
#include <QGraphicsItem>
hgs
parents:
diff changeset
    45
#include <QGraphicsSceneResizeEvent>
hgs
parents:
diff changeset
    46
#include <QPainter>
hgs
parents:
diff changeset
    47
#include <QDebug>
hgs
parents:
diff changeset
    48
#include <QPixmap>
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/*
hgs
parents:
diff changeset
    51
    @beta
hgs
parents:
diff changeset
    52
    @hbwidgets
hgs
parents:
diff changeset
    53
    \class HbMagnifier
hgs
parents:
diff changeset
    54
    \brief HbMagnifier is a widget class for magnifying a content of another widget.
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
*/
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
class HbMagnifierPrivate :public HbWidgetPrivate
hgs
parents:
diff changeset
    60
{
hgs
parents:
diff changeset
    61
    Q_DECLARE_PUBLIC(HbMagnifier)
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
public:
hgs
parents:
diff changeset
    64
    HbMagnifierPrivate();
hgs
parents:
diff changeset
    65
    virtual ~HbMagnifierPrivate();
hgs
parents:
diff changeset
    66
    void init();
hgs
parents:
diff changeset
    67
    void updatePaintInfo();
hgs
parents:
diff changeset
    68
    void drawBackground(QPainter * painter);
hgs
parents:
diff changeset
    69
    void drawContent(QPainter * painter, const QStyleOptionGraphicsItem *option);
hgs
parents:
diff changeset
    70
    void drawMask(QPainter * painter);
hgs
parents:
diff changeset
    71
    void drawOverlay(QPainter * painter);
hgs
parents:
diff changeset
    72
    void _q_hidingEffectFinished(const HbEffect::EffectStatus &status);
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
public:
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
    HbIcon background;
hgs
parents:
diff changeset
    78
    HbMagnifierDelegate *delegate;
hgs
parents:
diff changeset
    79
    HbFrameDrawer* maskDrawer;
hgs
parents:
diff changeset
    80
    HbFrameDrawer* overlayDrawer;
hgs
parents:
diff changeset
    81
    qreal contentScaleFactor;    
hgs
parents:
diff changeset
    82
    QPointF centerOnContentPos;
hgs
parents:
diff changeset
    83
    bool centerOnContentPosSet;
hgs
parents:
diff changeset
    84
    // The offset from the content point to be displayed in the center of the magnifier
hgs
parents:
diff changeset
    85
    QPointF centerOffset;
hgs
parents:
diff changeset
    86
    QRectF  exposedContentRect;
hgs
parents:
diff changeset
    87
    QPointF lockPos;
hgs
parents:
diff changeset
    88
    bool lockPosSet;
hgs
parents:
diff changeset
    89
    HbMagnifier::ContentLockStyle contentLockStyle;
hgs
parents:
diff changeset
    90
    bool isHidingInProgress;
hgs
parents:
diff changeset
    91
};
hgs
parents:
diff changeset
    92
hgs
parents:
diff changeset
    93
HbMagnifierPrivate::HbMagnifierPrivate():
hgs
parents:
diff changeset
    94
        delegate(0),
hgs
parents:
diff changeset
    95
        maskDrawer(0),
hgs
parents:
diff changeset
    96
        overlayDrawer(0),
hgs
parents:
diff changeset
    97
        contentScaleFactor(1.0),
hgs
parents:
diff changeset
    98
        centerOnContentPosSet(false),
hgs
parents:
diff changeset
    99
        lockPosSet(false),
hgs
parents:
diff changeset
   100
        contentLockStyle(HbMagnifier::ContentLockStyleSmooth),
hgs
parents:
diff changeset
   101
        isHidingInProgress(false)
hgs
parents:
diff changeset
   102
{
hgs
parents:
diff changeset
   103
}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
HbMagnifierPrivate::~HbMagnifierPrivate()
hgs
parents:
diff changeset
   106
{
hgs
parents:
diff changeset
   107
    delete delegate;
hgs
parents:
diff changeset
   108
    delete maskDrawer;  
hgs
parents:
diff changeset
   109
}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
void HbMagnifierPrivate::init()
hgs
parents:
diff changeset
   112
{
hgs
parents:
diff changeset
   113
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   114
    q->setFlag(QGraphicsItem::ItemClipsToShape);
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    HbEffect::add("magnifier","magnifier_active","active");
hgs
parents:
diff changeset
   117
    HbEffect::add("magnifier","magnifier_disappear","disappear");
hgs
parents:
diff changeset
   118
}
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
void HbMagnifierPrivate::updatePaintInfo()
hgs
parents:
diff changeset
   121
{
hgs
parents:
diff changeset
   122
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
    // For performance set exposed rect to avoid rendering full content
hgs
parents:
diff changeset
   125
    exposedContentRect = q->boundingRect();
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    // Compensate for scaling
hgs
parents:
diff changeset
   128
    exposedContentRect.setWidth(exposedContentRect.width()/contentScaleFactor);
hgs
parents:
diff changeset
   129
    exposedContentRect.setHeight(exposedContentRect.height()/contentScaleFactor);
hgs
parents:
diff changeset
   130
    QPointF  magnifierCenter = exposedContentRect.center();
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    if (centerOnContentPosSet) {
hgs
parents:
diff changeset
   133
        QPointF centerOfExposedContentRect = centerOnContentPos;
hgs
parents:
diff changeset
   134
        if (lockPosSet) {
hgs
parents:
diff changeset
   135
            
hgs
parents:
diff changeset
   136
            QPointF centerMoveOffset = q->pos() - lockPos;
hgs
parents:
diff changeset
   137
            if (contentLockStyle == HbMagnifier::ContentLockStyleFrozen) {
hgs
parents:
diff changeset
   138
                centerMoveOffset /= contentScaleFactor;
hgs
parents:
diff changeset
   139
            }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
            centerOfExposedContentRect += centerMoveOffset;
hgs
parents:
diff changeset
   142
        }
hgs
parents:
diff changeset
   143
        exposedContentRect.moveCenter(centerOfExposedContentRect);
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        centerOffset = magnifierCenter-centerOfExposedContentRect;
hgs
parents:
diff changeset
   146
    }
hgs
parents:
diff changeset
   147
}
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
void HbMagnifierPrivate::drawBackground(QPainter * painter)
hgs
parents:
diff changeset
   150
{   
hgs
parents:
diff changeset
   151
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   152
    background.paint(painter,q->boundingRect(),Qt::IgnoreAspectRatio);
hgs
parents:
diff changeset
   153
}
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
void HbMagnifierPrivate::drawContent(QPainter * painter, const QStyleOptionGraphicsItem *option)
hgs
parents:
diff changeset
   156
{
hgs
parents:
diff changeset
   157
    if (delegate) {
hgs
parents:
diff changeset
   158
        //QTransform oldTransform = painter->transform();
hgs
parents:
diff changeset
   159
        //QPainter::RenderHints oldRenderHints = painter->renderHints();
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
        // We have to save the full painter state because of a Qt bug: QTBUG-7458 concerning clipping
hgs
parents:
diff changeset
   162
        // region on raster backed paint device.
hgs
parents:
diff changeset
   163
        // Once it is fixed it is enough save and restore transform and renderHints
hgs
parents:
diff changeset
   164
        painter->save();
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
        painter->setCompositionMode(QPainter::CompositionMode_SourceOver);
hgs
parents:
diff changeset
   167
        painter->setRenderHint(QPainter::TextAntialiasing);
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
        QStyleOptionGraphicsItem tmpOption = *option;
hgs
parents:
diff changeset
   170
        tmpOption.exposedRect = exposedContentRect;
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        QTransform transform;
hgs
parents:
diff changeset
   173
        transform.scale(contentScaleFactor,contentScaleFactor);
hgs
parents:
diff changeset
   174
        transform.translate(centerOffset.x(),centerOffset.y());
hgs
parents:
diff changeset
   175
        painter->setTransform(transform);
hgs
parents:
diff changeset
   176
        delegate->drawContents(painter, &tmpOption);
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
        painter->restore();
hgs
parents:
diff changeset
   179
        // Restore painter settings
hgs
parents:
diff changeset
   180
        //painter->setTransform(oldTransform);
hgs
parents:
diff changeset
   181
        //painter->setRenderHints(oldRenderHints);
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    }
hgs
parents:
diff changeset
   184
}
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
void HbMagnifierPrivate::drawMask(QPainter * painter)
hgs
parents:
diff changeset
   187
{
hgs
parents:
diff changeset
   188
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    if (maskDrawer) {
hgs
parents:
diff changeset
   191
        painter->setCompositionMode( QPainter::CompositionMode_DestinationIn );
hgs
parents:
diff changeset
   192
        maskDrawer->paint(painter,q->boundingRect());
hgs
parents:
diff changeset
   193
    }
hgs
parents:
diff changeset
   194
}
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
void HbMagnifierPrivate::drawOverlay(QPainter * painter)
hgs
parents:
diff changeset
   197
{
hgs
parents:
diff changeset
   198
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    if (overlayDrawer) {
hgs
parents:
diff changeset
   201
        painter->setCompositionMode( QPainter::CompositionMode_SourceOver );
hgs
parents:
diff changeset
   202
        overlayDrawer->paint(painter,q->boundingRect());
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
}
hgs
parents:
diff changeset
   205
hgs
parents:
diff changeset
   206
void HbMagnifierPrivate::_q_hidingEffectFinished(const HbEffect::EffectStatus &status)
hgs
parents:
diff changeset
   207
{
hgs
parents:
diff changeset
   208
    Q_UNUSED(status);
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
    Q_Q(HbMagnifier);
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    HbEffect::cancel(q, QString(), true);
hgs
parents:
diff changeset
   213
    q->hide();
hgs
parents:
diff changeset
   214
    isHidingInProgress = false;
hgs
parents:
diff changeset
   215
}
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
/*
hgs
parents:
diff changeset
   219
* Constructs a magnifier with given  \a parent graphics item.
hgs
parents:
diff changeset
   220
*/
hgs
parents:
diff changeset
   221
HbMagnifier::HbMagnifier(QGraphicsItem *parent) :
hgs
parents:
diff changeset
   222
    HbWidget(*new HbMagnifierPrivate,parent)
hgs
parents:
diff changeset
   223
{
hgs
parents:
diff changeset
   224
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   225
    d->q_ptr = this;
hgs
parents:
diff changeset
   226
    d->init();
hgs
parents:
diff changeset
   227
}
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
/*
hgs
parents:
diff changeset
   231
    \internal
hgs
parents:
diff changeset
   232
 */
hgs
parents:
diff changeset
   233
HbMagnifier::HbMagnifier(HbMagnifierPrivate &dd, QGraphicsItem *parent) :
hgs
parents:
diff changeset
   234
    HbWidget(dd, parent)
hgs
parents:
diff changeset
   235
{
hgs
parents:
diff changeset
   236
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   237
    d->q_ptr = this;
hgs
parents:
diff changeset
   238
    d->init();
hgs
parents:
diff changeset
   239
}
hgs
parents:
diff changeset
   240
/*
hgs
parents:
diff changeset
   241
* Destroys the magnifier.
hgs
parents:
diff changeset
   242
*/
hgs
parents:
diff changeset
   243
HbMagnifier::~HbMagnifier()
hgs
parents:
diff changeset
   244
{
hgs
parents:
diff changeset
   245
}
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
void HbMagnifier::setBackground(const QString& graphicsName)
hgs
parents:
diff changeset
   248
{
hgs
parents:
diff changeset
   249
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   250
    d->background.setIconName(graphicsName);
hgs
parents:
diff changeset
   251
    d->background.setSize(boundingRect().size());
hgs
parents:
diff changeset
   252
}
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
void HbMagnifier::setMask(const QString& graphicsName)
hgs
parents:
diff changeset
   255
{
hgs
parents:
diff changeset
   256
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   257
    if (!d->maskDrawer) {
hgs
parents:
diff changeset
   258
        d->maskDrawer = new HbFrameDrawer();
hgs
parents:
diff changeset
   259
    }
hgs
parents:
diff changeset
   260
    if (d->maskDrawer->frameGraphicsName() != graphicsName) {
hgs
parents:
diff changeset
   261
        d->maskDrawer->setFrameGraphicsName(graphicsName);
hgs
parents:
diff changeset
   262
        // TODO: Is this line needed?
hgs
parents:
diff changeset
   263
        d->maskDrawer->setFrameType(HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   264
        update();
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
    }
hgs
parents:
diff changeset
   267
}
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
void HbMagnifier::setOverlay(const QString& graphicsName)
hgs
parents:
diff changeset
   270
{
hgs
parents:
diff changeset
   271
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   272
    if (!d->overlayDrawer) {
hgs
parents:
diff changeset
   273
        d->overlayDrawer = new HbFrameDrawer();
hgs
parents:
diff changeset
   274
    }
hgs
parents:
diff changeset
   275
    if (d->overlayDrawer->frameGraphicsName() != graphicsName) {
hgs
parents:
diff changeset
   276
        d->overlayDrawer->setFrameGraphicsName(graphicsName);
hgs
parents:
diff changeset
   277
        // TODO: Is this line needed?
hgs
parents:
diff changeset
   278
        d->overlayDrawer->setFrameType(HbFrameDrawer::NinePieces);
hgs
parents:
diff changeset
   279
        update();
hgs
parents:
diff changeset
   280
    }
hgs
parents:
diff changeset
   281
}
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
void HbMagnifier::setContentDelegate(HbMagnifierDelegate * delegate)
hgs
parents:
diff changeset
   285
{
hgs
parents:
diff changeset
   286
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   287
    d->delegate = delegate;
hgs
parents:
diff changeset
   288
}
hgs
parents:
diff changeset
   289
hgs
parents:
diff changeset
   290
HbMagnifierDelegate * HbMagnifier::contentDelegate() const
hgs
parents:
diff changeset
   291
{
hgs
parents:
diff changeset
   292
    Q_D(const HbMagnifier);
hgs
parents:
diff changeset
   293
    return d->delegate;
hgs
parents:
diff changeset
   294
}
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
void HbMagnifier::setContentScale(qreal factor)
hgs
parents:
diff changeset
   297
{
hgs
parents:
diff changeset
   298
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   299
    d->contentScaleFactor = factor;
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    d->updatePaintInfo();
hgs
parents:
diff changeset
   302
    update();
hgs
parents:
diff changeset
   303
}
hgs
parents:
diff changeset
   304
hgs
parents:
diff changeset
   305
qreal HbMagnifier::contentScale() const
hgs
parents:
diff changeset
   306
{
hgs
parents:
diff changeset
   307
    Q_D(const HbMagnifier);
hgs
parents:
diff changeset
   308
    return d->contentScaleFactor;
hgs
parents:
diff changeset
   309
}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
void HbMagnifier::centerOnContent ( const QPointF & pos )
hgs
parents:
diff changeset
   312
{    
hgs
parents:
diff changeset
   313
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
    d->centerOnContentPos = pos;
hgs
parents:
diff changeset
   316
    d->centerOnContentPosSet = true;
hgs
parents:
diff changeset
   317
    d->updatePaintInfo();
hgs
parents:
diff changeset
   318
    update();
hgs
parents:
diff changeset
   319
}
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
bool HbMagnifier::isContentPositionLocked() const
hgs
parents:
diff changeset
   322
{
hgs
parents:
diff changeset
   323
    Q_D(const HbMagnifier);
hgs
parents:
diff changeset
   324
    return d->lockPosSet;
hgs
parents:
diff changeset
   325
}
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
void HbMagnifier::lockContentPosition()
hgs
parents:
diff changeset
   328
{
hgs
parents:
diff changeset
   329
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   330
    d->lockPos = pos();
hgs
parents:
diff changeset
   331
    d->lockPosSet = true;
hgs
parents:
diff changeset
   332
    update();
hgs
parents:
diff changeset
   333
}
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
void HbMagnifier::unlockContentPosition()
hgs
parents:
diff changeset
   336
{
hgs
parents:
diff changeset
   337
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   338
    d->lockPosSet = false;
hgs
parents:
diff changeset
   339
}
hgs
parents:
diff changeset
   340
hgs
parents:
diff changeset
   341
void HbMagnifier::setContentLockstyle(ContentLockStyle contentLockStyle)
hgs
parents:
diff changeset
   342
{
hgs
parents:
diff changeset
   343
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   344
    d->contentLockStyle = contentLockStyle;
hgs
parents:
diff changeset
   345
}
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
HbMagnifier::ContentLockStyle HbMagnifier::contentLockstyle() const
hgs
parents:
diff changeset
   348
{
hgs
parents:
diff changeset
   349
    Q_D(const HbMagnifier);
hgs
parents:
diff changeset
   350
    return d->contentLockStyle;
hgs
parents:
diff changeset
   351
}
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
/*
hgs
parents:
diff changeset
   355
    \reimp
hgs
parents:
diff changeset
   356
 */
hgs
parents:
diff changeset
   357
void HbMagnifier::paint(QPainter *painter_res, const QStyleOptionGraphicsItem *option, QWidget *widget)
hgs
parents:
diff changeset
   358
{
hgs
parents:
diff changeset
   359
    Q_UNUSED(widget)
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    QPixmap contentPixmap(boundingRect().size().toSize());
hgs
parents:
diff changeset
   364
    contentPixmap.fill(Qt::transparent);
hgs
parents:
diff changeset
   365
    QPainter painter(&contentPixmap);
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
    d->drawBackground(&painter);
hgs
parents:
diff changeset
   368
    d->drawContent(&painter,option);
hgs
parents:
diff changeset
   369
    d->drawMask(&painter);
hgs
parents:
diff changeset
   370
    d->drawOverlay(&painter);
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
    painter.end();
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    painter_res->drawPixmap(0,0,contentPixmap);
hgs
parents:
diff changeset
   375
};
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
/*
hgs
parents:
diff changeset
   378
   Triggers the delayed hiding of the magnifier using an effect.
hgs
parents:
diff changeset
   379
*/
hgs
parents:
diff changeset
   380
void HbMagnifier::hideWithEffect()
hgs
parents:
diff changeset
   381
{
hgs
parents:
diff changeset
   382
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
    if (isVisible() && !d->isHidingInProgress) {
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
        d->isHidingInProgress = true;
hgs
parents:
diff changeset
   387
        HbEffect::start(this, "magnifier", "disappear", this,"_q_hidingEffectFinished");
hgs
parents:
diff changeset
   388
    }
hgs
parents:
diff changeset
   389
}
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
/*
hgs
parents:
diff changeset
   392
   Shows the magnifier using an effect.
hgs
parents:
diff changeset
   393
*/
hgs
parents:
diff changeset
   394
void HbMagnifier::showWithEffect()
hgs
parents:
diff changeset
   395
{
hgs
parents:
diff changeset
   396
    if (!isVisible()) {
hgs
parents:
diff changeset
   397
        show();
hgs
parents:
diff changeset
   398
        HbEffect::start(this, "magnifier", "active");
hgs
parents:
diff changeset
   399
    }
hgs
parents:
diff changeset
   400
}
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
/*
hgs
parents:
diff changeset
   405
    \reimp
hgs
parents:
diff changeset
   406
 */
hgs
parents:
diff changeset
   407
QVariant HbMagnifier::itemChange ( GraphicsItemChange change, const QVariant & value )
hgs
parents:
diff changeset
   408
{
hgs
parents:
diff changeset
   409
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
    if (change == QGraphicsItem::ItemPositionHasChanged && d->lockPosSet) {
hgs
parents:
diff changeset
   412
        d->updatePaintInfo();
hgs
parents:
diff changeset
   413
    }
hgs
parents:
diff changeset
   414
    return HbWidget::itemChange(change, value);
hgs
parents:
diff changeset
   415
}
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
/*
hgs
parents:
diff changeset
   419
    \reimp
hgs
parents:
diff changeset
   420
 */
hgs
parents:
diff changeset
   421
void HbMagnifier::resizeEvent( QGraphicsSceneResizeEvent * event )
hgs
parents:
diff changeset
   422
{
hgs
parents:
diff changeset
   423
    Q_D(HbMagnifier);
hgs
parents:
diff changeset
   424
hgs
parents:
diff changeset
   425
    HbWidget::resizeEvent(event);
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
    d->background.setSize(boundingRect().size());
hgs
parents:
diff changeset
   428
    d->updatePaintInfo();
hgs
parents:
diff changeset
   429
}
hgs
parents:
diff changeset
   430
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
#include "moc_hbmagnifier_p.cpp"
hgs
parents:
diff changeset
   433