/* * Copyright (C) 2006, 2007 Apple, Inc. All rights reserved. * Copyright (C) 2012 Google, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "third_party/blink/renderer/core/editing/editing_behavior.h" #include "build/build_config.h" #include "third_party/blink/public/common/input/web_input_event.h" #include "third_party/blink/public/web/web_settings.h" #include "third_party/blink/renderer/core/events/keyboard_event.h" #include "third_party/blink/renderer/platform/keyboard_codes.h" #include "third_party/blink/renderer/platform/text/writing_mode_utils.h" namespace blink { namespace { // // The below code was adapted from the WebKit file webview.cpp // const unsigned kCtrlKey = …; const unsigned kAltKey = …; const unsigned kShiftKey = …; const unsigned kMetaKey = …; #if BUILDFLAG(IS_MAC) // Aliases for the generic key defintions to make kbd shortcuts definitions more // readable on OS X. const unsigned kOptionKey = kAltKey; // Do not use this constant for anything but cursor movement commands. Keys // with cmd set have their |isSystemKey| bit set, so chances are the shortcut // will not be executed. Another, less important, reason is that shortcuts // defined in the layoutObject do not blink the menu item that they triggered. // See http://crbug.com/25856 and the bugs linked from there for details. const unsigned kCommandKey = kMetaKey; #endif // Keys with special meaning. These will be delegated to the editor using // the execCommand() method struct KeyboardCodeKeyDownEntry { … }; struct KeyboardCodeKeyPressEntry { … }; // DomKey has a broader range than KeyboardCode, we need DomKey to handle some // special keys. // Note: We cannot use DomKey for printable keys since it may vary based on // locale. struct DomKeyKeyDownEntry { … }; #if BUILDFLAG(IS_MAC) #define OPTION_OR_CTRL_KEY … #else #define OPTION_OR_CTRL_KEY … #endif // Key bindings with command key on Mac and alt key on other platforms are // marked as system key events and will be ignored (with the exception // of Command-B and Command-I) so they shouldn't be added here. const KeyboardCodeKeyDownEntry kKeyboardCodeKeyDownEntries[] = …; const KeyboardCodeKeyPressEntry kKeyboardCodeKeyPressEntries[] = …; const DomKeyKeyDownEntry kDomKeyKeyDownEntries[] = …; #undef OPTION_OR_CTRL_KEY const char* LookupCommandNameFromDomKeyKeyDown(const String& key, unsigned modifiers) { … } const int kVkeyForwardChar = …; const int kVkeyBackwardChar = …; const int kVkeyNextLine = …; const int kVkeyPreviousLine = …; int TransposeArrowKey(int key_code, WritingMode writing_mode) { … } } // anonymous namespace const char* EditingBehavior::InterpretKeyEvent(const KeyboardEvent& event, WritingMode writing_mode) const { … } bool EditingBehavior::ShouldInsertCharacter(const KeyboardEvent& event) const { … } } // namespace blink