gecko-dev/dom/gamepad/GamepadTouch.cpp
Stanca Serban 11cd73d7a7 Backed out 6 changesets (bug 1900930) for causing xpcshell assertion failures in ErrorResult.h. CLOSED TREE
Backed out changeset 5234a13894b2 (bug 1900930)
Backed out changeset 638842494167 (bug 1900930)
Backed out changeset 36695bae43ed (bug 1900930)
Backed out changeset 23ab72aa4589 (bug 1900930)
Backed out changeset c89109c12d59 (bug 1900930)
Backed out changeset 2d3f52edb98a (bug 1900930)
2024-07-25 13:53:53 +03:00

73 lines
2.3 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/GamepadTouch.h"
#include "mozilla/HoldDropJSObjects.h"
#include "mozilla/dom/GamepadManager.h"
#include "mozilla/dom/Promise.h"
#include "mozilla/dom/TypedArray.h"
namespace mozilla::dom {
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_WITH_JS_MEMBERS(GamepadTouch, (mParent),
(mPosition,
mSurfaceDimensions))
GamepadTouch::GamepadTouch(nsISupports* aParent)
: mParent(aParent), mPosition(nullptr), mSurfaceDimensions(nullptr) {
mozilla::HoldJSObjects(this);
mTouchState = GamepadTouchState();
}
GamepadTouch::~GamepadTouch() { mozilla::DropJSObjects(this); }
/* virtual */ JSObject* GamepadTouch::WrapObject(
JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
return GamepadTouch_Binding::Wrap(aCx, this, aGivenProto);
}
void GamepadTouch::GetPosition(JSContext* aCx,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv) {
mPosition = Float32Array::Create(aCx, this, mTouchState.position, aRv);
if (aRv.Failed()) {
return;
}
aRetval.set(mPosition);
}
void GamepadTouch::GetSurfaceDimensions(JSContext* aCx,
JS::MutableHandle<JSObject*> aRetval,
ErrorResult& aRv) {
if (mTouchState.isSurfaceDimensionsValid) {
mSurfaceDimensions =
Uint32Array::Create(aCx, this, mTouchState.surfaceDimensions, aRv);
} else {
mSurfaceDimensions = Uint32Array::Create(
aCx, this, std::size(mTouchState.surfaceDimensions), aRv);
}
if (!mSurfaceDimensions) {
aRv.NoteJSContextException(aCx);
return;
}
aRetval.set(mSurfaceDimensions);
}
void GamepadTouch::SetTouchState(const GamepadTouchState& aTouch) {
mTouchState = aTouch;
}
void GamepadTouch::Set(const GamepadTouch* aOther) {
MOZ_ASSERT(aOther);
mTouchState = aOther->mTouchState;
}
} // namespace mozilla::dom