1424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// found in the LICENSE file. 4424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#ifndef MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 6424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#define MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 7424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 8424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include <set> 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 10424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/synchronization/lock.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "media/base/media_export.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h" 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 15424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)namespace media { 16424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// This class tracks the total number of keypresses based on the OnKeyboardEvent 18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// calls it receives from the client. 19424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// Multiple key down events for the same key are counted as one keypress until 20424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)// the same key is released. 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class MEDIA_EXPORT KeyboardEventCounter { 22424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) public: 23424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) KeyboardEventCounter(); 24424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ~KeyboardEventCounter(); 25424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Resets the count to 0. Must be called on the same thread as 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // OnKeyboardEvent. 28424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void Reset(); 29424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Returns the total number of keypresses since its creation or last Reset() 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // call. Can be called on any thread. 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size_t GetKeyPressCount() const; 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The client should call this method on key down or key up events. 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Must be called on a single thread. 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void OnKeyboardEvent(ui::EventType event, ui::KeyboardCode key_code); 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) private: 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // The set of keys currently held down. 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::set<ui::KeyboardCode> pressed_keys_; 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) size_t total_key_presses_; 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 44424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(KeyboardEventCounter); 45424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}; 46424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 47424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} // namespace media 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#endif // MEDIA_BASE_KEYBOARD_EVENT_COUNTER_H_ 50