Index: Source/modules/gamepad/NavigatorGamepad.cpp |
diff --git a/Source/modules/gamepad/NavigatorGamepad.cpp b/Source/modules/gamepad/NavigatorGamepad.cpp |
index 8aa04555f93f958a5b2d8aefda2827064902f3e8..12cf8160a9dcd7fb9d8954f00625bdd774ace8ec 100644 |
--- a/Source/modules/gamepad/NavigatorGamepad.cpp |
+++ b/Source/modules/gamepad/NavigatorGamepad.cpp |
@@ -28,11 +28,43 @@ |
#include "core/frame/Navigator.h" |
#include "modules/gamepad/GamepadList.h" |
+#include "modules/gamepad/WebKitGamepadList.h" |
#include "public/platform/Platform.h" |
#include "wtf/PassOwnPtr.h" |
namespace WebCore { |
+static void sampleGamepad(unsigned index, GamepadBase* gamepad, const blink::WebGamepad& webGamepad) |
Inactive
2014/03/06 02:54:00
nit: gamedpad would be passed by reference here to
|
+{ |
+ gamepad->id(webGamepad.id); |
+ gamepad->index(index); |
+ gamepad->connected(webGamepad.connected); |
+ gamepad->timestamp(webGamepad.timestamp); |
+ gamepad->mapping(webGamepad.mapping); |
+ gamepad->axes(webGamepad.axesLength, webGamepad.axes); |
+ gamepad->buttons(webGamepad.buttonsLength, webGamepad.buttons); |
+} |
+ |
+static void sampleWebKitGamepads(WebKitGamepadList* into) |
+{ |
+ blink::WebGamepads gamepads; |
+ |
+ blink::Platform::current()->sampleGamepads(gamepads); |
+ |
+ for (unsigned i = 0; i < blink::WebGamepads::itemsLengthCap; ++i) { |
+ blink::WebGamepad& webGamepad = gamepads.items[i]; |
+ if (i < gamepads.length && webGamepad.connected) { |
+ RefPtrWillBeRawPtr<WebKitGamepad> gamepad = into->item(i); |
+ if (!gamepad) |
+ gamepad = WebKitGamepad::create(); |
+ sampleGamepad(i, gamepad.get(), webGamepad); |
Inactive
2014/03/06 02:54:00
nit: *gamepad (see comment above)
|
+ into->set(i, gamepad); |
+ } else { |
+ into->set(i, nullptr); |
+ } |
+ } |
+} |
+ |
static void sampleGamepads(GamepadList* into) |
{ |
blink::WebGamepads gamepads; |
@@ -45,15 +77,7 @@ static void sampleGamepads(GamepadList* into) |
RefPtrWillBeRawPtr<Gamepad> gamepad = into->item(i); |
if (!gamepad) |
gamepad = Gamepad::create(); |
- gamepad->id(webGamepad.id); |
- gamepad->index(i); |
- gamepad->connected(webGamepad.connected); |
- gamepad->timestamp(webGamepad.timestamp); |
-#if defined(ENABLE_NEW_GAMEPAD_API) |
- gamepad->mapping(webGamepad.mapping); |
-#endif |
- gamepad->axes(webGamepad.axesLength, webGamepad.axes); |
- gamepad->buttons(webGamepad.buttonsLength, webGamepad.buttons); |
+ sampleGamepad(i, gamepad.get(), webGamepad); |
into->set(i, gamepad); |
} else { |
into->set(i, nullptr); |
@@ -63,10 +87,12 @@ static void sampleGamepads(GamepadList* into) |
NavigatorGamepad::NavigatorGamepad() |
{ |
+ |
} |
NavigatorGamepad::~NavigatorGamepad() |
{ |
+ |
} |
const char* NavigatorGamepad::supplementName() |
@@ -84,11 +110,24 @@ NavigatorGamepad& NavigatorGamepad::from(Navigator& navigator) |
return *supplement; |
} |
-GamepadList* NavigatorGamepad::webkitGetGamepads(Navigator& navigator) |
+WebKitGamepadList* NavigatorGamepad::webkitGetGamepads(Navigator& navigator) |
+{ |
+ return NavigatorGamepad::from(navigator).webkitGamepads(); |
+} |
+ |
+GamepadList* NavigatorGamepad::getGamepads(Navigator& navigator) |
{ |
return NavigatorGamepad::from(navigator).gamepads(); |
} |
+WebKitGamepadList* NavigatorGamepad::webkitGamepads() |
+{ |
+ if (!m_webkitGamepads) |
+ m_webkitGamepads = WebKitGamepadList::create(); |
+ sampleWebKitGamepads(m_webkitGamepads.get()); |
+ return m_webkitGamepads.get(); |
+} |
+ |
GamepadList* NavigatorGamepad::gamepads() |
{ |
if (!m_gamepads) |