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);
25 GamepadPose::~GamepadPose() { mozilla::DropJSObjects(this); }
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
,
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
,
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
,
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
,
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
,
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
,
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
) {
108 const GamepadPoseState
& GamepadPose::GetPoseState() { return mPoseState
; }
110 } // namespace mozilla::dom