summaryrefslogtreecommitdiffstats
path: root/src/declarative/graphicsitems/qmlgraphicsitem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/declarative/graphicsitems/qmlgraphicsitem.cpp')
-rw-r--r--src/declarative/graphicsitems/qmlgraphicsitem.cpp2838
1 files changed, 0 insertions, 2838 deletions
diff --git a/src/declarative/graphicsitems/qmlgraphicsitem.cpp b/src/declarative/graphicsitems/qmlgraphicsitem.cpp
deleted file mode 100644
index fce4e36..0000000
--- a/src/declarative/graphicsitems/qmlgraphicsitem.cpp
+++ /dev/null
@@ -1,2838 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmlgraphicsitem_p.h"
-#include "qmlgraphicsitem.h"
-
-#include "qmlgraphicsevents_p_p.h"
-
-#include <qfxperf_p_p.h>
-#include <qmlengine.h>
-#include <qmlopenmetaobject_p.h>
-#include <qmlstate_p.h>
-#include <qmlview.h>
-#include <qmlstategroup_p.h>
-#include <qmlcomponent.h>
-
-#include <QDebug>
-#include <QPen>
-#include <QFile>
-#include <QEvent>
-#include <QGraphicsSceneMouseEvent>
-#include <QtCore/qnumeric.h>
-#include <QtScript/qscriptengine.h>
-#include <QtGui/qgraphicstransform.h>
-#include <QtGui/qgraphicseffect.h>
-#include <qlistmodelinterface_p.h>
-
-QT_BEGIN_NAMESPACE
-
-#ifndef FLT_MAX
-#define FLT_MAX 1E+37
-#endif
-
-#include "qmlgraphicseffects.cpp"
-
-/*!
- \qmlclass Transform QGraphicsTransform
- \since 4.7
- \brief The Transform elements provide a way of building advanced transformations on Items.
-
- The Transform elements let you create and control advanced transformations that can be configured
- independently using specialized properties.
-
- You can assign any number of Transform elements to an Item. Each Transform is applied in order,
- one at a time, to the Item it's assigned to.
-
- \sa Rotation, Scale
-*/
-
-/*!
- \qmlclass Scale QGraphicsScale
- \since 4.7
- \brief The Scale object provides a way to scale an Item.
-
- The Scale object gives more control over scaling than using Item's scale property. Specifically,
- it allows a different scale for the x and y axes, and allows the scale to be relative to an
- arbitrary point.
-
- The following example scales the X axis of the Rectangle, relative to its interior point 25, 25:
- \qml
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Scale { origin.x: 25; origin.y: 25; xScale: 3}
- }
- \endqml
-*/
-
-/*!
- \qmlproperty real Scale::origin.x
- \qmlproperty real Scale::origin.y
-
- The point that the item is scaled from (i.e., the point that stays fixed relative to the parent as
- the rest of the item grows). By default the origin is 0, 0.
-*/
-
-/*!
- \qmlproperty real Scale::xScale
-
- The scaling factor for the X axis.
-*/
-
-/*!
- \qmlproperty real Scale::yScale
-
- The scaling factor for the Y axis.
-*/
-
-/*!
- \qmlclass Rotation QGraphicsRotation
- \since 4.7
- \brief The Rotation object provides a way to rotate an Item.
-
- The Rotation object gives more control over rotation than using Item's rotation property.
- Specifically, it allows (z axis) rotation to be relative to an arbitrary point.
-
- The following example rotates a Rectangle around its interior point 25, 25:
- \qml
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Rotation { origin.x: 25; origin.y: 25; angle: 45}
- }
- \endqml
-
- Rotation also provides a way to specify 3D-like rotations for Items. For these types of
- rotations you must specify the axis to rotate around in addition to the origin point.
-
- The following example shows various 3D-like rotations applied to an \l Image.
- \snippet doc/src/snippets/declarative/rotation.qml 0
-
- \image axisrotation.png
-*/
-
-/*!
- \qmlproperty real Rotation::origin.x
- \qmlproperty real Rotation::origin.y
-
- The origin point of the rotation (i.e., the point that stays fixed relative to the parent as
- the rest of the item rotates). By default the origin is 0, 0.
-*/
-
-/*!
- \qmlproperty real Rotation::axis.x
- \qmlproperty real Rotation::axis.y
- \qmlproperty real Rotation::axis.z
-
- The axis to rotate around. For simple (2D) rotation around a point, you do not need to specify an axis,
- as the default axis is the z axis (\c{ axis { x: 0; y: 0; z: 1 } }).
-
- For a typical 3D-like rotation you will usually specify both the origin and the axis.
-
- \image 3d-rotation-axis.png
-*/
-
-/*!
- \qmlproperty real Rotation::angle
-
- The angle to rotate, in degrees clockwise.
-*/
-
-
-/*!
- \group group_animation
- \title Animation
-*/
-
-/*!
- \group group_coreitems
- \title Basic Items
-*/
-
-/*!
- \group group_effects
- \title Effects
-*/
-
-/*!
- \group group_layouts
- \title Layouts
-*/
-
-/*!
- \group group_states
- \title States and Transitions
-*/
-
-/*!
- \group group_utility
- \title Utility
-*/
-
-/*!
- \group group_views
- \title Views
-*/
-
-/*!
- \group group_widgets
- \title Widgets
-*/
-
-/*!
- \internal
- \class QmlGraphicsContents
- \ingroup group_utility
- \brief The QmlGraphicsContents class gives access to the height and width of an item's contents.
-
-*/
-
-QmlGraphicsContents::QmlGraphicsContents() : m_x(0), m_y(0), m_width(0), m_height(0)
-{
-}
-
-/*!
- \qmlproperty real Item::childrenRect.x
- \qmlproperty real Item::childrenRect.y
- \qmlproperty real Item::childrenRect.width
- \qmlproperty real Item::childrenRect.height
-
- The childrenRect properties allow an item access to the geometry of its
- children. This property is useful if you have an item that needs to be
- sized to fit its children.
-*/
-
-QRectF QmlGraphicsContents::rectF() const
-{
- return QRectF(m_x, m_y, m_width, m_height);
-}
-
-//TODO: optimization: only check sender(), if there is one
-void QmlGraphicsContents::calcHeight()
-{
- qreal oldy = m_y;
- qreal oldheight = m_height;
-
- qreal top = FLT_MAX;
- qreal bottom = 0;
-
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QmlGraphicsItem graphicsobjects?
- continue;
- qreal y = child->y();
- if (y + child->height() > bottom)
- bottom = y + child->height();
- if (y < top)
- top = y;
- }
- if (!children.isEmpty())
- m_y = top;
- m_height = qMax(bottom - top, qreal(0.0));
-
- if (m_height != oldheight || m_y != oldy)
- emit rectChanged();
-}
-
-//TODO: optimization: only check sender(), if there is one
-void QmlGraphicsContents::calcWidth()
-{
- qreal oldx = m_x;
- qreal oldwidth = m_width;
-
- qreal left = FLT_MAX;
- qreal right = 0;
-
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QmlGraphicsItem graphicsobjects?
- continue;
- qreal x = child->x();
- if (x + child->width() > right)
- right = x + child->width();
- if (x < left)
- left = x;
- }
- if (!children.isEmpty())
- m_x = left;
- m_width = qMax(right - left, qreal(0.0));
-
- if (m_width != oldwidth || m_x != oldx)
- emit rectChanged();
-}
-
-void QmlGraphicsContents::setItem(QmlGraphicsItem *item)
-{
- m_item = item;
-
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QmlGraphicsItem *child = qobject_cast<QmlGraphicsItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QmlGraphicsItem graphicsobjects?
- continue;
- connect(child, SIGNAL(heightChanged()), this, SLOT(calcHeight()));
- connect(child, SIGNAL(yChanged()), this, SLOT(calcHeight()));
- connect(child, SIGNAL(widthChanged()), this, SLOT(calcWidth()));
- connect(child, SIGNAL(xChanged()), this, SLOT(calcWidth()));
- connect(this, SIGNAL(rectChanged()), m_item, SIGNAL(childrenRectChanged()));
- }
-
- calcHeight();
- calcWidth();
-}
-
-QmlGraphicsItemKeyFilter::QmlGraphicsItemKeyFilter(QmlGraphicsItem *item)
-: m_next(0)
-{
- QmlGraphicsItemPrivate *p =
- item?static_cast<QmlGraphicsItemPrivate *>(QGraphicsItemPrivate::get(item)):0;
- if (p) {
- m_next = p->keyHandler;
- p->keyHandler = this;
- }
-}
-
-QmlGraphicsItemKeyFilter::~QmlGraphicsItemKeyFilter()
-{
-}
-
-void QmlGraphicsItemKeyFilter::keyPressed(QKeyEvent *event)
-{
- if (m_next) m_next->keyPressed(event);
-}
-
-void QmlGraphicsItemKeyFilter::keyReleased(QKeyEvent *event)
-{
- if (m_next) m_next->keyReleased(event);
-}
-
-void QmlGraphicsItemKeyFilter::inputMethodEvent(QInputMethodEvent *event)
-{
- if (m_next) m_next->inputMethodEvent(event);
-}
-
-QVariant QmlGraphicsItemKeyFilter::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- if (m_next) return m_next->inputMethodQuery(query);
- return QVariant();
-}
-
-void QmlGraphicsItemKeyFilter::componentComplete()
-{
- if (m_next) m_next->componentComplete();
-}
-
-
-/*!
- \qmlclass KeyNavigation
- \since 4.7
- \brief The KeyNavigation attached property supports key navigation by arrow keys.
-
- It is common in key-based UIs to use arrow keys to navigate
- between focussed items. The KeyNavigation property provides a
- convenient way of specifying which item will gain focus
- when an arrow key is pressed. The following example provides
- key navigation for a 2x2 grid of items.
-
- \code
- Grid {
- columns: 2
- width: 100; height: 100
- Rectangle {
- id: item1
- focus: true
- width: 50; height: 50
- color: focus ? "red" : "lightgray"
- KeyNavigation.right: item2
- KeyNavigation.down: item3
- }
- Rectangle {
- id: item2
- width: 50; height: 50
- color: focus ? "red" : "lightgray"
- KeyNavigation.left: item1
- KeyNavigation.down: item4
- }
- Rectangle {
- id: item3
- width: 50; height: 50
- color: focus ? "red" : "lightgray"
- KeyNavigation.right: item4
- KeyNavigation.up: item1
- }
- Rectangle {
- id: item4
- width: 50; height: 50
- color: focus ? "red" : "lightgray"
- KeyNavigation.left: item3
- KeyNavigation.up: item2
- }
- }
- \endcode
-
- KeyNavigation receives key events after the item it is attached to.
- If the item accepts an arrow key event, the KeyNavigation
- attached property will not receive an event for that key.
-
- If an item has been set for a direction and the KeyNavigation
- attached property receives the corresponding
- key press and release events, the events will be accepted by
- KeyNaviagtion and will not propagate any further.
-
- \sa {Keys}{Keys attached property}
-*/
-
-/*!
- \qmlproperty Item KeyNavigation::left
- \qmlproperty Item KeyNavigation::right
- \qmlproperty Item KeyNavigation::up
- \qmlproperty Item KeyNavigation::down
-
- These properties hold the item to assign focus to
- when Key_Left, Key_Right, Key_Up or Key_Down are
- pressed.
-*/
-
-QmlGraphicsKeyNavigationAttached::QmlGraphicsKeyNavigationAttached(QObject *parent)
-: QObject(*(new QmlGraphicsKeyNavigationAttachedPrivate), parent),
- QmlGraphicsItemKeyFilter(qobject_cast<QmlGraphicsItem*>(parent))
-{
-}
-
-QmlGraphicsKeyNavigationAttached *
-QmlGraphicsKeyNavigationAttached::qmlAttachedProperties(QObject *obj)
-{
- return new QmlGraphicsKeyNavigationAttached(obj);
-}
-
-QmlGraphicsItem *QmlGraphicsKeyNavigationAttached::left() const
-{
- Q_D(const QmlGraphicsKeyNavigationAttached);
- return d->left;
-}
-
-void QmlGraphicsKeyNavigationAttached::setLeft(QmlGraphicsItem *i)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
- d->left = i;
- emit changed();
-}
-
-QmlGraphicsItem *QmlGraphicsKeyNavigationAttached::right() const
-{
- Q_D(const QmlGraphicsKeyNavigationAttached);
- return d->right;
-}
-
-void QmlGraphicsKeyNavigationAttached::setRight(QmlGraphicsItem *i)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
- d->right = i;
- emit changed();
-}
-
-QmlGraphicsItem *QmlGraphicsKeyNavigationAttached::up() const
-{
- Q_D(const QmlGraphicsKeyNavigationAttached);
- return d->up;
-}
-
-void QmlGraphicsKeyNavigationAttached::setUp(QmlGraphicsItem *i)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
- d->up = i;
- emit changed();
-}
-
-QmlGraphicsItem *QmlGraphicsKeyNavigationAttached::down() const
-{
- Q_D(const QmlGraphicsKeyNavigationAttached);
- return d->down;
-}
-
-void QmlGraphicsKeyNavigationAttached::setDown(QmlGraphicsItem *i)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
- d->down = i;
- emit changed();
-}
-
-void QmlGraphicsKeyNavigationAttached::keyPressed(QKeyEvent *event)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
-
- event->ignore();
-
- switch(event->key()) {
- case Qt::Key_Left:
- if (d->left) {
- d->left->setFocus(true);
- event->accept();
- }
- break;
- case Qt::Key_Right:
- if (d->right) {
- d->right->setFocus(true);
- event->accept();
- }
- break;
- case Qt::Key_Up:
- if (d->up) {
- d->up->setFocus(true);
- event->accept();
- }
- break;
- case Qt::Key_Down:
- if (d->down) {
- d->down->setFocus(true);
- event->accept();
- }
- break;
- default:
- break;
- }
-
- if (!event->isAccepted()) QmlGraphicsItemKeyFilter::keyPressed(event);
-}
-
-void QmlGraphicsKeyNavigationAttached::keyReleased(QKeyEvent *event)
-{
- Q_D(QmlGraphicsKeyNavigationAttached);
-
- event->ignore();
-
- switch(event->key()) {
- case Qt::Key_Left:
- if (d->left) {
- event->accept();
- }
- break;
- case Qt::Key_Right:
- if (d->right) {
- event->accept();
- }
- break;
- case Qt::Key_Up:
- if (d->up) {
- event->accept();
- }
- break;
- case Qt::Key_Down:
- if (d->down) {
- event->accept();
- }
- break;
- default:
- break;
- }
-
- if (!event->isAccepted()) QmlGraphicsItemKeyFilter::keyReleased(event);
-}
-
-/*!
- \qmlclass Keys
- \since 4.7
- \brief The Keys attached property provides key handling to Items.
-
- All visual primitives support key handling via the \e Keys
- attached property. Keys can be handled via the \e onPressed
- and \e onReleased signal properties.
-
- The signal properties have a \l KeyEvent parameter, named
- \e event which contains details of the event. If a key is
- handled \e event.accepted should be set to true to prevent the
- event from propagating up the item heirarchy.
-
- \code
- Item {
- focus: true
- Keys.onPressed: {
- if (event.key == Qt.Key_Left) {
- console.log("move left");
- event.accepted = true;
- }
- }
- }
- \endcode
-
- Some keys may alternatively be handled via specific signal properties,
- for example \e onSelectPressed. These handlers automatically set
- \e event.accepted to true.
-
- \code
- Item {
- focus: true
- Keys.onLeftPressed: console.log("move left")
- }
- \endcode
-
- See \l {Qt::Key}{Qt.Key} for the list of keyboard codes.
-
- \sa KeyEvent, {KeyNavigation}{KeyNavigation attached property}
-*/
-
-/*!
- \qmlproperty bool Keys::enabled
-
- This flags enables key handling if true (default); otherwise
- no key handlers will be called.
-*/
-
-/*!
- \qmlproperty List<Object> Keys::forwardTo
-
- This property provides a way to forward key presses, key releases, and keyboard input
- coming from input methods to other items. This can be useful when you want
- one item to handle some keys (e.g. the up and down arrow keys), and another item to
- handle other keys (e.g. the left and right arrow keys). Once an item that has been
- forwarded keys accepts the event it is no longer forwarded to items later in the
- list.
-
- This example forwards key events to two lists:
- \qml
- ListView { id: list1 ... }
- ListView { id: list2 ... }
- Keys.forwardTo: [list1, list2]
- focus: true
- \endqml
-*/
-
-/*!
- \qmlsignal Keys::onPressed(event)
-
- This handler is called when a key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onReleased(event)
-
- This handler is called when a key has been released. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit0Pressed(event)
-
- This handler is called when the digit '0' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit1Pressed(event)
-
- This handler is called when the digit '1' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit2Pressed(event)
-
- This handler is called when the digit '2' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit3Pressed(event)
-
- This handler is called when the digit '3' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit4Pressed(event)
-
- This handler is called when the digit '4' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit5Pressed(event)
-
- This handler is called when the digit '5' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit6Pressed(event)
-
- This handler is called when the digit '6' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit7Pressed(event)
-
- This handler is called when the digit '7' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit8Pressed(event)
-
- This handler is called when the digit '8' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDigit9Pressed(event)
-
- This handler is called when the digit '9' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onLeftPressed(event)
-
- This handler is called when the Left arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onRightPressed(event)
-
- This handler is called when the Right arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onUpPressed(event)
-
- This handler is called when the Up arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDownPressed(event)
-
- This handler is called when the Down arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onAsteriskPressed(event)
-
- This handler is called when the Asterisk '*' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onEscapePressed(event)
-
- This handler is called when the Escape key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onReturnPressed(event)
-
- This handler is called when the Return key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onEnterPressed(event)
-
- This handler is called when the Enter key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onDeletePressed(event)
-
- This handler is called when the Delete key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onSpacePressed(event)
-
- This handler is called when the Space key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onBackPressed(event)
-
- This handler is called when the Back key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onCancelPressed(event)
-
- This handler is called when the Cancel key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onSelectPressed(event)
-
- This handler is called when the Select key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onYesPressed(event)
-
- This handler is called when the Yes key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onNoPressed(event)
-
- This handler is called when the No key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onContext1Pressed(event)
-
- This handler is called when the Context1 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onContext2Pressed(event)
-
- This handler is called when the Context2 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onContext3Pressed(event)
-
- This handler is called when the Context3 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onContext4Pressed(event)
-
- This handler is called when the Context4 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onCallPressed(event)
-
- This handler is called when the Call key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onHangupPressed(event)
-
- This handler is called when the Hangup key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onFlipPressed(event)
-
- This handler is called when the Flip key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onMenuPressed(event)
-
- This handler is called when the Menu key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onVolumeUpPressed(event)
-
- This handler is called when the VolumeUp key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal Keys::onVolumeDownPressed(event)
-
- This handler is called when the VolumeDown key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-const QmlGraphicsKeysAttached::SigMap QmlGraphicsKeysAttached::sigMap[] = {
- { Qt::Key_Left, "leftPressed" },
- { Qt::Key_Right, "rightPressed" },
- { Qt::Key_Up, "upPressed" },
- { Qt::Key_Down, "downPressed" },
- { Qt::Key_Asterisk, "asteriskPressed" },
- { Qt::Key_NumberSign, "numberSignPressed" },
- { Qt::Key_Escape, "escapePressed" },
- { Qt::Key_Return, "returnPressed" },
- { Qt::Key_Enter, "enterPressed" },
- { Qt::Key_Delete, "deletePressed" },
- { Qt::Key_Space, "spacePressed" },
- { Qt::Key_Back, "backPressed" },
- { Qt::Key_Cancel, "cancelPressed" },
- { Qt::Key_Select, "selectPressed" },
- { Qt::Key_Yes, "yesPressed" },
- { Qt::Key_No, "noPressed" },
- { Qt::Key_Context1, "context1Pressed" },
- { Qt::Key_Context2, "context2Pressed" },
- { Qt::Key_Context3, "context3Pressed" },
- { Qt::Key_Context4, "context4Pressed" },
- { Qt::Key_Call, "callPressed" },
- { Qt::Key_Hangup, "hangupPressed" },
- { Qt::Key_Flip, "flipPressed" },
- { Qt::Key_Menu, "menuPressed" },
- { Qt::Key_VolumeUp, "volumeUpPressed" },
- { Qt::Key_VolumeDown, "volumeDownPressed" },
- { 0, 0 }
-};
-
-bool QmlGraphicsKeysAttachedPrivate::isConnected(const char *signalName)
-{
- return isSignalConnected(signalIndex(signalName));
-}
-
-QmlGraphicsKeysAttached::QmlGraphicsKeysAttached(QObject *parent)
-: QObject(*(new QmlGraphicsKeysAttachedPrivate), parent),
- QmlGraphicsItemKeyFilter(qobject_cast<QmlGraphicsItem*>(parent))
-{
- Q_D(QmlGraphicsKeysAttached);
- d->item = qobject_cast<QmlGraphicsItem*>(parent);
-}
-
-QmlGraphicsKeysAttached::~QmlGraphicsKeysAttached()
-{
-}
-
-void QmlGraphicsKeysAttached::componentComplete()
-{
- Q_D(QmlGraphicsKeysAttached);
- if (d->item) {
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *targetItem = d->finalFocusProxy(d->targets.at(ii));
- if (targetItem && (targetItem->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
- d->item->setFlag(QGraphicsItem::ItemAcceptsInputMethod);
- break;
- }
- }
- }
-}
-
-void QmlGraphicsKeysAttached::keyPressed(QKeyEvent *event)
-{
- Q_D(QmlGraphicsKeysAttached);
- if (!d->enabled || d->inPress) {
- event->ignore();
- return;
- }
-
- // first process forwards
- if (d->item && d->item->scene()) {
- d->inPress = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->inPress = false;
- return;
- }
- }
- }
- d->inPress = false;
- }
-
- QmlGraphicsKeyEvent ke(*event);
- QByteArray keySignal = keyToSignal(event->key());
- if (!keySignal.isEmpty()) {
- keySignal += "(QmlGraphicsKeyEvent*)";
- if (d->isConnected(keySignal)) {
- // If we specifically handle a key then default to accepted
- ke.setAccepted(true);
- int idx = QmlGraphicsKeysAttached::staticMetaObject.indexOfSignal(keySignal);
- metaObject()->method(idx).invoke(this, Qt::DirectConnection, Q_ARG(QmlGraphicsKeyEvent*, &ke));
- }
- }
- if (!ke.isAccepted())
- emit pressed(&ke);
- event->setAccepted(ke.isAccepted());
-
- if (!event->isAccepted()) QmlGraphicsItemKeyFilter::keyPressed(event);
-}
-
-void QmlGraphicsKeysAttached::keyReleased(QKeyEvent *event)
-{
- Q_D(QmlGraphicsKeysAttached);
- if (!d->enabled || d->inRelease) {
- event->ignore();
- return;
- }
-
- if (d->item && d->item->scene()) {
- d->inRelease = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->inRelease = false;
- return;
- }
- }
- }
- d->inRelease = false;
- }
-
- QmlGraphicsKeyEvent ke(*event);
- emit released(&ke);
- event->setAccepted(ke.isAccepted());
-
- if (!event->isAccepted()) QmlGraphicsItemKeyFilter::keyReleased(event);
-}
-
-void QmlGraphicsKeysAttached::inputMethodEvent(QInputMethodEvent *event)
-{
- Q_D(QmlGraphicsKeysAttached);
- if (d->item && !d->inIM && d->item->scene()) {
- d->inIM = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->imeItem = i;
- d->inIM = false;
- return;
- }
- }
- }
- d->inIM = false;
- }
- if (!event->isAccepted()) QmlGraphicsItemKeyFilter::inputMethodEvent(event);
-}
-
-class QmlGraphicsItemAccessor : public QGraphicsItem
-{
-public:
- QVariant doInputMethodQuery(Qt::InputMethodQuery query) const {
- return QGraphicsItem::inputMethodQuery(query);
- }
-};
-
-QVariant QmlGraphicsKeysAttached::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- Q_D(const QmlGraphicsKeysAttached);
- if (d->item) {
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
- QVariant v = static_cast<QmlGraphicsItemAccessor *>(i)->doInputMethodQuery(query);
- if (v.userType() == QVariant::RectF)
- v = d->item->mapRectFromItem(i, v.toRectF()); //### cost?
- return v;
- }
- }
- }
- return QmlGraphicsItemKeyFilter::inputMethodQuery(query);
-}
-
-QmlGraphicsKeysAttached *QmlGraphicsKeysAttached::qmlAttachedProperties(QObject *obj)
-{
- return new QmlGraphicsKeysAttached(obj);
-}
-
-/*!
- \class QmlGraphicsItem
- \since 4.7
- \brief The QmlGraphicsItem class provides the most basic of all visual items in QML.
-
- All visual items in Qt Declarative inherit from QmlGraphicsItem. Although QmlGraphicsItem
- has no visual appearance, it defines all the properties that are
- common across visual items - such as the x and y position, the
- width and height, \l {anchor-layout}{anchoring} and key handling.
-
- You can subclass QmlGraphicsItem to provide your own custom visual item that inherits
- these features.
-*/
-
-/*!
- \qmlclass Item QmlGraphicsItem
- \since 4.7
- \brief The Item is the most basic of all visual items in QML.
-
- All visual items in Qt Declarative inherit from Item. Although Item
- has no visual appearance, it defines all the properties that are
- common across visual items - such as the x and y position, the
- width and height, \l {anchor-layout}{anchoring} and key handling.
-
- Item is also useful for grouping items together.
-
- \qml
- Item {
- Image {
- source: "tile.png"
- }
- Image {
- x: 80
- width: 100
- height: 100
- source: "tile.png"
- }
- Image {
- x: 190
- width: 100
- height: 100
- fillMode: Image.Tile
- source: "tile.png"
- }
- }
- \endqml
-
- \section1 Identity
-
- Each item has an "id" - the identifier of the Item.
-
- The identifier can be used in bindings and other expressions to
- refer to the item. For example:
-
- \qml
- Text { id: myText; ... }
- Text { text: myText.text }
- \endqml
-
- The identifier is available throughout to the \l {components}{component}
- where it is declared. The identifier must be unique in the component.
-
- The id should not be thought of as a "property" - it makes no sense
- to write \c myText.id, for example.
-
- \section1 Key Handling
-
- Key handling is available to all Item-based visual elements via the \l {Keys}{Keys}
- attached property. The \e Keys attached property provides basic handlers such
- as \l {Keys::onPressed}{onPressed} and \l {Keys::onReleased}{onReleased},
- as well as handlers for specific keys, such as
- \l {Keys::onCancelPressed}{onCancelPressed}. The example below
- assigns \l {qmlfocus}{focus} to the item and handles
- the Left key via the general \e onPressed handler and the Select key via the
- onSelectPressed handler:
-
- \qml
- Item {
- focus: true
- Keys.onPressed: {
- if (event.key == Qt.Key_Left) {
- console.log("move left");
- event.accepted = true;
- }
- }
- Keys.onSelectPressed: console.log("Selected");
- }
- \endqml
-
- See the \l {Keys}{Keys} attached property for detailed documentation.
-
- \ingroup group_coreitems
-*/
-
-/*!
- \property QmlGraphicsItem::baseline
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::effect
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::focus
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::wantsFocus
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::transformOrigin
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::childrenRectChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::baselineOffsetChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::widthChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::heightChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::stateChanged(const QString &state)
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::parentChanged()
- \internal
-*/
-
-/*! \fn void QmlGraphicsItem::transformOriginChanged(TransformOrigin)
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::childrenChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::focusChanged()
- \internal
-*/
-
-/*!
- \fn void QmlGraphicsItem::wantsFocusChanged()
- \internal
-*/
-
-// ### Must fix
-struct RegisterAnchorLineAtStartup {
- RegisterAnchorLineAtStartup() {
- qRegisterMetaType<QmlGraphicsAnchorLine>("QmlGraphicsAnchorLine");
- }
-};
-static RegisterAnchorLineAtStartup registerAnchorLineAtStartup;
-
-
-/*!
- \fn QmlGraphicsItem::QmlGraphicsItem(QmlGraphicsItem *parent)
-
- Constructs a QmlGraphicsItem with the given \a parent.
-*/
-QmlGraphicsItem::QmlGraphicsItem(QmlGraphicsItem* parent)
- : QGraphicsObject(*(new QmlGraphicsItemPrivate), parent, 0)
-{
- Q_D(QmlGraphicsItem);
- d->init(parent);
-}
-
-/*! \internal
-*/
-QmlGraphicsItem::QmlGraphicsItem(QmlGraphicsItemPrivate &dd, QmlGraphicsItem *parent)
- : QGraphicsObject(dd, parent, 0)
-{
- Q_D(QmlGraphicsItem);
- d->init(parent);
-}
-
-/*!
- Destroys the QmlGraphicsItem.
-*/
-QmlGraphicsItem::~QmlGraphicsItem()
-{
- Q_D(QmlGraphicsItem);
- for (int ii = 0; ii < d->changeListeners.count(); ++ii) {
- QmlGraphicsAnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate();
- if (anchor)
- anchor->clearItem(this);
- }
- if (!d->parent || (parentItem() && !parentItem()->QGraphicsItem::d_ptr->inDestructor)) {
- for (int ii = 0; ii < d->changeListeners.count(); ++ii) {
- QmlGraphicsAnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate();
- if (anchor && anchor->item && anchor->item->parentItem() != this) //child will be deleted anyway
- anchor->updateOnComplete();
- }
- }
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QmlGraphicsItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QmlGraphicsItemPrivate::Destroyed)
- change.listener->itemDestroyed(this);
- }
- d->changeListeners.clear();
- delete d->_anchorLines; d->_anchorLines = 0;
- delete d->_anchors; d->_anchors = 0;
- delete d->_stateGroup; d->_stateGroup = 0;
-}
-
-/*!
- \qmlproperty enum Item::transformOrigin
- This property holds the origin point around which scale and rotation transform.
-
- Nine transform origins are available, as shown in the image below.
-
- \image declarative-transformorigin.png
-
- This example rotates an image around its bottom-right corner.
- \qml
- Image {
- source: "myimage.png"
- transformOrigin: Item.BottomRight
- rotate: 45
- }
- \endqml
-
- The default transform origin is \c Center.
-*/
-
-/*!
- \qmlproperty Item Item::parent
- This property holds the parent of the item.
-*/
-
-/*!
- \property QmlGraphicsItem::parent
- This property holds the parent of the item.
-*/
-void QmlGraphicsItem::setParentItem(QmlGraphicsItem *parent)
-{
- QmlGraphicsItem *oldParent = parentItem();
- if (parent == oldParent || !parent) return;
-
- QObject::setParent(parent);
- QGraphicsObject::setParentItem(parent);
-}
-
-/*!
- \fn void QmlGraphicsItem::setParent(QmlGraphicsItem *parent)
- \overload
- Sets both the parent object and parent item to \a parent. This
- function avoids the programming error of calling setParent()
- when you mean setParentItem().
-*/
-
-/*!
- Returns the QmlGraphicsItem parent of this item.
-*/
-QmlGraphicsItem *QmlGraphicsItem::parentItem() const
-{
- return qobject_cast<QmlGraphicsItem *>(QGraphicsObject::parentItem());
-}
-
-/*!
- \qmlproperty list<Item> Item::children
- \qmlproperty list<Object> Item::resources
-
- The children property contains the list of visual children of this item.
- The resources property contains non-visual resources that you want to
- reference by name.
-
- Generally you can rely on Item's default property to handle all this for
- you, but it can come in handy in some cases.
-
- \qml
- Item {
- children: [
- Text {},
- Rectangle {}
- ]
- resources: [
- Component {
- id: myComponent
- Text {}
- }
- ]
- }
- \endqml
-*/
-
-/*!
- \property QmlGraphicsItem::children
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::resources
- \internal
-*/
-
-/*!
- Returns true if construction of the QML component is complete; otherwise
- returns false.
-
- It is often desireable to delay some processing until the component is
- completed.
-
- \sa componentComplete()
-*/
-bool QmlGraphicsItem::isComponentComplete() const
-{
- Q_D(const QmlGraphicsItem);
- return d->_componentComplete;
-}
-
-/*!
- \property QmlGraphicsItem::anchors
- \internal
-*/
-
-/*! \internal */
-QmlGraphicsAnchors *QmlGraphicsItem::anchors()
-{
- Q_D(QmlGraphicsItem);
- return d->anchors();
-}
-
-void QmlGraphicsItemPrivate::data_append(QmlListProperty<QObject> *prop, QObject *o)
-{
- QmlGraphicsItem *i = qobject_cast<QmlGraphicsItem *>(o);
- if (i)
- i->setParentItem(static_cast<QmlGraphicsItem *>(prop->object));
- else
- o->setParent(static_cast<QmlGraphicsItem *>(prop->object));
-}
-
-QObject *QmlGraphicsItemPrivate::resources_at(QmlListProperty<QObject> *prop, int index)
-{
- QObjectList children = prop->object->children();
- if (index < children.count())
- return children.at(index);
- else
- return 0;
-}
-
-void QmlGraphicsItemPrivate::resources_append(QmlListProperty<QObject> *prop, QObject *o)
-{
- o->setParent(prop->object);
-}
-
-int QmlGraphicsItemPrivate::resources_count(QmlListProperty<QObject> *prop)
-{
- return prop->object->children().count();
-}
-
-QmlGraphicsItem *QmlGraphicsItemPrivate::children_at(QmlListProperty<QmlGraphicsItem> *prop, int index)
-{
- QList<QGraphicsItem *> children = static_cast<QmlGraphicsItem*>(prop->object)->childItems();
-
- if (index < children.count())
- return qobject_cast<QmlGraphicsItem *>(children.at(index));
- else
- return 0;
-}
-
-void QmlGraphicsItemPrivate::children_append(QmlListProperty<QmlGraphicsItem> *prop, QmlGraphicsItem *i)
-{
- if (i)
- i->setParentItem(static_cast<QmlGraphicsItem*>(prop->object));
-}
-
-int QmlGraphicsItemPrivate::children_count(QmlListProperty<QmlGraphicsItem> *prop)
-{
- return static_cast<QmlGraphicsItem*>(prop->object)->childItems().count();
-}
-
-int QmlGraphicsItemPrivate::transform_count(QmlListProperty<QGraphicsTransform> *list)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- return d->transformData ? d->transformData->graphicsTransforms.size() : 0;
- } else {
- return 0;
- }
-}
-
-void QmlGraphicsItemPrivate::transform_append(QmlListProperty<QGraphicsTransform> *list, QGraphicsTransform *item)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object)
- QGraphicsItemPrivate::get(object)->appendGraphicsTransform(item);
-}
-
-QGraphicsTransform *QmlGraphicsItemPrivate::transform_at(QmlListProperty<QGraphicsTransform> *list, int idx)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- if (!d->transformData)
- return 0;
- return d->transformData->graphicsTransforms.at(idx);
- } else {
- return 0;
- }
-}
-
-void QmlGraphicsItemPrivate::transform_clear(QmlListProperty<QGraphicsTransform> *list)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- if (!d->transformData)
- return;
- object->setTransformations(QList<QGraphicsTransform *>());
- }
-}
-
-/*!
- \qmlproperty list<Object> Item::data
- \default
-
- The data property is allows you to freely mix visual children and resources
- of an item. If you assign a visual item to the data list it becomes
- a child and if you assign any other object type, it is added as a resource.
-
- So you can write:
- \qml
- Item {
- Text {}
- Rectangle {}
- Script {}
- }
- \endqml
-
- instead of:
- \qml
- Item {
- children: [
- Text {},
- Rectangle {}
- ]
- resources: [
- Script {}
- ]
- }
- \endqml
-
- data is a behind-the-scenes property: you should never need to explicitly
- specify it.
- */
-
-/*!
- \property QmlGraphicsItem::data
- \internal
-*/
-
-/*! \internal */
-QmlListProperty<QObject> QmlGraphicsItem::data()
-{
- return QmlListProperty<QObject>(this, 0, QmlGraphicsItemPrivate::data_append);
-}
-
-/*!
- \property QmlGraphicsItem::childrenRect
- \brief The geometry of an item's children.
-
- childrenRect provides an easy way to access the (collective) position and size of the item's children.
-*/
-QRectF QmlGraphicsItem::childrenRect()
-{
- Q_D(QmlGraphicsItem);
- if (!d->_contents) {
- d->_contents = new QmlGraphicsContents;
- d->_contents->setParent(this);
- d->_contents->setItem(this);
- }
- return d->_contents->rectF();
-}
-
-bool QmlGraphicsItem::clip() const
-{
- return flags() & ItemClipsChildrenToShape;
-}
-
-void QmlGraphicsItem::setClip(bool c)
-{
- if (clip() == c)
- return;
- setFlag(ItemClipsChildrenToShape, c);
- emit clipChanged();
-}
-
-/*!
- \qmlproperty real Item::x
- \qmlproperty real Item::y
- \qmlproperty real Item::width
- \qmlproperty real Item::height
-
- Defines the item's position and size relative to its parent.
-
- \qml
- Item { x: 100; y: 100; width: 100; height: 100 }
- \endqml
- */
-
-/*!
- \property QmlGraphicsItem::width
-
- Defines the item's width relative to its parent.
- */
-
-/*!
- \property QmlGraphicsItem::height
-
- Defines the item's height relative to its parent.
- */
-
-/*!
- \qmlproperty real Item::z
-
- Sets the stacking order of the item. By default the stacking order is 0.
-
- Items with a higher stacking value are drawn on top of items with a
- lower stacking order. Items with the same stacking value are drawn
- bottom up in the order they appear. Items with a negative stacking
- value are drawn under their parent's content.
-
- The following example shows the various effects of stacking order.
-
- \table
- \row
- \o \image declarative-item_stacking1.png
- \o Same \c z - later children above earlier children:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- }
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking2.png
- \o Higher \c z on top:
- \qml
- Item {
- Rectangle {
- z: 1
- color: "red"
- width: 100; height: 100
- }
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking3.png
- \o Same \c z - children above parents:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking4.png
- \o Lower \c z below:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- z: -1
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \endtable
- */
-
-/*!
- \qmlproperty bool Item::visible
-
- Whether the item is visible. By default this is true.
-
- \note visible is not linked to actual visibility; if an item
- moves off screen, or the opacity changes to 0, this will
- not affect the visible property.
-*/
-
-
-/*!
- This function is called to handle this item's changes in
- geometry from \a oldGeometry to \a newGeometry. If the two
- geometries are the same, it doesn't do anything.
- */
-void QmlGraphicsItem::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- Q_D(QmlGraphicsItem);
-
- if (d->_anchors)
- d->_anchors->d_func()->updateMe();
-
- if (transformOrigin() != QmlGraphicsItem::TopLeft)
- setTransformOriginPoint(d->computeTransformOrigin());
-
- if (newGeometry.x() != oldGeometry.x())
- emit xChanged();
- if (newGeometry.width() != oldGeometry.width())
- emit widthChanged();
- if (newGeometry.y() != oldGeometry.y())
- emit yChanged();
- if (newGeometry.height() != oldGeometry.height())
- emit heightChanged();
-
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QmlGraphicsItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QmlGraphicsItemPrivate::Geometry)
- change.listener->itemGeometryChanged(this, newGeometry, oldGeometry);
- }
-}
-
-void QmlGraphicsItemPrivate::removeItemChangeListener(QmlGraphicsItemChangeListener *listener, ChangeTypes types)
-{
- ChangeListener change(listener, types);
- changeListeners.removeOne(change);
-}
-
-/*! \internal */
-void QmlGraphicsItem::keyPressEvent(QKeyEvent *event)
-{
- Q_D(QmlGraphicsItem);
- if (d->keyHandler)
- d->keyHandler->keyPressed(event);
- else
- event->ignore();
-}
-
-/*! \internal */
-void QmlGraphicsItem::keyReleaseEvent(QKeyEvent *event)
-{
- Q_D(QmlGraphicsItem);
- if (d->keyHandler)
- d->keyHandler->keyReleased(event);
- else
- event->ignore();
-}
-
-/*! \internal */
-void QmlGraphicsItem::inputMethodEvent(QInputMethodEvent *event)
-{
- Q_D(QmlGraphicsItem);
- if (d->keyHandler)
- d->keyHandler->inputMethodEvent(event);
- else
- event->ignore();
-}
-
-/*! \internal */
-QVariant QmlGraphicsItem::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- Q_D(const QmlGraphicsItem);
- QVariant v;
- if (d->keyHandler)
- v = d->keyHandler->inputMethodQuery(query);
-
- if (!v.isValid())
- v = QGraphicsObject::inputMethodQuery(query);
-
- return v;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::left() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->left;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::right() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->right;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::horizontalCenter() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->hCenter;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::top() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->top;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::bottom() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->bottom;
-}
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::verticalCenter() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->vCenter;
-}
-
-
-/*!
- \internal
-*/
-QmlGraphicsAnchorLine QmlGraphicsItem::baseline() const
-{
- Q_D(const QmlGraphicsItem);
- return d->anchorLines()->baseline;
-}
-
-/*!
- \property QmlGraphicsItem::top
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::bottom
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::left
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::right
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::horizontalCenter
- \internal
-*/
-
-/*!
- \property QmlGraphicsItem::verticalCenter
- \internal
-*/
-
-/*!
- \qmlproperty AnchorLine Item::top
- \qmlproperty AnchorLine Item::bottom
- \qmlproperty AnchorLine Item::left
- \qmlproperty AnchorLine Item::right
- \qmlproperty AnchorLine Item::horizontalCenter
- \qmlproperty AnchorLine Item::verticalCenter
- \qmlproperty AnchorLine Item::baseline
-
- The anchor lines of the item.
-
- For more information see \l {anchor-layout}{Anchor Layouts}.
-*/
-
-/*!
- \qmlproperty AnchorLine Item::anchors.top
- \qmlproperty AnchorLine Item::anchors.bottom
- \qmlproperty AnchorLine Item::anchors.left
- \qmlproperty AnchorLine Item::anchors.right
- \qmlproperty AnchorLine Item::anchors.horizontalCenter
- \qmlproperty AnchorLine Item::anchors.verticalCenter
- \qmlproperty AnchorLine Item::anchors.baseline
-
- \qmlproperty Item Item::anchors.fill
- \qmlproperty Item Item::anchors.centerIn
-
- \qmlproperty real Item::anchors.margins
- \qmlproperty real Item::anchors.topMargin
- \qmlproperty real Item::anchors.bottomMargin
- \qmlproperty real Item::anchors.leftMargin
- \qmlproperty real Item::anchors.rightMargin
- \qmlproperty real Item::anchors.horizontalCenterOffset
- \qmlproperty real Item::anchors.verticalCenterOffset
- \qmlproperty real Item::anchors.baselineOffset
-
- Anchors provide a way to position an item by specifying its
- relationship with other items.
-
- Margins apply to top, bottom, left, right, and fill anchors.
- The margins property can be used to set all of the various margins at once, to the same value.
-
- Offsets apply for horizontal center, vertical center, and baseline anchors.
-
- \table
- \row
- \o \image declarative-anchors_example.png
- \o Text anchored to Image, horizontally centered and vertically below, with a margin.
- \qml
- Image { id: pic; ... }
- Text {
- id: label
- anchors.horizontalCenter: pic.horizontalCenter
- anchors.top: pic.bottom
- anchors.topMargin: 5
- ...
- }
- \endqml
- \row
- \o \image declarative-anchors_example2.png
- \o
- Left of Text anchored to right of Image, with a margin. The y
- property of both defaults to 0.
-
- \qml
- Image { id: pic; ... }
- Text {
- id: label
- anchors.left: pic.right
- anchors.leftMargin: 5
- ...
- }
- \endqml
- \endtable
-
- anchors.fill provides a convenient way for one item to have the
- same geometry as another item, and is equivalent to connecting all
- four directional anchors.
-
- \note You can only anchor an item to siblings or a parent.
-
- For more information see \l {anchor-layout}{Anchor Layouts}.
-*/
-
-/*!
- \property QmlGraphicsItem::baselineOffset
- \brief The position of the item's baseline in local coordinates.
-
- The baseline of a Text item is the imaginary line on which the text
- sits. Controls containing text usually set their baseline to the
- baseline of their text.
-
- For non-text items, a default baseline offset of 0 is used.
-*/
-qreal QmlGraphicsItem::baselineOffset() const
-{
- Q_D(const QmlGraphicsItem);
- if (!d->_baselineOffset.isValid()) {
- return 0.0;
- } else
- return d->_baselineOffset;
-}
-
-void QmlGraphicsItem::setBaselineOffset(qreal offset)
-{
- Q_D(QmlGraphicsItem);
- if (offset == d->_baselineOffset)
- return;
-
- d->_baselineOffset = offset;
- emit baselineOffsetChanged();
-
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QmlGraphicsItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QmlGraphicsItemPrivate::Geometry) {
- QmlGraphicsAnchorsPrivate *anchor = change.listener->anchorPrivate();
- if (anchor)
- anchor->updateVerticalAnchors();
- }
- }
-}
-
-/*!
- \qmlproperty real Item::rotation
- This property holds the rotation of the item in degrees clockwise.
-
- This specifies how many degrees to rotate the item around its transformOrigin.
- The default rotation is 0 degrees (i.e. not rotated at all).
-
- \table
- \row
- \o \image declarative-rotation.png
- \o
- \qml
- Rectangle {
- color: "blue"
- width: 100; height: 100
- Rectangle {
- color: "red"
- x: 25; y: 25; width: 50; height: 50
- rotation: 30
- }
- }
- \endqml
- \endtable
-*/
-
-/*!
- \qmlproperty real Item::scale
- This property holds the scale of the item.
-
- A scale of less than 1 means the item will be displayed smaller than
- normal, and a scale of greater than 1 means the item will be
- displayed larger than normal. A negative scale means the item will
- be mirrored.
-
- By default, items are displayed at a scale of 1 (i.e. at their
- normal size).
-
- Scaling is from the item's transformOrigin.
-
- \table
- \row
- \o \image declarative-scale.png
- \o
- \qml
- Rectangle {
- color: "blue"
- width: 100; height: 100
- Rectangle {
- color: "green"
- width: 25; height: 25
- }
- Rectangle {
- color: "red"
- x: 25; y: 25; width: 50; height: 50
- scale: 1.4
- }
- }
- \endqml
- \endtable
-*/
-
-/*!
- \qmlproperty real Item::opacity
-
- The opacity of the item. Opacity is specified as a number between 0
- (fully transparent) and 1 (fully opaque). The default is 1.
-
- Opacity is an \e inherited attribute. That is, the opacity is
- also applied individually to child items. In almost all cases this
- is what you want. If you can spot the issue in the following
- example, you might need to use an \l Opacity effect instead.
-
- \table
- \row
- \o \image declarative-item_opacity1.png
- \o
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \row
- \o \image declarative-item_opacity2.png
- \o
- \qml
- Item {
- Rectangle {
- opacity: 0.5
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \endtable
-*/
-
-/*!
- Returns a value indicating whether mouse input should
- remain with this item exclusively.
-
- \sa setKeepMouseGrab()
- */
-bool QmlGraphicsItem::keepMouseGrab() const
-{
- Q_D(const QmlGraphicsItem);
- return d->_keepMouse;
-}
-
-/*!
- The flag indicating whether the mouse should remain
- with this item is set to \a keep.
-
- This is useful for items that wish to grab and keep mouse
- interaction following a predefined gesture. For example,
- an item that is interested in horizontal mouse movement
- may set keepMouseGrab to true once a threshold has been
- exceeded. Once keepMouseGrab has been set to true, filtering
- items will not react to mouse events.
-
- If the item does not indicate that it wishes to retain mouse grab,
- a filtering item may steal the grab. For example, Flickable may attempt
- to steal a mouse grab if it detects that the user has begun to
- move the viewport.
-
- \sa keepMouseGrab()
- */
-void QmlGraphicsItem::setKeepMouseGrab(bool keep)
-{
- Q_D(QmlGraphicsItem);
- d->_keepMouse = keep;
-}
-
-/*!
- \internal
-
- This function emits the \e focusChanged signal.
-
- Subclasses overriding this function should call up
- to their base class.
-*/
-void QmlGraphicsItem::focusChanged(bool flag)
-{
- Q_UNUSED(flag);
- emit focusChanged();
-}
-
-/*! \internal */
-QmlListProperty<QmlGraphicsItem> QmlGraphicsItem::fxChildren()
-{
- return QmlListProperty<QmlGraphicsItem>(this, 0, QmlGraphicsItemPrivate::children_append,
- QmlGraphicsItemPrivate::children_count,
- QmlGraphicsItemPrivate::children_at);
-}
-
-/*! \internal */
-QmlListProperty<QObject> QmlGraphicsItem::resources()
-{
- return QmlListProperty<QObject>(this, 0, QmlGraphicsItemPrivate::resources_append,
- QmlGraphicsItemPrivate::resources_count,
- QmlGraphicsItemPrivate::resources_at);
-}
-
-/*!
- \qmlproperty list<State> Item::states
- This property holds a list of states defined by the item.
-
- \qml
- Item {
- states: [
- State { ... },
- State { ... }
- ...
- ]
- }
- \endqml
-
- \sa {qmlstate}{States}
-*/
-
-/*!
- \property QmlGraphicsItem::states
- \internal
-*/
-/*! \internal */
-QmlListProperty<QmlState> QmlGraphicsItem::states()
-{
- Q_D(QmlGraphicsItem);
- return d->states()->statesProperty();
-}
-
-/*!
- \qmlproperty list<Transition> Item::transitions
- This property holds a list of transitions defined by the item.
-
- \qml
- Item {
- transitions: [
- Transition { ... },
- Transition { ... }
- ...
- ]
- }
- \endqml
-
- \sa {state-transitions}{Transitions}
-*/
-
-/*!
- \property QmlGraphicsItem::transitions
- \internal
-*/
-
-/*! \internal */
-QmlListProperty<QmlTransition> QmlGraphicsItem::transitions()
-{
- Q_D(QmlGraphicsItem);
- return d->states()->transitionsProperty();
-}
-
-/*
- \qmlproperty list<Filter> Item::filter
- This property holds a list of graphical filters to be applied to the item.
-
- \l {Filter}{Filters} include things like \l {Blur}{blurring}
- the item, or giving it a \l Reflection. Some
- filters may not be available on all canvases; if a filter is not
- available on a certain canvas, it will simply not be applied for
- that canvas (but the QML will still be considered valid).
-
- \qml
- Item {
- filter: [
- Blur { ... },
- Relection { ... }
- ...
- ]
- }
- \endqml
-*/
-
-/*!
- \qmlproperty bool Item::clip
- This property holds whether clipping is enabled.
-
- if clipping is enabled, an item will clip its own painting, as well
- as the painting of its children, to its bounding rectangle.
-
- Non-rectangular clipping regions are not supported for performance reasons.
-*/
-
-/*!
- \property QmlGraphicsItem::clip
- This property holds whether clipping is enabled.
-
- if clipping is enabled, an item will clip its own painting, as well
- as the painting of its children, to its bounding rectangle.
-
- Non-rectangular clipping regions are not supported for performance reasons.
-*/
-
-/*!
- \qmlproperty string Item::state
-
- This property holds the name of the current state of the item.
-
- This property is often used in scripts to change between states. For
- example:
-
- \qml
- Script {
- function toggle() {
- if (button.state == 'On')
- button.state = 'Off';
- else
- button.state = 'On';
- }
- }
- \endqml
-
- If the item is in its base state (i.e. no explicit state has been
- set), \c state will be a blank string. Likewise, you can return an
- item to its base state by setting its current state to \c ''.
-
- \sa {qmlstates}{States}
-*/
-
-/*!
- \property QmlGraphicsItem::state
- \internal
-*/
-
-/*! \internal */
-QString QmlGraphicsItem::state() const
-{
- Q_D(const QmlGraphicsItem);
- if (!d->_stateGroup)
- return QString();
- else
- return d->_stateGroup->state();
-}
-
-/*! \internal */
-void QmlGraphicsItem::setState(const QString &state)
-{
- Q_D(QmlGraphicsItem);
- d->states()->setState(state);
-}
-
-/*!
- \qmlproperty list<Transform> Item::transform
- This property holds the list of transformations to apply.
-
- For more information see \l Transform.
-*/
-
-/*!
- \property QmlGraphicsItem::transform
- \internal
-*/
-
-/*! \internal */
-QmlListProperty<QGraphicsTransform> QmlGraphicsItem::transform()
-{
- Q_D(QmlGraphicsItem);
- return QmlListProperty<QGraphicsTransform>(this, 0, d->transform_append, d->transform_count,
- d->transform_at, d->transform_clear);
-}
-
-/*!
- \internal
-
- classBegin() is called when the item is constructed, but its
- properties have not yet been set.
-
- \sa componentComplete(), isComponentComplete()
-*/
-void QmlGraphicsItem::classBegin()
-{
- Q_D(QmlGraphicsItem);
- d->_componentComplete = false;
- if (d->_stateGroup)
- d->_stateGroup->classBegin();
- if (d->_anchors)
- d->_anchors->classBegin();
-}
-
-/*!
- \internal
-
- componentComplete() is called when all items in the component
- have been constructed. It is often desireable to delay some
- processing until the component is complete an all bindings in the
- component have been resolved.
-*/
-void QmlGraphicsItem::componentComplete()
-{
-#ifdef Q_ENABLE_PERFORMANCE_LOG
- QmlPerfTimer<QmlPerf::ItemComponentComplete> cc;
-#endif
-
- Q_D(QmlGraphicsItem);
- d->_componentComplete = true;
- if (d->_stateGroup)
- d->_stateGroup->componentComplete();
- if (d->_anchors) {
- d->_anchors->componentComplete();
- d->_anchors->d_func()->updateOnComplete();
- }
- if (d->keyHandler)
- d->keyHandler->componentComplete();
-}
-
-QmlStateGroup *QmlGraphicsItemPrivate::states()
-{
- Q_Q(QmlGraphicsItem);
- if (!_stateGroup) {
- _stateGroup = new QmlStateGroup;
- if (!_componentComplete)
- _stateGroup->classBegin();
- QObject::connect(_stateGroup, SIGNAL(stateChanged(QString)),
- q, SIGNAL(stateChanged(QString)));
- }
-
- return _stateGroup;
-}
-
-QmlGraphicsItemPrivate::AnchorLines::AnchorLines(QmlGraphicsItem *q)
-{
- left.item = q;
- left.anchorLine = QmlGraphicsAnchorLine::Left;
- right.item = q;
- right.anchorLine = QmlGraphicsAnchorLine::Right;
- hCenter.item = q;
- hCenter.anchorLine = QmlGraphicsAnchorLine::HCenter;
- top.item = q;
- top.anchorLine = QmlGraphicsAnchorLine::Top;
- bottom.item = q;
- bottom.anchorLine = QmlGraphicsAnchorLine::Bottom;
- vCenter.item = q;
- vCenter.anchorLine = QmlGraphicsAnchorLine::VCenter;
- baseline.item = q;
- baseline.anchorLine = QmlGraphicsAnchorLine::Baseline;
-}
-
-QPointF QmlGraphicsItemPrivate::computeTransformOrigin() const
-{
- Q_Q(const QmlGraphicsItem);
-
- QRectF br = q->boundingRect();
-
- switch(origin) {
- default:
- case QmlGraphicsItem::TopLeft:
- return QPointF(0, 0);
- case QmlGraphicsItem::Top:
- return QPointF(br.width() / 2., 0);
- case QmlGraphicsItem::TopRight:
- return QPointF(br.width(), 0);
- case QmlGraphicsItem::Left:
- return QPointF(0, br.height() / 2.);
- case QmlGraphicsItem::Center:
- return QPointF(br.width() / 2., br.height() / 2.);
- case QmlGraphicsItem::Right:
- return QPointF(br.width(), br.height() / 2.);
- case QmlGraphicsItem::BottomLeft:
- return QPointF(0, br.height());
- case QmlGraphicsItem::Bottom:
- return QPointF(br.width() / 2., br.height());
- case QmlGraphicsItem::BottomRight:
- return QPointF(br.width(), br.height());
- }
-}
-
-/*! \internal */
-bool QmlGraphicsItem::sceneEvent(QEvent *event)
-{
- bool rv = QGraphicsItem::sceneEvent(event);
-
- if (event->type() == QEvent::FocusIn ||
- event->type() == QEvent::FocusOut) {
- focusChanged(hasFocus());
- }
-
- return rv;
-}
-
-/*! \internal */
-QVariant QmlGraphicsItem::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- Q_D(const QmlGraphicsItem);
- switch (change) {
- case ItemParentHasChanged:
- emit parentChanged();
- break;
- case ItemChildAddedChange:
- case ItemChildRemovedChange:
- emit childrenChanged();
- break;
- case ItemVisibleHasChanged: {
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QmlGraphicsItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QmlGraphicsItemPrivate::Visibility) {
- change.listener->itemVisibilityChanged(this);
- }
- }
- }
- break;
- case ItemOpacityHasChanged: {
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QmlGraphicsItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QmlGraphicsItemPrivate::Opacity) {
- change.listener->itemOpacityChanged(this);
- }
- }
- }
- break;
- default:
- break;
- }
-
- return QGraphicsItem::itemChange(change, value);
-}
-
-/*! \internal */
-QRectF QmlGraphicsItem::boundingRect() const
-{
- Q_D(const QmlGraphicsItem);
- return QRectF(0, 0, d->width, d->height);
-}
-
-/*!
- \enum QmlGraphicsItem::TransformOrigin
-
- Controls the point about which simple transforms like scale apply.
-
- \value TopLeft The top-left corner of the item.
- \value Top The center point of the top of the item.
- \value TopRight The top-right corner of the item.
- \value Left The left most point of the vertical middle.
- \value Center The center of the item.
- \value Right The right most point of the vertical middle.
- \value BottomLeft The bottom-left corner of the item.
- \value Bottom The center point of the bottom of the item.
- \value BottomRight The bottom-right corner of the item.
-*/
-
-/*!
- Returns the current transform origin.
-*/
-QmlGraphicsItem::TransformOrigin QmlGraphicsItem::transformOrigin() const
-{
- Q_D(const QmlGraphicsItem);
- return d->origin;
-}
-
-/*!
- Set the transform \a origin.
-*/
-void QmlGraphicsItem::setTransformOrigin(TransformOrigin origin)
-{
- Q_D(QmlGraphicsItem);
- if (origin != d->origin) {
- d->origin = origin;
- QGraphicsItem::setTransformOriginPoint(d->computeTransformOrigin());
- emit transformOriginChanged(d->origin);
- }
-}
-
-/*!
- \property QmlGraphicsItem::smooth
- \brief whether the item is smoothly transformed.
-
- This property is provided purely for the purpose of optimization. Turning
- smooth transforms off is faster, but looks worse; turning smooth
- transformations on is slower, but looks better.
-
- By default smooth transformations are off.
-*/
-
-/*!
- Returns true if the item should be drawn with antialiasing and
- smooth pixmap filtering, false otherwise.
-
- The default is false.
-
- \sa setSmooth()
-*/
-bool QmlGraphicsItem::smooth() const
-{
- Q_D(const QmlGraphicsItem);
- return d->smooth;
-}
-
-/*!
- Sets whether the item should be drawn with antialiasing and
- smooth pixmap filtering to \a smooth.
-
- \sa smooth()
-*/
-void QmlGraphicsItem::setSmooth(bool smooth)
-{
- Q_D(QmlGraphicsItem);
- if (d->smooth == smooth)
- return;
- d->smooth = smooth;
- emit smoothChanged();
- update();
-}
-
-qreal QmlGraphicsItem::width() const
-{
- Q_D(const QmlGraphicsItem);
- return d->width;
-}
-
-void QmlGraphicsItem::setWidth(qreal w)
-{
- Q_D(QmlGraphicsItem);
- if (qIsNaN(w))
- return;
-
- d->widthValid = true;
- if (d->width == w)
- return;
-
- qreal oldWidth = d->width;
-
- prepareGeometryChange();
- d->width = w;
- update();
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), oldWidth, height()));
-}
-
-void QmlGraphicsItem::resetWidth()
-{
- Q_D(QmlGraphicsItem);
- d->widthValid = false;
- setImplicitWidth(implicitWidth());
-}
-
-/*!
- Returns the width of the item that is implied by other properties that determine the content.
-*/
-qreal QmlGraphicsItem::implicitWidth() const
-{
- Q_D(const QmlGraphicsItem);
- return d->implicitWidth;
-}
-
-/*!
- Sets the implied width of the item to \a w.
- This is the width implied by other properties that determine the content.
-*/
-void QmlGraphicsItem::setImplicitWidth(qreal w)
-{
- Q_D(QmlGraphicsItem);
- d->implicitWidth = w;
- if (d->width == w || widthValid())
- return;
-
- qreal oldWidth = d->width;
-
- prepareGeometryChange();
- d->width = w;
- update();
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), oldWidth, height()));
-}
-
-/*!
- Returns whether the width property has been set explicitly.
-*/
-bool QmlGraphicsItem::widthValid() const
-{
- Q_D(const QmlGraphicsItem);
- return d->widthValid;
-}
-
-qreal QmlGraphicsItem::height() const
-{
- Q_D(const QmlGraphicsItem);
- return d->height;
-}
-
-void QmlGraphicsItem::setHeight(qreal h)
-{
- Q_D(QmlGraphicsItem);
- if (qIsNaN(h))
- return;
-
- d->heightValid = true;
- if (d->height == h)
- return;
-
- qreal oldHeight = d->height;
-
- prepareGeometryChange();
- d->height = h;
- update();
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), width(), oldHeight));
-}
-
-void QmlGraphicsItem::resetHeight()
-{
- Q_D(QmlGraphicsItem);
- d->heightValid = false;
- setImplicitHeight(implicitHeight());
-}
-
-/*!
- Returns the height of the item that is implied by other properties that determine the content.
-*/
-qreal QmlGraphicsItem::implicitHeight() const
-{
- Q_D(const QmlGraphicsItem);
- return d->implicitHeight;
-}
-
-/*!
- Sets the implied height of the item to \a h.
- This is the height implied by other properties that determine the content.
-*/
-void QmlGraphicsItem::setImplicitHeight(qreal h)
-{
- Q_D(QmlGraphicsItem);
- d->implicitHeight = h;
- if (d->height == h || heightValid())
- return;
-
- qreal oldHeight = d->height;
-
- prepareGeometryChange();
- d->height = h;
- update();
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), width(), oldHeight));
-}
-
-/*!
- Returns whether the height property has been set explicitly.
-*/
-bool QmlGraphicsItem::heightValid() const
-{
- Q_D(const QmlGraphicsItem);
- return d->heightValid;
-}
-
-/*!
- \qmlproperty bool Item::wantsFocus
-
- This property indicates whether the item has has an active focus request.
-
- \sa {qmlfocus}{Keyboard Focus}
-*/
-
-/*! \internal */
-bool QmlGraphicsItem::wantsFocus() const
-{
- return focusItem() != 0;
-}
-
-/*!
- \qmlproperty bool Item::focus
- This property indicates whether the item has keyboard input focus. Set this
- property to true to request focus.
-
- \sa {qmlfocus}{Keyboard Focus}
-*/
-
-/*! \internal */
-bool QmlGraphicsItem::hasFocus() const
-{
- return QGraphicsItem::hasFocus();
-}
-
-/*! \internal */
-void QmlGraphicsItem::setFocus(bool focus)
-{
- if (focus)
- QGraphicsItem::setFocus(Qt::OtherFocusReason);
- else
- QGraphicsItem::clearFocus();
-}
-
-/*!
- \reimp
- \internal
-*/
-void QmlGraphicsItem::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
-{
-}
-
-/*!
- \reimp
- \internal
-*/
-bool QmlGraphicsItem::event(QEvent *ev)
-{
- return QGraphicsObject::event(ev);
-}
-
-QDebug operator<<(QDebug debug, QmlGraphicsItem *item)
-{
- if (!item) {
- debug << "QmlGraphicsItem(0)";
- return debug;
- }
-
- debug << item->metaObject()->className() << "(this =" << ((void*)item)
- << ", parent =" << ((void*)item->parentItem())
- << ", geometry =" << QRectF(item->pos(), QSizeF(item->width(), item->height()))
- << ", z =" << item->zValue() << ')';
- return debug;
-}
-
-int QmlGraphicsItemPrivate::consistentTime = -1;
-void QmlGraphicsItemPrivate::setConsistentTime(int t)
-{
- consistentTime = t;
-}
-
-QTime QmlGraphicsItemPrivate::currentTime()
-{
- if (consistentTime == -1)
- return QTime::currentTime();
- else
- return QTime(0, 0).addMSecs(consistentTime);
-}
-
-void QmlGraphicsItemPrivate::start(QTime &t)
-{
- t = currentTime();
-}
-
-int QmlGraphicsItemPrivate::elapsed(QTime &t)
-{
- int n = t.msecsTo(currentTime());
- if (n < 0) // passed midnight
- n += 86400 * 1000;
- return n;
-}
-
-int QmlGraphicsItemPrivate::restart(QTime &t)
-{
- QTime time = currentTime();
- int n = t.msecsTo(time);
- if (n < 0) // passed midnight
- n += 86400*1000;
- t = time;
- return n;
-}
-
-QT_END_NAMESPACE
-
-#include <moc_qmlgraphicsitem.cpp>