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 blink { 13 14 GamepadDispatcher& GamepadDispatcher::instance() 15 { 16 DEFINE_STATIC_LOCAL(GamepadDispatcher, gamepadDispatcher, ()); 17 return gamepadDispatcher; 18 } 19 20 void GamepadDispatcher::sampleGamepads(WebGamepads& gamepads) 21 { 22 Platform::current()->sampleGamepads(gamepads); 23 } 24 25 GamepadDispatcher::GamepadDispatcher() 26 { 27 } 28 29 GamepadDispatcher::~GamepadDispatcher() 30 { 31 } 32 33 void GamepadDispatcher::didConnectGamepad(unsigned index, const WebGamepad& gamepad) 34 { 35 dispatchDidConnectOrDisconnectGamepad(index, gamepad, true); 36 } 37 38 void GamepadDispatcher::didDisconnectGamepad(unsigned index, const WebGamepad& gamepad) 39 { 40 dispatchDidConnectOrDisconnectGamepad(index, gamepad, false); 41 } 42 43 void GamepadDispatcher::dispatchDidConnectOrDisconnectGamepad(unsigned index, const WebGamepad& gamepad, bool connected) 44 { 45 ASSERT(index < WebGamepads::itemsLengthCap); 46 ASSERT(connected == gamepad.connected); 47 48 m_latestChange.pad = gamepad; 49 m_latestChange.index = index; 50 notifyControllers(); 51 } 52 53 void GamepadDispatcher::startListening() 54 { 55 Platform::current()->startListening(WebPlatformEventGamepad, this); 56 } 57 58 void GamepadDispatcher::stopListening() 59 { 60 Platform::current()->stopListening(WebPlatformEventGamepad); 61 } 62 63 } // namespace blink 64