| Index: device/gamepad/public/interfaces/gamepad_struct_traits.cc
|
| diff --git a/device/gamepad/public/interfaces/gamepad_struct_traits.cc b/device/gamepad/public/interfaces/gamepad_struct_traits.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c87ea82897ffb81192491e20560cfc4e9425e559
|
| --- /dev/null
|
| +++ b/device/gamepad/public/interfaces/gamepad_struct_traits.cc
|
| @@ -0,0 +1,212 @@
|
| +// Copyright 2016 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 "device/gamepad/public/interfaces/gamepad_struct_traits.h"
|
| +
|
| +namespace mojo {
|
| +
|
| +// static
|
| +void StructTraits<
|
| + device::mojom::GamepadQuaternionDataView,
|
| + blink::WebGamepadQuaternion>::SetToNull(blink::WebGamepadQuaternion* out) {
|
| + memset(out, 0, sizeof(blink::WebGamepadQuaternion));
|
| + out->notNull = false;
|
| +}
|
| +
|
| +// static
|
| +bool StructTraits<device::mojom::GamepadQuaternionDataView,
|
| + blink::WebGamepadQuaternion>::
|
| + Read(device::mojom::GamepadQuaternionDataView data,
|
| + blink::WebGamepadQuaternion* out) {
|
| + out->notNull = true;
|
| + out->x = data.x();
|
| + out->y = data.y();
|
| + out->z = data.z();
|
| + out->w = data.w();
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +void StructTraits<device::mojom::GamepadVectorDataView,
|
| + blink::WebGamepadVector>::SetToNull(blink::WebGamepadVector*
|
| + out) {
|
| + memset(out, 0, sizeof(blink::WebGamepadVector));
|
| + out->notNull = false;
|
| +}
|
| +
|
| +// static
|
| +bool StructTraits<
|
| + device::mojom::GamepadVectorDataView,
|
| + blink::WebGamepadVector>::Read(device::mojom::GamepadVectorDataView data,
|
| + blink::WebGamepadVector* out) {
|
| + out->notNull = true;
|
| + out->x = data.x();
|
| + out->y = data.y();
|
| + out->z = data.z();
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +bool StructTraits<
|
| + device::mojom::GamepadButtonDataView,
|
| + blink::WebGamepadButton>::Read(device::mojom::GamepadButtonDataView data,
|
| + blink::WebGamepadButton* out) {
|
| + out->pressed = data.pressed();
|
| + out->touched = data.touched();
|
| + out->value = data.value();
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +void StructTraits<device::mojom::GamepadPoseDataView,
|
| + blink::WebGamepadPose>::SetToNull(blink::WebGamepadPose*
|
| + out) {
|
| + memset(out, 0, sizeof(blink::WebGamepadPose));
|
| + out->notNull = false;
|
| +}
|
| +
|
| +// static
|
| +bool StructTraits<device::mojom::GamepadPoseDataView, blink::WebGamepadPose>::
|
| + Read(device::mojom::GamepadPoseDataView data, blink::WebGamepadPose* out) {
|
| + out->notNull = true;
|
| + if (!data.ReadOrientation(&out->orientation)) {
|
| + return false;
|
| + }
|
| + out->hasOrientation = out->orientation.notNull;
|
| +
|
| + if (!data.ReadPosition(&out->position)) {
|
| + return false;
|
| + }
|
| + out->hasPosition = out->position.notNull;
|
| +
|
| + if (!data.ReadAngularVelocity(&out->angularVelocity)) {
|
| + return false;
|
| + }
|
| + if (!data.ReadLinearVelocity(&out->linearVelocity)) {
|
| + return false;
|
| + }
|
| + if (!data.ReadAngularAcceleration(&out->angularAcceleration)) {
|
| + return false;
|
| + }
|
| + if (!data.ReadLinearAcceleration(&out->linearAcceleration)) {
|
| + return false;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +// static
|
| +device::mojom::GamepadHand
|
| +EnumTraits<device::mojom::GamepadHand, blink::WebGamepadHand>::ToMojom(
|
| + blink::WebGamepadHand input) {
|
| + switch (input) {
|
| + case blink::WebGamepadHand::GamepadHandNone:
|
| + return device::mojom::GamepadHand::GamepadHandNone;
|
| + case blink::WebGamepadHand::GamepadHandLeft:
|
| + return device::mojom::GamepadHand::GamepadHandLeft;
|
| + case blink::WebGamepadHand::GamepadHandRight:
|
| + return device::mojom::GamepadHand::GamepadHandRight;
|
| + }
|
| +
|
| + NOTREACHED();
|
| + return device::mojom::GamepadHand::GamepadHandNone;
|
| +}
|
| +
|
| +// static
|
| +bool EnumTraits<device::mojom::GamepadHand, blink::WebGamepadHand>::FromMojom(
|
| + device::mojom::GamepadHand input,
|
| + blink::WebGamepadHand* output) {
|
| + switch (input) {
|
| + case device::mojom::GamepadHand::GamepadHandNone:
|
| + *output = blink::WebGamepadHand::GamepadHandNone;
|
| + return true;
|
| + case device::mojom::GamepadHand::GamepadHandLeft:
|
| + *output = blink::WebGamepadHand::GamepadHandLeft;
|
| + return true;
|
| + case device::mojom::GamepadHand::GamepadHandRight:
|
| + *output = blink::WebGamepadHand::GamepadHandRight;
|
| + return true;
|
| + }
|
| +
|
| + NOTREACHED();
|
| + return false;
|
| +}
|
| +
|
| +// static
|
| +ConstCArray<uint16_t>
|
| +StructTraits<device::mojom::GamepadDataView, blink::WebGamepad>::id(
|
| + const blink::WebGamepad& r) {
|
| + size_t id_length = 0;
|
| + while (id_length < blink::WebGamepad::idLengthCap && r.id[id_length] != 0) {
|
| + id_length++;
|
| + }
|
| + return {id_length, reinterpret_cast<const uint16_t*>(&r.id[0])};
|
| +}
|
| +
|
| +// static
|
| +ConstCArray<uint16_t>
|
| +StructTraits<device::mojom::GamepadDataView, blink::WebGamepad>::mapping(
|
| + const blink::WebGamepad& r) {
|
| + size_t mapping_length = 0;
|
| + while (mapping_length < blink::WebGamepad::mappingLengthCap &&
|
| + r.mapping[mapping_length] != 0) {
|
| + mapping_length++;
|
| + }
|
| + return {mapping_length, reinterpret_cast<const uint16_t*>(&r.mapping[0])};
|
| +}
|
| +
|
| +// static
|
| +bool StructTraits<device::mojom::GamepadDataView, blink::WebGamepad>::Read(
|
| + device::mojom::GamepadDataView data,
|
| + blink::WebGamepad* out) {
|
| + out->connected = data.connected();
|
| +
|
| + memset(&out->id[0], 0,
|
| + blink::WebGamepad::idLengthCap * sizeof(blink::WebUChar));
|
| + CArray<uint16_t> id = {0, blink::WebGamepad::idLengthCap,
|
| + reinterpret_cast<uint16_t*>(&out->id[0])};
|
| + if (!data.ReadId(&id)) {
|
| + return false;
|
| + }
|
| +
|
| + out->timestamp = data.timestamp();
|
| +
|
| + CArray<double> axes = {0, blink::WebGamepad::axesLengthCap, &out->axes[0]};
|
| + if (!data.ReadAxes(&axes)) {
|
| + return false;
|
| + }
|
| + // static_cast is safe when "data.ReadAxes(&axes)" above returns true.
|
| + out->axesLength = static_cast<unsigned>(axes.size);
|
| +
|
| + CArray<blink::WebGamepadButton> buttons = {
|
| + 0, blink::WebGamepad::buttonsLengthCap, &out->buttons[0]};
|
| + if (!data.ReadButtons(&buttons)) {
|
| + return false;
|
| + }
|
| + // static_cast is safe when "data.ReadButtons(&buttons)" above returns true.
|
| + out->buttonsLength = static_cast<unsigned>(buttons.size);
|
| +
|
| + memset(&out->mapping[0], 0,
|
| + blink::WebGamepad::mappingLengthCap * sizeof(blink::WebUChar));
|
| + CArray<uint16_t> mapping = {0, blink::WebGamepad::mappingLengthCap,
|
| + reinterpret_cast<uint16_t*>(&out->mapping[0])};
|
| + if (!data.ReadMapping(&mapping)) {
|
| + return false;
|
| + }
|
| +
|
| + if (!data.ReadPose(&out->pose)) {
|
| + return false;
|
| + }
|
| +
|
| + blink::WebGamepadHand hand;
|
| + if (!data.ReadHand(&hand)) {
|
| + return false;
|
| + }
|
| + out->hand = hand;
|
| +
|
| + out->displayId = data.display_id();
|
| +
|
| + return true;
|
| +}
|
| +
|
| +} // namespace mojo
|
|
|