Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/examples/graphicsview/padnavigator/roundrectitem.cpp

    r651 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 201 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation ([email protected])
     
    77** This file is part of the examples of the Qt Toolkit.
    88**
    9 ** $QT_BEGIN_LICENSE:LGPL$
    10 ** Commercial Usage
    11 ** Licensees holding valid Qt Commercial licenses may use this file in
    12 ** accordance with the Qt Commercial License Agreement provided with the
    13 ** Software or, alternatively, in accordance with the terms contained in
    14 ** a written agreement between you and Nokia.
     9** $QT_BEGIN_LICENSE:BSD$
     10** You may use this file under the terms of the BSD license as follows:
    1511**
    16 ** GNU Lesser General Public License Usage
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
    18 ** General Public License version 2.1 as published by the Free Software
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
    20 ** packaging of this file.  Please review the following information to
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
     12** "Redistribution and use in source and binary forms, with or without
     13** modification, are permitted provided that the following conditions are
     14** met:
     15**   * Redistributions of source code must retain the above copyright
     16**     notice, this list of conditions and the following disclaimer.
     17**   * Redistributions in binary form must reproduce the above copyright
     18**     notice, this list of conditions and the following disclaimer in
     19**     the documentation and/or other materials provided with the
     20**     distribution.
     21**   * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
     22**     the names of its contributors may be used to endorse or promote
     23**     products derived from this software without specific prior written
     24**     permission.
    2325**
    24 ** In addition, as a special exception, Nokia gives you certain additional
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    27 **
    28 ** GNU General Public License Usage
    29 ** Alternatively, this file may be used under the terms of the GNU
    30 ** General Public License version 3.0 as published by the Free Software
    31 ** Foundation and appearing in the file LICENSE.GPL included in the
    32 ** packaging of this file.  Please review the following information to
    33 ** ensure the GNU General Public License version 3.0 requirements will be
    34 ** met: http://www.gnu.org/copyleft/gpl.html.
    35 **
    36 ** If you have questions regarding the use of this file, please contact
    37 ** Nokia at [email protected].
     26** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     27** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     28** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     29** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     30** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     31** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     32** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     33** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     34** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     35** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     36** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
    3837** $QT_END_LICENSE$
    3938**
     
    4443#include <QtGui/QtGui>
    4544
    46 RoundRectItem::RoundRectItem(const QRectF &rect, const QBrush &brush, QWidget *embeddedWidget)
    47     : QGraphicsRectItem(rect),
    48       brush(brush),
    49       timeLine(75),
    50       lastVal(0),
    51       opa(1),
    52       proxyWidget(0)
     45//! [0]
     46RoundRectItem::RoundRectItem(const QRectF &bounds, const QColor &color,
     47                             QGraphicsItem *parent)
     48    : QGraphicsObject(parent), fillRect(false), bounds(bounds)
    5349{
    54     connect(&timeLine, SIGNAL(valueChanged(qreal)),
    55             this, SLOT(updateValue(qreal)));
    56    
    57     if (embeddedWidget) {
    58         proxyWidget = new QGraphicsProxyWidget(this);
    59         proxyWidget->setFocusPolicy(Qt::StrongFocus);
    60         proxyWidget->setWidget(embeddedWidget);
    61         proxyWidget->setGeometry(boundingRect().adjusted(25, 25, -25, -25));
    62     }
     50    gradient.setStart(bounds.topLeft());
     51    gradient.setFinalStop(bounds.bottomRight());
     52    gradient.setColorAt(0, color);
     53    gradient.setColorAt(1, color.dark(200));
     54    setCacheMode(ItemCoordinateCache);
    6355}
     56
    6457
    65 void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
     58//! [1]
     59QPixmap RoundRectItem::pixmap() const
    6660{
    67     QTransform x = painter->worldTransform();
    68 
    69     QLineF unit = x.map(QLineF(0, 0, 1, 1));
    70     if (unit.p1().x() > unit.p2().x() || unit.p1().y() > unit.p2().y()) {
    71         if (proxyWidget && proxyWidget->isVisible()) {
    72             proxyWidget->hide();
    73             proxyWidget->setGeometry(rect());
    74         }
    75         return;
    76     }
    77 
    78     if (proxyWidget && !proxyWidget->isVisible()) {
    79         proxyWidget->show();
    80         proxyWidget->setFocus();
    81     }
    82     if (proxyWidget && proxyWidget->pos() != QPoint())
    83         proxyWidget->setGeometry(boundingRect().adjusted(25, 25, -25, -25));
    84 
    85     painter->setOpacity(opacity());
    86     painter->setPen(Qt::NoPen);
    87     painter->setBrush(QColor(0, 0, 0, 64));
    88     painter->drawRoundRect(rect().translated(2, 2));
    89 
    90     if (!proxyWidget) {
    91         QLinearGradient gradient(rect().topLeft(), rect().bottomRight());
    92         const QColor col = brush.color();
    93         gradient.setColorAt(0, col);
    94         gradient.setColorAt(1, col.dark(int(200 + lastVal * 50)));
    95         painter->setBrush(gradient);
    96     } else {
    97         painter->setBrush(brush);
    98     }
    99 
    100     painter->setPen(QPen(Qt::black, 1));
    101     painter->drawRoundRect(rect());
    102     if (!pix.isNull()) {
    103         painter->scale(1.95, 1.95);
    104         painter->drawPixmap(-pix.width() / 2, -pix.height() / 2, pix);;
    105     }
     61    return pix;
    10662}
    107 
    108 QRectF RoundRectItem::boundingRect() const
    109 {
    110     qreal penW = 0.5;
    111     qreal shadowW = 2.0;
    112     return rect().adjusted(-penW, -penW, penW + shadowW, penW + shadowW);
    113 }
    114 
    11563void RoundRectItem::setPixmap(const QPixmap &pixmap)
    11664{
    11765    pix = pixmap;
    118     if (scene() && isVisible())
    119         update();
    120 }
    121 
    122 qreal RoundRectItem::opacity() const
    123 {
    124     RoundRectItem *parent = parentItem() ? (RoundRectItem *)parentItem() : 0;
    125     return opa + (parent ? parent->opacity() : 0);
    126 }
    127 
    128 void RoundRectItem::setOpacity(qreal opacity)
    129 {
    130     opa = opacity;
    13166    update();
    13267}
     68
    13369
    134 void RoundRectItem::keyPressEvent(QKeyEvent *event)
     70//! [2]
     71QRectF RoundRectItem::boundingRect() const
    13572{
    136     if (event->isAutoRepeat() || event->key() != Qt::Key_Return
    137         || (timeLine.state() == QTimeLine::Running && timeLine.direction() == QTimeLine::Forward)) {
    138         QGraphicsRectItem::keyPressEvent(event);
    139         return;
     73    return bounds.adjusted(0, 0, 2, 2);
     74}
     75//! [2]
     76
     77//! [3]
     78void RoundRectItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
     79                          QWidget *widget)
     80{
     81    Q_UNUSED(option);
     82    Q_UNUSED(widget);
     83    painter->setPen(Qt::NoPen);
     84    painter->setBrush(QColor(0, 0, 0, 64));
     85    painter->drawRoundRect(bounds.translated(2, 2));
     86//! [3]
     87//! [4]
     88    if (fillRect)
     89        painter->setBrush(QApplication::palette().brush(QPalette::Window));
     90    else
     91        painter->setBrush(gradient);
     92    painter->setPen(QPen(Qt::black, 1));
     93    painter->drawRoundRect(bounds);
     94//! [4]
     95//! [5]
     96    if (!pix.isNull()) {
     97        painter->scale(1.95, 1.95);
     98        painter->drawPixmap(-pix.width() / 2, -pix.height() / 2, pix);
    14099    }
     100
     101
    141102
    142     timeLine.stop();
    143     timeLine.setDirection(QTimeLine::Forward);
    144     timeLine.start();
    145     emit activated();
     103//! [6]
     104bool RoundRectItem::fill() const
     105{
     106    ;
    146107}
    147 
    148 void RoundRectItem::keyReleaseEvent(QKeyEvent *event)
     108void RoundRectItem::setFill(bool fill)
    149109{
    150     if (event->key() != Qt::Key_Return) {
    151         QGraphicsRectItem::keyReleaseEvent(event);
    152         return;
    153     }
    154     timeLine.stop();
    155     timeLine.setDirection(QTimeLine::Backward);
    156     timeLine.start();
     110    fillRect = fill;
     111    update();
    157112}
    158 
    159 void RoundRectItem::updateValue(qreal value)
    160 {
    161     lastVal = value;
    162     if (!proxyWidget)
    163         setTransform(QTransform().scale(1 - value / 10.0, 1 - value / 10.0));
    164 }
     113//! [6]
Note: See TracChangeset for help on using the changeset viewer.