blob: 67c2087b3b2ef1c99fbde203353801b41b6a5769 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/android/vr/cardboard_input_delegate.h"
#include "chrome/browser/vr/input_event.h"
#include "chrome/browser/vr/model/controller_model.h"
#include "device/vr/android/gvr/gvr_delegate.h"
namespace vr {
CardboardInputDelegate::CardboardInputDelegate(gvr::GvrApi* gvr_api)
: gvr_api_(gvr_api) {}
CardboardInputDelegate::~CardboardInputDelegate() = default;
void CardboardInputDelegate::OnTriggerEvent(bool pressed) {
if (pressed) {
cardboard_trigger_pressed_ = true;
} else if (cardboard_trigger_pressed_) {
cardboard_trigger_pressed_ = false;
cardboard_trigger_clicked_ = true;
}
}
gfx::Transform CardboardInputDelegate::GetHeadPose() {
gfx::Transform head_pose;
device::GvrDelegate::GetGvrPoseWithNeckModel(gvr_api_, &head_pose);
return head_pose;
}
void CardboardInputDelegate::UpdateController(const gfx::Transform& head_pose,
base::TimeTicks current_time,
bool is_webxr_frame) {}
ControllerModel CardboardInputDelegate::GetControllerModel(
const gfx::Transform& head_pose) {
// On cardboard, we have some UI frames, such as when no WebXR frame have
// arrived. But in this case, we don't have any elements that react to input.
return {};
}
InputEventList CardboardInputDelegate::GetGestures(
base::TimeTicks current_time) {
return {};
}
device::mojom::XRInputSourceStatePtr
CardboardInputDelegate::GetInputSourceState() {
device::mojom::XRInputSourceStatePtr state =
device::mojom::XRInputSourceState::New();
// Only one gaze input source to worry about, so it can have a static id.
state->source_id = 1;
// Report any trigger state changes made since the last call and reset the
// state here.
state->primary_input_pressed = cardboard_trigger_pressed_;
state->primary_input_clicked = cardboard_trigger_clicked_;
cardboard_trigger_clicked_ = false;
state->description = device::mojom::XRInputSourceDescription::New();
// It's a gaze-cursor-based device.
state->description->target_ray_mode = device::mojom::XRTargetRayMode::GAZING;
state->description->emulated_position = true;
// No implicit handedness
state->description->handedness = device::mojom::XRHandedness::NONE;
// Pointer and grip transforms are omitted since this is a gaze-based source.
return state;
}
void CardboardInputDelegate::OnResume() {}
void CardboardInputDelegate::OnPause() {}
} // namespace vr