OLD | NEW |
(Empty) | |
| 1 // Copyright 2017 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 <Cocoa/Cocoa.h> |
| 6 #include "base/strings/sys_string_conversions.h" |
| 7 #include "content/browser/devtools/protocol/native_input_event_builder.h" |
| 8 #include "third_party/WebKit/public/platform/WebInputEvent.h" |
| 9 |
| 10 namespace content { |
| 11 namespace protocol { |
| 12 |
| 13 // Mac requires a native event to emulate key events. This method gives |
| 14 // only crude capabilities (see: crbug.com/667387). |
| 15 // The returned object has a retain count of 1. |
| 16 gfx::NativeEvent NativeInputEventBuilder::CreateEvent( |
| 17 const NativeWebKeyboardEvent& event) { |
| 18 NSEventType type = NSKeyUp; |
| 19 if (event.GetType() == blink::WebInputEvent::kRawKeyDown || |
| 20 event.GetType() == blink::WebInputEvent::kKeyDown) |
| 21 type = NSKeyDown; |
| 22 const blink::WebUChar* textStartAddr = &event.text[0]; |
| 23 const int textLength = |
| 24 std::find(textStartAddr, |
| 25 textStartAddr + NativeWebKeyboardEvent::kTextLengthCap, '\0') - |
| 26 textStartAddr; |
| 27 NSString* character = |
| 28 base::SysUTF16ToNSString(base::string16(textStartAddr, textLength)); |
| 29 int modifiers = event.GetModifiers(); |
| 30 NSUInteger flags = |
| 31 (modifiers & blink::WebInputEvent::kShiftKey ? NSShiftKeyMask : 0) | |
| 32 (modifiers & blink::WebInputEvent::kControlKey ? NSControlKeyMask : 0) | |
| 33 (modifiers & blink::WebInputEvent::kAltKey ? NSAlternateKeyMask : 0) | |
| 34 (modifiers & blink::WebInputEvent::kMetaKey ? NSCommandKeyMask : 0); |
| 35 |
| 36 return [[NSEvent keyEventWithType:type |
| 37 location:NSZeroPoint |
| 38 modifierFlags:flags |
| 39 timestamp:0 |
| 40 windowNumber:0 |
| 41 context:nil |
| 42 characters:character |
| 43 charactersIgnoringModifiers:character |
| 44 isARepeat:NO |
| 45 keyCode:event.native_key_code] retain]; |
| 46 }; |
| 47 |
| 48 } // namespace protocol |
| 49 } // namespace content |
OLD | NEW |