Merge branch 'ui' of github.com:SamGondelman/hifi into ui

This commit is contained in:
Dante Ruiz 2017-11-14 08:41:38 -08:00
commit db2f6810bd
5 changed files with 28 additions and 17 deletions

View file

@ -31,11 +31,11 @@ public:
Q_INVOKABLE QVariantMap getPrevPickResult(unsigned int uid) const; Q_INVOKABLE QVariantMap getPrevPickResult(unsigned int uid) const;
Q_INVOKABLE void setPrecisionPicking(unsigned int uid, bool precisionPicking) const { DependencyManager::get<PointerManager>()->setPrecisionPicking(uid, precisionPicking); } Q_INVOKABLE void setPrecisionPicking(unsigned int uid, bool precisionPicking) const { DependencyManager::get<PointerManager>()->setPrecisionPicking(uid, precisionPicking); }
Q_INVOKABLE void setLaserLength(unsigned int uid, float laserLength) const { DependencyManager::get<PointerManager>()->setLength(uid, laserLength); } Q_INVOKABLE void setLength(unsigned int uid, float length) const { DependencyManager::get<PointerManager>()->setLength(uid, length); }
Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities) const; Q_INVOKABLE void setIgnoreItems(unsigned int uid, const QScriptValue& ignoreEntities) const;
Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities) const; Q_INVOKABLE void setIncludeItems(unsigned int uid, const QScriptValue& includeEntities) const;
Q_INVOKABLE void setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isOverlay) const { DependencyManager::get<PointerManager>()->setLockEndUUID(uid, objectID, isOverlay); } Q_INVOKABLE void setLockEndUUID(unsigned int uid, const QUuid& objectID, bool isOverlay, const glm::mat4& offsetMat = glm::mat4()) const { DependencyManager::get<PointerManager>()->setLockEndUUID(uid, objectID, isOverlay, offsetMat); }
Q_INVOKABLE bool isLeftHand(unsigned int uid) { return DependencyManager::get<PointerManager>()->isLeftHand(uid); } Q_INVOKABLE bool isLeftHand(unsigned int uid) { return DependencyManager::get<PointerManager>()->isLeftHand(uid); }
Q_INVOKABLE bool isRightHand(unsigned int uid) { return DependencyManager::get<PointerManager>()->isRightHand(uid); } Q_INVOKABLE bool isRightHand(unsigned int uid) { return DependencyManager::get<PointerManager>()->isRightHand(uid); }

View file

@ -60,8 +60,7 @@ glm::vec3 RayPick::intersectRayWithXYPlane(const glm::vec3& origin, const glm::v
glm::vec3 RayPick::intersectRayWithOverlayXYPlane(const QUuid& overlayID, const glm::vec3& origin, const glm::vec3& direction) { glm::vec3 RayPick::intersectRayWithOverlayXYPlane(const QUuid& overlayID, const glm::vec3& origin, const glm::vec3& direction) {
glm::vec3 position = vec3FromVariant(qApp->getOverlays().getProperty(overlayID, "position").value); glm::vec3 position = vec3FromVariant(qApp->getOverlays().getProperty(overlayID, "position").value);
glm::quat rotation = quatFromVariant(qApp->getOverlays().getProperty(overlayID, "rotation").value); glm::quat rotation = quatFromVariant(qApp->getOverlays().getProperty(overlayID, "rotation").value);
const glm::vec3 DEFAULT_REGISTRATION_POINT = glm::vec3(0.5f); return intersectRayWithXYPlane(origin, direction, position, rotation, ENTITY_ITEM_DEFAULT_REGISTRATION_POINT);
return intersectRayWithXYPlane(origin, direction, position, rotation, DEFAULT_REGISTRATION_POINT);
} }
glm::vec3 RayPick::intersectRayWithEntityXYPlane(const QUuid& entityID, const glm::vec3& origin, const glm::vec3& direction) { glm::vec3 RayPick::intersectRayWithEntityXYPlane(const QUuid& entityID, const glm::vec3& origin, const glm::vec3& direction) {
@ -98,8 +97,7 @@ glm::vec2 RayPick::projectOntoOverlayXYPlane(const QUuid& overlayID, const glm::
dimensions = glm::vec3(vec2FromVariant(qApp->getOverlays().getProperty(overlayID, "dimensions").value), 0.01); dimensions = glm::vec3(vec2FromVariant(qApp->getOverlays().getProperty(overlayID, "dimensions").value), 0.01);
} }
const glm::vec3 DEFAULT_REGISTRATION_POINT = glm::vec3(0.5f); return projectOntoXYPlane(worldPos, position, rotation, dimensions, ENTITY_ITEM_DEFAULT_REGISTRATION_POINT, unNormalized);
return projectOntoXYPlane(worldPos, position, rotation, dimensions, DEFAULT_REGISTRATION_POINT, unNormalized);
} }
glm::vec2 RayPick::projectOntoEntityXYPlane(const QUuid& entityID, const glm::vec3& worldPos, bool unNormalized) { glm::vec2 RayPick::projectOntoEntityXYPlane(const QUuid& entityID, const glm::vec3& worldPos, bool unNormalized) {

View file

@ -150,7 +150,6 @@ PickResultPointer StylusPick::getEntityIntersection(const StylusTip& pick) {
} }
auto entity = qApp->getEntities()->getTree()->findEntityByEntityItemID(target); auto entity = qApp->getEntities()->getTree()->findEntityByEntityItemID(target);
// Don't interact with non-3D or invalid overlays
if (!entity) { if (!entity) {
continue; continue;
} }

View file

@ -1109,16 +1109,19 @@ bool OffscreenUi::eventFilter(QObject* originalDestination, QEvent* event) {
case QEvent::MouseMove: { case QEvent::MouseMove: {
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event); QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
QPointF transformedPos = mapToVirtualScreen(mouseEvent->localPos()); QPointF transformedPos = mapToVirtualScreen(mouseEvent->localPos());
PointerEvent pointerEvent(choosePointerEventType(mouseEvent->type()), PointerManager::MOUSE_POINTER_ID, glm::vec2(transformedPos.x(), transformedPos.y()), // FIXME: touch events are always being accepted. Use mouse events on the OffScreenUi for now, and investigate properly switching to touch events
PointerEvent::Button(mouseEvent->button()), mouseEvent->buttons(), mouseEvent->modifiers()); // (using handlePointerEvent) later
result = OffscreenQmlSurface::handlePointerEvent(pointerEvent, _touchDevice); QMouseEvent mappedEvent(mouseEvent->type(), transformedPos, mouseEvent->screenPos(), mouseEvent->button(), mouseEvent->buttons(), mouseEvent->modifiers());
mappedEvent.ignore();
if (QCoreApplication::sendEvent(getWindow(), &mappedEvent)) {
return mappedEvent.isAccepted();
}
break; break;
} }
default: default:
break; break;
} }
// Check if this is a key press/release event that might need special attention // Check if this is a key press/release event that might need special attention
auto type = event->type(); auto type = event->type();
if (type != QEvent::KeyPress && type != QEvent::KeyRelease) { if (type != QEvent::KeyPress && type != QEvent::KeyRelease) {

View file

@ -1031,6 +1031,7 @@ bool OffscreenQmlSurface::handlePointerEvent(const PointerEvent& event, class QT
touchEvent.setTarget(_rootItem); touchEvent.setTarget(_rootItem);
touchEvent.setTouchPoints(touchPoints); touchEvent.setTouchPoints(touchPoints);
touchEvent.setTouchPointStates(touchPointStates); touchEvent.setTouchPointStates(touchPointStates);
touchEvent.ignore();
} }
// Send mouse events to the surface so that HTML dialog elements work with mouse press and hover. // Send mouse events to the surface so that HTML dialog elements work with mouse press and hover.
@ -1046,29 +1047,39 @@ bool OffscreenQmlSurface::handlePointerEvent(const PointerEvent& event, class QT
buttons |= Qt::LeftButton; buttons |= Qt::LeftButton;
} }
bool eventsAccepted = false; bool eventSent = false;
bool eventsAccepted = true;
if (event.getType() == PointerEvent::Move) { if (event.getType() == PointerEvent::Move) {
QMouseEvent mouseEvent(QEvent::MouseMove, windowPoint, windowPoint, windowPoint, button, buttons, event.getKeyboardModifiers()); QMouseEvent mouseEvent(QEvent::MouseMove, windowPoint, windowPoint, windowPoint, button, buttons, event.getKeyboardModifiers());
// TODO - this line necessary for the QML Tooltop to work (which is not currently being used), but it causes interface to crash on launch on a fresh install // TODO - this line necessary for the QML Tooltop to work (which is not currently being used), but it causes interface to crash on launch on a fresh install
// need to investigate into why this crash is happening. // need to investigate into why this crash is happening.
//_qmlContext->setContextProperty("lastMousePosition", windowPoint); //_qmlContext->setContextProperty("lastMousePosition", windowPoint);
QCoreApplication::sendEvent(_quickWindow, &mouseEvent); mouseEvent.ignore();
eventsAccepted &= mouseEvent.isAccepted(); if (QCoreApplication::sendEvent(_quickWindow, &mouseEvent)) {
eventSent = true;
eventsAccepted &= mouseEvent.isAccepted();
}
} }
if (touchType == QEvent::TouchBegin) { if (touchType == QEvent::TouchBegin) {
_touchBeginAccepted = QCoreApplication::sendEvent(_quickWindow, &touchEvent); _touchBeginAccepted = QCoreApplication::sendEvent(_quickWindow, &touchEvent);
if (_touchBeginAccepted) {
eventSent = true;
eventsAccepted &= touchEvent.isAccepted();
}
} else if (_touchBeginAccepted) { } else if (_touchBeginAccepted) {
QCoreApplication::sendEvent(_quickWindow, &touchEvent); if (QCoreApplication::sendEvent(_quickWindow, &touchEvent)) {
eventSent = true;
eventsAccepted &= touchEvent.isAccepted();
}
} }
eventsAccepted &= touchEvent.isAccepted();
if (removeTouchPoint) { if (removeTouchPoint) {
_activeTouchPoints.erase(event.getID()); _activeTouchPoints.erase(event.getID());
} }
return eventsAccepted; return eventSent && eventsAccepted;
} }
void OffscreenQmlSurface::pause() { void OffscreenQmlSurface::pause() {