/****************************************************************************
**
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Contact: http://www.qt-project.org/
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
**
**
**
+**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "qaccessiblequickview.h"
#include <QtQuick/qquickitem.h>
+#include <QtQuick/private/qquickitem_p.h>
#include "qaccessiblequickitem.h"
#include "qdeclarativeaccessible.h"
QAccessibleQuickView::QAccessibleQuickView(QQuickView *object)
:QAccessibleObject(object)
{
- m_view = static_cast<QQuickView *>(object);
}
int QAccessibleQuickView::childCount() const
{
- return m_view->rootItem() ? 1 : 0;
+ return view()->rootItem() ? 1 : 0;
}
QAccessibleInterface *QAccessibleQuickView::parent() const
QAccessibleInterface *QAccessibleQuickView::child(int index) const
{
if (index == 0) {
- QQuickItem *declarativeRoot = m_view->rootObject();
- return new QAccessibleQuickItem(declarativeRoot);
+ if (QQuickItem *declarativeRoot = view()->rootObject())
+ return new QAccessibleQuickItem(declarativeRoot);
}
return 0;
}
QAccessible::State QAccessibleQuickView::state() const
{
- return QAccessible::Normal; // FIXME
+ return QAccessible::State(); // FIXME
}
QRect QAccessibleQuickView::rect() const
{
- return QRect(m_view->x(), m_view->y(), m_view->width(), m_view->height());
+ return QRect(view()->x(), view()->y(), view()->width(), view()->height());
}
int QAccessibleQuickView::navigate(QAccessible::RelationFlag rel, int entry, QAccessibleInterface **target) const
return QString::fromAscii(object()->metaObject()->className()) ;
}
#endif
- return m_view->windowTitle();
+ return view()->windowTitle();
+}
+
+
+/*!
+ \internal
+
+ Can also return \a item itself
+ */
+static QQuickItem *childAt_helper(QQuickItem *item, int x, int y)
+{
+ if (item->opacity() == 0.0 || !item->isVisible() || !item->isEnabled())
+ return 0;
+
+ if (item->flags() & QQuickItem::ItemClipsChildrenToShape) {
+ if (!itemScreenRect(item).contains(x, y))
+ return 0;
+ }
+
+ QQuickItemPrivate *itemPrivate = QQuickItemPrivate::get(item);
+
+ QList<QQuickItem *> children = itemPrivate->paintOrderChildItems();
+ for (int i = children.count() - 1; i >= 0; --i) {
+ QQuickItem *child = children.at(i);
+ if (QQuickItem *childChild = childAt_helper(child, x, y))
+ return childChild;
+ }
+
+ QRect screenRect = itemScreenRect(item);
+
+ if (screenRect.contains(x, y))
+ return item;
+
+ return 0;
}
QAccessibleInterface *QAccessibleQuickView::childAt(int x, int y) const
{
- Q_UNUSED(x);
- Q_UNUSED(y);
- return child(0); // return the top-level QML item
+ Q_ASSERT(view());
+ QQuickItem *root = view()->rootItem();
+ if (root) {
+ if (QQuickItem *item = childAt_helper(root, x, y))
+ return QAccessible::queryAccessibleInterface(item);
+ }
+ return 0;
}
int QAccessibleQuickView::indexOfChild(const QAccessibleInterface *iface) const
{
if (iface) {
- QQuickItem *declarativeRoot = m_view->rootObject();
+ QQuickItem *declarativeRoot = view()->rootObject();
if (declarativeRoot == iface->object())
- return 1;
+ return 0;
}
return -1;