Backed out changeset 2450366cf7ca (bug 1891629) for causing win msix mochitest failures
[gecko.git] / dom / gamepad / GamepadPose.cpp
blobe2a5d09efc8751cf6d61bef6463e8c412bbf60ac
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsWrapperCache.h"
9 #include "mozilla/HoldDropJSObjects.h"
10 #include "mozilla/dom/GamepadPoseBinding.h"
11 #include "mozilla/dom/GamepadPose.h"
13 namespace mozilla::dom {
15 GamepadPose::GamepadPose(nsISupports* aParent, const GamepadPoseState& aState)
16 : Pose(aParent), mPoseState(aState) {
17 mozilla::HoldJSObjects(this);
20 GamepadPose::GamepadPose(nsISupports* aParent) : Pose(aParent) {
21 mozilla::HoldJSObjects(this);
22 mPoseState.Clear();
25 GamepadPose::~GamepadPose() { mozilla::DropJSObjects(this); }
27 /* virtual */
28 JSObject* GamepadPose::WrapObject(JSContext* aJSContext,
29 JS::Handle<JSObject*> aGivenProto) {
30 return GamepadPose_Binding::Wrap(aJSContext, this, aGivenProto);
33 bool GamepadPose::HasOrientation() const {
34 return bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation);
37 bool GamepadPose::HasPosition() const {
38 return bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position) ||
39 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_PositionEmulated);
42 void GamepadPose::GetPosition(JSContext* aJSContext,
43 JS::MutableHandle<JSObject*> aRetval,
44 ErrorResult& aRv) {
45 const bool valid =
46 mPoseState.isPositionValid &&
47 (bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position) ||
48 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_PositionEmulated));
49 SetFloat32Array(aJSContext, this, aRetval, mPosition,
50 valid ? mPoseState.position : nullptr, 3, aRv);
53 void GamepadPose::GetLinearVelocity(JSContext* aJSContext,
54 JS::MutableHandle<JSObject*> aRetval,
55 ErrorResult& aRv) {
56 const bool valid =
57 mPoseState.isPositionValid &&
58 (bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Position) ||
59 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_PositionEmulated));
60 SetFloat32Array(aJSContext, this, aRetval, mLinearVelocity,
61 valid ? mPoseState.linearVelocity : nullptr, 3, aRv);
64 void GamepadPose::GetLinearAcceleration(JSContext* aJSContext,
65 JS::MutableHandle<JSObject*> aRetval,
66 ErrorResult& aRv) {
67 const bool valid =
68 mPoseState.isPositionValid &&
69 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_LinearAcceleration);
70 SetFloat32Array(aJSContext, this, aRetval, mLinearAcceleration,
71 valid ? mPoseState.linearAcceleration : nullptr, 3, aRv);
74 void GamepadPose::GetOrientation(JSContext* aJSContext,
75 JS::MutableHandle<JSObject*> aRetval,
76 ErrorResult& aRv) {
77 const bool valid =
78 mPoseState.isOrientationValid &&
79 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation);
80 SetFloat32Array(aJSContext, this, aRetval, mOrientation,
81 valid ? mPoseState.orientation : nullptr, 4, aRv);
84 void GamepadPose::GetAngularVelocity(JSContext* aJSContext,
85 JS::MutableHandle<JSObject*> aRetval,
86 ErrorResult& aRv) {
87 const bool valid =
88 mPoseState.isOrientationValid &&
89 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_Orientation);
90 SetFloat32Array(aJSContext, this, aRetval, mAngularVelocity,
91 valid ? mPoseState.angularVelocity : nullptr, 3, aRv);
94 void GamepadPose::GetAngularAcceleration(JSContext* aJSContext,
95 JS::MutableHandle<JSObject*> aRetval,
96 ErrorResult& aRv) {
97 const bool valid =
98 mPoseState.isOrientationValid &&
99 bool(mPoseState.flags & GamepadCapabilityFlags::Cap_AngularAcceleration);
100 SetFloat32Array(aJSContext, this, aRetval, mAngularAcceleration,
101 valid ? mPoseState.angularAcceleration : nullptr, 3, aRv);
104 void GamepadPose::SetPoseState(const GamepadPoseState& aPose) {
105 mPoseState = aPose;
108 const GamepadPoseState& GamepadPose::GetPoseState() { return mPoseState; }
110 } // namespace mozilla::dom