diff options
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/items.pri | 2 | ||||
-rw-r--r-- | src/quick/items/qquickitem.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 3 | ||||
-rw-r--r-- | src/quick/items/qquickscreen.cpp | 176 | ||||
-rw-r--r-- | src/quick/items/qquickscreen_p.h | 105 | ||||
-rw-r--r-- | src/quick/items/qquickwindowmodule.cpp | 2 |
6 files changed, 292 insertions, 0 deletions
diff --git a/src/quick/items/items.pri b/src/quick/items/items.pri index a224db31d6..8a581920ea 100644 --- a/src/quick/items/items.pri +++ b/src/quick/items/items.pri @@ -67,6 +67,7 @@ HEADERS += \ $$PWD/qquickmultipointtoucharea_p.h \ $$PWD/qquickitemview_p.h \ $$PWD/qquickitemview_p_p.h \ + $$PWD/qquickscreen_p.h \ $$PWD/qquickwindowmodule_p.h \ $$PWD/qquickwindowmanager_p.h @@ -116,6 +117,7 @@ SOURCES += \ $$PWD/qquickmultipointtoucharea.cpp \ $$PWD/qquickitemview.cpp \ $$PWD/qquickwindowmodule.cpp \ + $$PWD/qquickscreen.cpp \ $$PWD/qquickwindowmanager.cpp SOURCES += \ diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 5ec0787d9e..8f58c33613 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -46,6 +46,7 @@ #include "qquickcanvas_p.h" #include "qquickevents_p_p.h" +#include "qquickscreen_p.h" #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecomponent.h> @@ -2136,6 +2137,8 @@ void QQuickItemPrivate::initCanvas(InitializationState *state, QQuickCanvas *c) dirty(Canvas); + if (screenAttached) + screenAttached->canvasChanged(c); itemChange(QQuickItem::ItemSceneChange, c); } @@ -2264,6 +2267,7 @@ QQuickItemPrivate::QQuickItemPrivate() itemNodeInstance(0), opacityNode(0), clipNode(0), rootNode(0), groupNode(0), paintNode(0) , beforePaintNode(0), effectRefCount(0), hideRefCount(0) + , screenAttached(0) { } diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index 79d98d7fe4..e9c9498c44 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -83,6 +83,7 @@ QT_BEGIN_NAMESPACE class QNetworkReply; class QQuickItemKeyFilter; class QQuickLayoutMirroringAttached; +class QQuickScreenAttached; class QQuickContents : public QQuickItemChangeListener { @@ -445,6 +446,8 @@ public: virtual void mirrorChange() {} + QQuickScreenAttached *screenAttached; + static qint64 consistentTime; static void setConsistentTime(qint64 t); static void start(QElapsedTimer &); diff --git a/src/quick/items/qquickscreen.cpp b/src/quick/items/qquickscreen.cpp new file mode 100644 index 0000000000..b1b4ff1d8c --- /dev/null +++ b/src/quick/items/qquickscreen.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** +** +** Copyright (C) 2011 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$ +** GNU Lesser General Public License Usage +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qquickscreen_p.h" + +#include "qquickitem.h" +#include "qquickitem_p.h" +#include "qquickcanvas.h" + +#include <QScreen> + +QT_BEGIN_NAMESPACE + +/*! + \qmlclass Screen QQuickScreenAttached + \inqmlmodule QtQuick.Window 2 + \brief The Screen attached object provides information about the Screen an Item is displayed on. + + The Screen attached object is only valid inside Item or Item derived elements. Inside these elements + it refers to the screen that the element is currently being displayed on. +*/ + +/*! + \qmlattachedproperty int QtQuickWindow2::Screen::width + \readonly + + This contains the width of the screen in pixels. +*/ +/*! + \qmlattachedproperty int QtQuickWindow2::Screen::height + \readonly + + This contains the height of the screen in pixels. +*/ +/*! + \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::primaryOrientation + \readonly + + This contains the primary orientation of the screen. This can only change if the screen changes. +*/ +/*! + \qmlattachedproperty Qt::ScreenOrientation QtQuickWindow2::Screen::currentOrientation + \readonly + + This contains the current orientation of the screen. +*/ +/*! + \qmlattachedmethod int QtQuickWindow2::Screen::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) + + Returns the rotation angle, in degrees, between the two specified angles. +*/ + +QQuickScreenAttached::QQuickScreenAttached(QObject* attachee) + : QObject(attachee) + , m_screen(0) +{ + m_attachee = qobject_cast<QQuickItem*>(attachee); + + if (m_attachee) { + QQuickItemPrivate::get(m_attachee)->screenAttached = this; + + if (m_attachee->canvas()) //It might not be assigned to a canvas yet + canvasChanged(m_attachee->canvas()); + } +} + +int QQuickScreenAttached::width() const +{ + if (!m_screen) + return 0; + return m_screen->size().width(); +} + +int QQuickScreenAttached::height() const +{ + if (!m_screen) + return 0; + return m_screen->size().height(); +} + +Qt::ScreenOrientation QQuickScreenAttached::primaryOrientation() const +{ + if (!m_screen) + return Qt::UnknownOrientation; + return m_screen->primaryOrientation(); +} + +Qt::ScreenOrientation QQuickScreenAttached::currentOrientation() const +{ + if (!m_screen) + return Qt::UnknownOrientation; + return m_screen->currentOrientation(); +} + +int QQuickScreenAttached::angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b) +{ + return QScreen::angleBetween(a,b); +} + +void QQuickScreenAttached::canvasChanged(QQuickCanvas* c)//Called by QQuickItemPrivate::initCanvas +{ + QScreen* screen = c ? c->screen() : 0; + if (screen != m_screen) { + QScreen* oldScreen = m_screen; + m_screen = screen; + + if (oldScreen) { + disconnect(oldScreen, SIGNAL(sizeChanged(QSize)), + this, SIGNAL(widthChanged())); + disconnect(oldScreen, SIGNAL(sizeChanged(QSize)), + this, SIGNAL(heightChanged())); + disconnect(oldScreen, SIGNAL(currentOrientationChanged(Qt::ScreenOrientation)), + this, SIGNAL(currentOrientationChanged())); + } + + if (!screen) + return; //Don't bother emitting signals, because the new values are garbage anyways + + if (!oldScreen || screen->size() != oldScreen->size()) { + emit widthChanged(); + emit heightChanged(); + } + if (!oldScreen || screen->currentOrientation() != oldScreen->currentOrientation()) + emit currentOrientationChanged(); + if (!oldScreen || screen->primaryOrientation() != oldScreen->primaryOrientation()) + emit primaryOrientationChanged(); + + + connect(screen, SIGNAL(sizeChanged(QSize)), + this, SIGNAL(widthChanged())); + connect(screen, SIGNAL(sizeChanged(QSize)), + this, SIGNAL(heightChanged())); + connect(screen, SIGNAL(currentOrientationChanged(Qt::ScreenOrientation)), + this, SIGNAL(currentOrientationChanged())); + } +} + +QT_END_NAMESPACE diff --git a/src/quick/items/qquickscreen_p.h b/src/quick/items/qquickscreen_p.h new file mode 100644 index 0000000000..6c1567ba72 --- /dev/null +++ b/src/quick/items/qquickscreen_p.h @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2011 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$ +** GNU Lesser General Public License Usage +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKSCREEN_P_H +#define QQUICKSCREEN_P_H + +#include <qdeclarative.h> +#include <QRect> +#include <QSize> +#include <private/qdeclarativeglobal_p.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +class QQuickItem; +class QQuickCanvas; +class QScreen; + +class Q_AUTOTEST_EXPORT QQuickScreenAttached : public QObject +{ + Q_OBJECT + + Q_PROPERTY(int width READ width NOTIFY widthChanged) + Q_PROPERTY(int height READ height NOTIFY heightChanged) + Q_PROPERTY(Qt::ScreenOrientation primaryOrientation READ primaryOrientation NOTIFY primaryOrientationChanged) + Q_PROPERTY(Qt::ScreenOrientation currentOrientation READ currentOrientation NOTIFY currentOrientationChanged) + +public: + QQuickScreenAttached(QObject* attachee); + + int width() const; + int height() const; + Qt::ScreenOrientation primaryOrientation() const; + Qt::ScreenOrientation currentOrientation() const; + + Q_INVOKABLE int angleBetween(Qt::ScreenOrientation a, Qt::ScreenOrientation b); + + void canvasChanged(QQuickCanvas*); + +Q_SIGNALS: + void widthChanged(); + void heightChanged(); + void primaryOrientationChanged(); + void currentOrientationChanged(); + +private: + QScreen* m_screen; + QQuickItem* m_attachee; +}; + +class Q_AUTOTEST_EXPORT QQuickScreen : public QObject +{ + Q_OBJECT +public: + static QQuickScreenAttached *qmlAttachedProperties(QObject *object){ return new QQuickScreenAttached(object); } +}; + +QT_END_NAMESPACE + +QML_DECLARE_TYPEINFO(QQuickScreen, QML_HAS_ATTACHED_PROPERTIES) + +QT_END_HEADER + +#endif diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp index 726ea055d8..23ca00dd0a 100644 --- a/src/quick/items/qquickwindowmodule.cpp +++ b/src/quick/items/qquickwindowmodule.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qquickwindowmodule_p.h" +#include "qquickscreen_p.h" #include <QtQuick/QQuickCanvas> QT_BEGIN_NAMESPACE @@ -49,6 +50,7 @@ void QQuickWindowModule::defineModule() const char* uri = "QtQuick.Window"; qmlRegisterType<QQuickCanvas>(uri, 2, 0, "Window"); + qmlRegisterUncreatableType<QQuickScreen>(uri, 2, 0, "Screen", "Screen can only be used via the attached property."); } QT_END_NAMESPACE |