summaryrefslogtreecommitdiff
path: root/Source/WebCore/dom/DeviceMotionEvent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/dom/DeviceMotionEvent.cpp')
-rw-r--r--Source/WebCore/dom/DeviceMotionEvent.cpp67
1 files changed, 62 insertions, 5 deletions
diff --git a/Source/WebCore/dom/DeviceMotionEvent.cpp b/Source/WebCore/dom/DeviceMotionEvent.cpp
index e0b49a8c3..d6c858ac8 100644
--- a/Source/WebCore/dom/DeviceMotionEvent.cpp
+++ b/Source/WebCore/dom/DeviceMotionEvent.cpp
@@ -10,10 +10,10 @@
* 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 COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* 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
@@ -27,7 +27,6 @@
#include "DeviceMotionEvent.h"
#include "DeviceMotionData.h"
-#include "EventNames.h"
namespace WebCore {
@@ -46,13 +45,71 @@ DeviceMotionEvent::DeviceMotionEvent(const AtomicString& eventType, DeviceMotion
{
}
-void DeviceMotionEvent::initDeviceMotionEvent(const AtomicString& type, bool bubbles, bool cancelable, DeviceMotionData* deviceMotionData)
+static std::optional<DeviceMotionEvent::Acceleration> convert(const DeviceMotionData::Acceleration* acceleration)
+{
+ if (!acceleration)
+ return std::nullopt;
+
+ return DeviceMotionEvent::Acceleration { acceleration->x(), acceleration->y(), acceleration->z() };
+}
+
+static std::optional<DeviceMotionEvent::RotationRate> convert(const DeviceMotionData::RotationRate* rotationRate)
+{
+ if (!rotationRate)
+ return std::nullopt;
+
+ return DeviceMotionEvent::RotationRate { rotationRate->alpha(), rotationRate->beta(), rotationRate->gamma() };
+}
+
+static RefPtr<DeviceMotionData::Acceleration> convert(std::optional<DeviceMotionEvent::Acceleration>&& acceleration)
+{
+ if (!acceleration)
+ return nullptr;
+
+ if (!acceleration->x && !acceleration->y && !acceleration->z)
+ return nullptr;
+
+ return DeviceMotionData::Acceleration::create(acceleration->x, acceleration->y, acceleration->z);
+}
+
+static RefPtr<DeviceMotionData::RotationRate> convert(std::optional<DeviceMotionEvent::RotationRate>&& rotationRate)
+{
+ if (!rotationRate)
+ return nullptr;
+
+ if (!rotationRate->alpha && !rotationRate->beta && !rotationRate->gamma)
+ return nullptr;
+
+ return DeviceMotionData::RotationRate::create(rotationRate->alpha, rotationRate->beta, rotationRate->gamma);
+}
+
+std::optional<DeviceMotionEvent::Acceleration> DeviceMotionEvent::acceleration() const
+{
+ return convert(m_deviceMotionData->acceleration());
+}
+
+std::optional<DeviceMotionEvent::Acceleration> DeviceMotionEvent::accelerationIncludingGravity() const
+{
+ return convert(m_deviceMotionData->accelerationIncludingGravity());
+}
+
+std::optional<DeviceMotionEvent::RotationRate> DeviceMotionEvent::rotationRate() const
+{
+ return convert(m_deviceMotionData->rotationRate());
+}
+
+std::optional<double> DeviceMotionEvent::interval() const
+{
+ return m_deviceMotionData->interval();
+}
+
+void DeviceMotionEvent::initDeviceMotionEvent(const AtomicString& type, bool bubbles, bool cancelable, std::optional<DeviceMotionEvent::Acceleration>&& acceleration, std::optional<DeviceMotionEvent::Acceleration>&& accelerationIncludingGravity, std::optional<DeviceMotionEvent::RotationRate>&& rotationRate, std::optional<double> interval)
{
if (dispatched())
return;
initEvent(type, bubbles, cancelable);
- m_deviceMotionData = deviceMotionData;
+ m_deviceMotionData = DeviceMotionData::create(convert(WTFMove(acceleration)), convert(WTFMove(accelerationIncludingGravity)), convert(WTFMove(rotationRate)), interval);
}
EventInterface DeviceMotionEvent::eventInterface() const