1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "config.h"
6 #include "modules/gamepad/GamepadDispatcher.h"
7
8 #include "modules/gamepad/NavigatorGamepad.h"
9 #include "public/platform/Platform.h"
10 #include "wtf/TemporaryChange.h"
11
12 namespace WebCore {
13
instance()14 GamepadDispatcher& GamepadDispatcher::instance()
15 {
16 DEFINE_STATIC_LOCAL(GamepadDispatcher, gamepadDispatcher, ());
17 return gamepadDispatcher;
18 }
19
sampleGamepads(blink::WebGamepads & gamepads)20 void GamepadDispatcher::sampleGamepads(blink::WebGamepads& gamepads)
21 {
22 blink::Platform::current()->sampleGamepads(gamepads);
23 }
24
GamepadDispatcher()25 GamepadDispatcher::GamepadDispatcher()
26 {
27 }
28
~GamepadDispatcher()29 GamepadDispatcher::~GamepadDispatcher()
30 {
31 }
32
didConnectGamepad(unsigned index,const blink::WebGamepad & gamepad)33 void GamepadDispatcher::didConnectGamepad(unsigned index, const blink::WebGamepad& gamepad)
34 {
35 dispatchDidConnectOrDisconnectGamepad(index, gamepad, true);
36 }
37
didDisconnectGamepad(unsigned index,const blink::WebGamepad & gamepad)38 void GamepadDispatcher::didDisconnectGamepad(unsigned index, const blink::WebGamepad& gamepad)
39 {
40 dispatchDidConnectOrDisconnectGamepad(index, gamepad, false);
41 }
42
dispatchDidConnectOrDisconnectGamepad(unsigned index,const blink::WebGamepad & gamepad,bool connected)43 void GamepadDispatcher::dispatchDidConnectOrDisconnectGamepad(unsigned index, const blink::WebGamepad& gamepad, bool connected)
44 {
45 ASSERT(index < blink::WebGamepads::itemsLengthCap);
46 ASSERT(connected == gamepad.connected);
47
48 m_latestChange.pad = gamepad;
49 m_latestChange.index = index;
50 notifyControllers();
51 }
52
startListening()53 void GamepadDispatcher::startListening()
54 {
55 blink::Platform::current()->setGamepadListener(this);
56 }
57
stopListening()58 void GamepadDispatcher::stopListening()
59 {
60 blink::Platform::current()->setGamepadListener(0);
61 }
62
63 } // namespace WebCore
64