123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*
- * Copyright (C) 2011, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- */
- #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_H_
- #define THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_H_
- #include "device/gamepad/public/cpp/gamepad.h"
- #include "third_party/blink/renderer/core/dom/dom_high_res_time_stamp.h"
- #include "third_party/blink/renderer/modules/gamepad/gamepad_button.h"
- #include "third_party/blink/renderer/modules/gamepad/gamepad_haptic_actuator.h"
- #include "third_party/blink/renderer/modules/modules_export.h"
- #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
- #include "third_party/blink/renderer/platform/heap/handle.h"
- #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
- #include "third_party/blink/renderer/platform/wtf/vector.h"
- namespace blink {
- class MODULES_EXPORT Gamepad final : public ScriptWrappable {
- DEFINE_WRAPPERTYPEINFO();
- public:
- // Objects implementing this interface are garbage-collected.
- class Client : public GarbageCollectedMixin {
- public:
- virtual GamepadHapticActuator* GetVibrationActuatorForGamepad(
- const Gamepad&) = 0;
- virtual ~Client() = default;
- };
- Gamepad(Client* client,
- int index,
- base::TimeTicks time_origin,
- base::TimeTicks time_floor);
- ~Gamepad() override;
- void UpdateFromDeviceState(const device::Gamepad&);
- typedef Vector<double> DoubleVector;
- const String& id() const { return id_; }
- void SetId(const String& id) { id_ = id; }
- int index() const { return index_; }
- bool connected() const { return connected_; }
- void SetConnected(bool val) { connected_ = val; }
- DOMHighResTimeStamp timestamp() const { return timestamp_; }
- const String& mapping() const { return mapping_; }
- void SetMapping(device::GamepadMapping mapping);
- const DoubleVector& axes();
- void SetAxes(unsigned count, const double* data);
- bool isAxisDataDirty() const { return is_axis_data_dirty_; }
- const GamepadButtonVector& buttons();
- void SetButtons(unsigned count, const device::GamepadButton* data);
- bool isButtonDataDirty() const { return is_button_data_dirty_; }
- GamepadHapticActuator* vibrationActuator() const;
- void SetVibrationActuatorInfo(const device::GamepadHapticActuator&);
- bool HasVibrationActuator() const { return has_vibration_actuator_; }
- device::GamepadHapticActuatorType GetVibrationActuatorType() const {
- return vibration_actuator_type_;
- }
- void Trace(Visitor*) const override;
- private:
- void SetTimestamp(const device::Gamepad& device_gamepad);
- Member<Client> client_;
- // A string identifying the gamepad model.
- String id_;
- // The index of this gamepad within the GamepadList.
- const int index_;
- // True if this gamepad was still connected when gamepad state was captured.
- bool connected_;
- // The current time when the gamepad state was captured.
- DOMHighResTimeStamp timestamp_;
- // A string indicating whether the standard mapping is in use.
- String mapping_;
- // Snapshot of the axis state.
- DoubleVector axes_;
- // Snapshot of the button state.
- GamepadButtonVector buttons_;
- // True if the gamepad can produce haptic vibration effects.
- bool has_vibration_actuator_;
- // The type of haptic actuator used for vibration effects.
- device::GamepadHapticActuatorType vibration_actuator_type_;
- // True if the data in |axes_| has changed since the last time it was
- // accessed.
- bool is_axis_data_dirty_;
- // True if the data in |buttons_| has changed since the last time it was
- // accessed.
- bool is_button_data_dirty_;
- // Base time on which all relative timestamps are based.
- const base::TimeTicks time_origin_;
- // Minimum value to use for timestamps from the device.
- const base::TimeTicks time_floor_;
- };
- } // namespace blink
- #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_GAMEPAD_GAMEPAD_H_
|