|  | // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "ui/events/event_utils.h" | 
|  |  | 
|  | #include <vector> | 
|  |  | 
|  | #include "ui/events/event.h" | 
|  | #include "ui/gfx/display.h" | 
|  |  | 
|  | namespace ui { | 
|  |  | 
|  | // From third_party/WebKit/Source/web/gtk/WebInputEventFactory.cpp: | 
|  | base::char16 GetControlCharacterForKeycode(int windows_key_code, bool shift) { | 
|  | if (windows_key_code >= ui::VKEY_A && | 
|  | windows_key_code <= ui::VKEY_Z) { | 
|  | // ctrl-A ~ ctrl-Z map to \x01 ~ \x1A | 
|  | return windows_key_code - ui::VKEY_A + 1; | 
|  | } | 
|  | if (shift) { | 
|  | // following graphics chars require shift key to input. | 
|  | switch (windows_key_code) { | 
|  | // ctrl-@ maps to \x00 (Null byte) | 
|  | case ui::VKEY_2: | 
|  | return 0; | 
|  | // ctrl-^ maps to \x1E (Record separator, Information separator two) | 
|  | case ui::VKEY_6: | 
|  | return 0x1E; | 
|  | // ctrl-_ maps to \x1F (Unit separator, Information separator one) | 
|  | case ui::VKEY_OEM_MINUS: | 
|  | return 0x1F; | 
|  | // Returns 0 for all other keys to avoid inputting unexpected chars. | 
|  | default: | 
|  | break; | 
|  | } | 
|  | } else { | 
|  | switch (windows_key_code) { | 
|  | // ctrl-[ maps to \x1B (Escape) | 
|  | case ui::VKEY_OEM_4: | 
|  | return 0x1B; | 
|  | // ctrl-\ maps to \x1C (File separator, Information separator four) | 
|  | case ui::VKEY_OEM_5: | 
|  | return 0x1C; | 
|  | // ctrl-] maps to \x1D (Group separator, Information separator three) | 
|  | case ui::VKEY_OEM_6: | 
|  | return 0x1D; | 
|  | // ctrl-Enter maps to \x0A (Line feed) | 
|  | case ui::VKEY_RETURN: | 
|  | return 0x0A; | 
|  | // Returns 0 for all other keys to avoid inputting unexpected chars. | 
|  | default: | 
|  | break; | 
|  | } | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | base::TimeDelta EventTimeForNow() { | 
|  | return base::TimeDelta::FromInternalValue( | 
|  | base::TimeTicks::Now().ToInternalValue()); | 
|  | } | 
|  |  | 
|  | }  // namespace ui |