mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
This CL moves KeyboardEvents from the old event model to NewEventHandler. This CL keeps the basic structure of keydown, keypress, keyup events even though that's a bit wacky. As with pointer and gesture events, this CL removes PlatformKeyboardEvent in favor of just using WebKeyboardEvent. I've also made WebKeyboardEvent align more closely with Mojo's keyboard event. The CL does change one important aspect of key event handling: on the web the "keyCode" property of KeyboardEvent changes its meaning depending on whether the event is a keydown or a keypress event. For the former events, keyCode is the "virtual" (i.e., windows) key code where for the latter events, keyCode is the character code. To be more precise, I've renamed keyCode to virtualKeyCode and I've given it a zero (unknown key code) value during keypress events. R=ojan@chromium.org, eseidel@chromium.org Review URL: https://codereview.chromium.org/872233002
85 lines
2.3 KiB
C++
85 lines
2.3 KiB
C++
// Copyright 2015 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 "sky/engine/config.h"
|
|
#include "sky/engine/core/events/KeyboardEvent.h"
|
|
|
|
namespace blink {
|
|
|
|
static AtomicString stringForType(WebInputEvent::Type type)
|
|
{
|
|
if (type == WebInputEvent::KeyDown)
|
|
return EventTypeNames::keydown;
|
|
if (type == WebInputEvent::Char)
|
|
return EventTypeNames::keypress;
|
|
if (type == WebInputEvent::KeyUp)
|
|
return EventTypeNames::keyup;
|
|
ASSERT_NOT_REACHED();
|
|
return AtomicString();
|
|
}
|
|
|
|
static String locationFromModifiers(int modifiers)
|
|
{
|
|
if (modifiers & WebInputEvent::IsKeyPad)
|
|
return "numpad";
|
|
if (modifiers & WebInputEvent::IsLeft)
|
|
return "left";
|
|
if (modifiers & WebInputEvent::IsRight)
|
|
return "right";
|
|
return "standard";
|
|
}
|
|
|
|
KeyboardEvent::~KeyboardEvent()
|
|
{
|
|
}
|
|
|
|
const AtomicString& KeyboardEvent::interfaceName() const
|
|
{
|
|
return EventNames::KeyboardEvent;
|
|
}
|
|
|
|
bool KeyboardEvent::isKeyboardEvent() const
|
|
{
|
|
return true;
|
|
}
|
|
|
|
KeyboardEvent::KeyboardEvent()
|
|
: KeyboardEvent(AtomicString(), KeyboardEventInit())
|
|
{
|
|
}
|
|
|
|
KeyboardEvent::KeyboardEvent(const WebKeyboardEvent& event)
|
|
: Event(stringForType(event.type), true, true)
|
|
, m_key(event.key)
|
|
, m_location(locationFromModifiers(event.modifiers))
|
|
, m_charCode(event.charCode)
|
|
, m_ctrlKey(event.modifiers & WebInputEvent::ControlKey)
|
|
, m_shiftKey(event.modifiers & WebInputEvent::ShiftKey)
|
|
, m_altKey(event.modifiers & WebInputEvent::AltKey)
|
|
, m_metaKey(event.modifiers & WebInputEvent::MetaKey)
|
|
, m_repeat(event.modifiers & WebInputEvent::IsAutoRepeat)
|
|
{
|
|
if (event.type == WebInputEvent::KeyDown || event.type == WebInputEvent::KeyUp) {
|
|
m_charCode = 0;
|
|
} else if (event.type == WebInputEvent::Char) {
|
|
m_key = 0;
|
|
m_location = String();
|
|
}
|
|
}
|
|
|
|
KeyboardEvent::KeyboardEvent(const AtomicString& type, const KeyboardEventInit& initializer)
|
|
: Event(type, initializer)
|
|
, m_key(initializer.key)
|
|
, m_location(initializer.location)
|
|
, m_charCode(initializer.charCode)
|
|
, m_ctrlKey(initializer.ctrlKey)
|
|
, m_shiftKey(initializer.shiftKey)
|
|
, m_altKey(initializer.altKey)
|
|
, m_metaKey(initializer.metaKey)
|
|
, m_repeat(initializer.repeat)
|
|
{
|
|
}
|
|
|
|
} // namespace blink
|