| Index: webkit/glue/plugins/plugin_web_event_converter_mac.mm
|
| ===================================================================
|
| --- webkit/glue/plugins/plugin_web_event_converter_mac.mm (revision 69426)
|
| +++ webkit/glue/plugins/plugin_web_event_converter_mac.mm (working copy)
|
| @@ -1,359 +0,0 @@
|
| -// Copyright (c) 2010 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.
|
| -
|
| -#import <Cocoa/Cocoa.h>
|
| -
|
| -#include "base/logging.h"
|
| -#include "webkit/glue/plugins/plugin_web_event_converter_mac.h"
|
| -#include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
|
| -
|
| -using WebKit::WebInputEvent;
|
| -using WebKit::WebKeyboardEvent;
|
| -using WebKit::WebMouseEvent;
|
| -using WebKit::WebMouseWheelEvent;
|
| -
|
| -namespace {
|
| -
|
| -// Returns true if the caps lock flag should be set for the given event.
|
| -bool CapsLockIsActive(const WebInputEvent& event) {
|
| - // Only key events have accurate information for the caps lock flag; see
|
| - // <https://bugs.webkit.org/show_bug.cgi?id=46518>.
|
| - // For other types, use the live state.
|
| - if (WebInputEvent::isKeyboardEventType(event.type))
|
| - return (event.modifiers & WebInputEvent::CapsLockOn) != 0;
|
| - else
|
| - return ([[NSApp currentEvent] modifierFlags] & NSAlphaShiftKeyMask) != 0;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -#pragma mark -
|
| -
|
| -#ifndef NP_NO_CARBON
|
| -
|
| -// Converter implementation for the Carbon event model.
|
| -class CarbonPluginWebEventConverter : public PluginWebEventConverter {
|
| - public:
|
| - CarbonPluginWebEventConverter() {}
|
| - virtual ~CarbonPluginWebEventConverter() {}
|
| -
|
| - virtual bool InitWithEvent(const WebInputEvent& web_event);
|
| -
|
| - virtual void* plugin_event() { return &carbon_event_; }
|
| -
|
| - protected:
|
| - virtual bool ConvertKeyboardEvent(const WebKeyboardEvent& key_event);
|
| - virtual bool ConvertMouseEvent(const WebMouseEvent& mouse_event);
|
| - virtual bool ConvertMouseWheelEvent(const WebMouseWheelEvent& wheel_event);
|
| -
|
| - private:
|
| - // Returns the Carbon translation of web_event's modifiers.
|
| - static EventModifiers CarbonModifiers(const WebInputEvent& web_event);
|
| -
|
| - NPEvent carbon_event_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CarbonPluginWebEventConverter);
|
| -};
|
| -
|
| -bool CarbonPluginWebEventConverter::InitWithEvent(
|
| - const WebInputEvent& web_event) {
|
| - memset(&carbon_event_, 0, sizeof(carbon_event_));
|
| - // Set the fields common to all event types.
|
| - carbon_event_.when = TickCount();
|
| - carbon_event_.modifiers |= CarbonModifiers(web_event);
|
| -
|
| - return PluginWebEventConverter::InitWithEvent(web_event);
|
| -}
|
| -
|
| -bool CarbonPluginWebEventConverter::ConvertKeyboardEvent(
|
| - const WebKeyboardEvent& key_event) {
|
| - // TODO: Figure out how to handle Unicode input to plugins, if that's
|
| - // even possible in the NPAPI Carbon event model.
|
| - carbon_event_.message = (key_event.nativeKeyCode << 8) & keyCodeMask;
|
| - carbon_event_.message |= key_event.text[0] & charCodeMask;
|
| - carbon_event_.modifiers |= btnState;
|
| -
|
| - switch (key_event.type) {
|
| - case WebInputEvent::KeyDown:
|
| - if (key_event.modifiers & WebInputEvent::IsAutoRepeat)
|
| - carbon_event_.what = autoKey;
|
| - else
|
| - carbon_event_.what = keyDown;
|
| - return true;
|
| - case WebInputEvent::KeyUp:
|
| - carbon_event_.what = keyUp;
|
| - return true;
|
| - case WebInputEvent::RawKeyDown:
|
| - case WebInputEvent::Char:
|
| - // May be used eventually for IME, but currently not needed.
|
| - return false;
|
| - default:
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool CarbonPluginWebEventConverter::ConvertMouseEvent(
|
| - const WebMouseEvent& mouse_event) {
|
| - carbon_event_.where.h = mouse_event.globalX;
|
| - carbon_event_.where.v = mouse_event.globalY;
|
| -
|
| - // Default to "button up"; override this for mouse down events below.
|
| - carbon_event_.modifiers |= btnState;
|
| -
|
| - switch (mouse_event.button) {
|
| - case WebMouseEvent::ButtonLeft:
|
| - break;
|
| - case WebMouseEvent::ButtonMiddle:
|
| - carbon_event_.modifiers |= cmdKey;
|
| - break;
|
| - case WebMouseEvent::ButtonRight:
|
| - carbon_event_.modifiers |= controlKey;
|
| - break;
|
| - default:
|
| - NOTIMPLEMENTED();
|
| - }
|
| - switch (mouse_event.type) {
|
| - case WebInputEvent::MouseMove:
|
| - carbon_event_.what = nullEvent;
|
| - return true;
|
| - case WebInputEvent::MouseLeave:
|
| - case WebInputEvent::MouseEnter:
|
| - carbon_event_.what = NPEventType_AdjustCursorEvent;
|
| - return true;
|
| - case WebInputEvent::MouseDown:
|
| - carbon_event_.modifiers &= ~btnState;
|
| - carbon_event_.what = mouseDown;
|
| - return true;
|
| - case WebInputEvent::MouseUp:
|
| - carbon_event_.what = mouseUp;
|
| - return true;
|
| - default:
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool CarbonPluginWebEventConverter::ConvertMouseWheelEvent(
|
| - const WebMouseWheelEvent& wheel_event) {
|
| - return false; // The Carbon NPAPI event model has no "mouse wheel" concept.
|
| -}
|
| -
|
| -EventModifiers CarbonPluginWebEventConverter::CarbonModifiers(
|
| - const WebInputEvent& web_event) {
|
| - NSInteger modifiers = 0;
|
| - if (web_event.modifiers & WebInputEvent::ControlKey)
|
| - modifiers |= controlKey;
|
| - if (web_event.modifiers & WebInputEvent::ShiftKey)
|
| - modifiers |= shiftKey;
|
| - if (web_event.modifiers & WebInputEvent::AltKey)
|
| - modifiers |= optionKey;
|
| - if (web_event.modifiers & WebInputEvent::MetaKey)
|
| - modifiers |= cmdKey;
|
| - if (CapsLockIsActive(web_event))
|
| - modifiers |= alphaLock;
|
| - return modifiers;
|
| -}
|
| -
|
| -#endif // !NP_NO_CARBON
|
| -
|
| -#pragma mark -
|
| -
|
| -// Converter implementation for the Cocoa event model.
|
| -class CocoaPluginWebEventConverter : public PluginWebEventConverter {
|
| -public:
|
| - CocoaPluginWebEventConverter() {}
|
| - virtual ~CocoaPluginWebEventConverter() {}
|
| -
|
| - virtual bool InitWithEvent(const WebInputEvent& web_event);
|
| -
|
| - virtual void* plugin_event() { return &cocoa_event_; }
|
| -
|
| -protected:
|
| - virtual bool ConvertKeyboardEvent(const WebKeyboardEvent& key_event);
|
| - virtual bool ConvertMouseEvent(const WebMouseEvent& mouse_event);
|
| - virtual bool ConvertMouseWheelEvent(const WebMouseWheelEvent& wheel_event);
|
| -
|
| -private:
|
| - // Returns the Cocoa translation of web_event's modifiers.
|
| - static NSUInteger CocoaModifiers(const WebInputEvent& web_event);
|
| -
|
| - // Returns true if the given key is a modifier key.
|
| - static bool KeyIsModifier(int native_key_code);
|
| -
|
| - NPCocoaEvent cocoa_event_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(CocoaPluginWebEventConverter);
|
| -};
|
| -
|
| -bool CocoaPluginWebEventConverter::InitWithEvent(
|
| - const WebInputEvent& web_event) {
|
| - memset(&cocoa_event_, 0, sizeof(cocoa_event_));
|
| - return PluginWebEventConverter::InitWithEvent(web_event);
|
| -}
|
| -
|
| -bool CocoaPluginWebEventConverter::ConvertKeyboardEvent(
|
| - const WebKeyboardEvent& key_event) {
|
| - cocoa_event_.data.key.keyCode = key_event.nativeKeyCode;
|
| -
|
| - cocoa_event_.data.key.modifierFlags |= CocoaModifiers(key_event);
|
| -
|
| - // Modifier keys have their own event type, and don't get character or
|
| - // repeat data.
|
| - if (KeyIsModifier(key_event.nativeKeyCode)) {
|
| - cocoa_event_.type = NPCocoaEventFlagsChanged;
|
| - return true;
|
| - }
|
| -
|
| - cocoa_event_.data.key.characters = reinterpret_cast<NPNSString*>(
|
| - [NSString stringWithFormat:@"%S", key_event.text]);
|
| - cocoa_event_.data.key.charactersIgnoringModifiers =
|
| - reinterpret_cast<NPNSString*>(
|
| - [NSString stringWithFormat:@"%S", key_event.unmodifiedText]);
|
| -
|
| - if (key_event.modifiers & WebInputEvent::IsAutoRepeat)
|
| - cocoa_event_.data.key.isARepeat = true;
|
| -
|
| - switch (key_event.type) {
|
| - case WebInputEvent::KeyDown:
|
| - cocoa_event_.type = NPCocoaEventKeyDown;
|
| - return true;
|
| - case WebInputEvent::KeyUp:
|
| - cocoa_event_.type = NPCocoaEventKeyUp;
|
| - return true;
|
| - case WebInputEvent::RawKeyDown:
|
| - case WebInputEvent::Char:
|
| - // May be used eventually for IME, but currently not needed.
|
| - return false;
|
| - default:
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool CocoaPluginWebEventConverter::ConvertMouseEvent(
|
| - const WebMouseEvent& mouse_event) {
|
| - cocoa_event_.data.mouse.pluginX = mouse_event.x;
|
| - cocoa_event_.data.mouse.pluginY = mouse_event.y;
|
| - cocoa_event_.data.mouse.modifierFlags |= CocoaModifiers(mouse_event);
|
| - cocoa_event_.data.mouse.clickCount = mouse_event.clickCount;
|
| - switch (mouse_event.button) {
|
| - case WebMouseEvent::ButtonLeft:
|
| - cocoa_event_.data.mouse.buttonNumber = 0;
|
| - break;
|
| - case WebMouseEvent::ButtonMiddle:
|
| - cocoa_event_.data.mouse.buttonNumber = 2;
|
| - break;
|
| - case WebMouseEvent::ButtonRight:
|
| - cocoa_event_.data.mouse.buttonNumber = 1;
|
| - break;
|
| - default:
|
| - cocoa_event_.data.mouse.buttonNumber = mouse_event.button;
|
| - break;
|
| - }
|
| - switch (mouse_event.type) {
|
| - case WebInputEvent::MouseDown:
|
| - cocoa_event_.type = NPCocoaEventMouseDown;
|
| - return true;
|
| - case WebInputEvent::MouseUp:
|
| - cocoa_event_.type = NPCocoaEventMouseUp;
|
| - return true;
|
| - case WebInputEvent::MouseMove: {
|
| - bool mouse_is_down =
|
| - (mouse_event.modifiers & WebInputEvent::LeftButtonDown) ||
|
| - (mouse_event.modifiers & WebInputEvent::RightButtonDown) ||
|
| - (mouse_event.modifiers & WebInputEvent::MiddleButtonDown);
|
| - cocoa_event_.type = mouse_is_down ? NPCocoaEventMouseDragged
|
| - : NPCocoaEventMouseMoved;
|
| - return true;
|
| - }
|
| - case WebInputEvent::MouseEnter:
|
| - cocoa_event_.type = NPCocoaEventMouseEntered;
|
| - return true;
|
| - case WebInputEvent::MouseLeave:
|
| - cocoa_event_.type = NPCocoaEventMouseExited;
|
| - return true;
|
| - default:
|
| - NOTREACHED();
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -bool CocoaPluginWebEventConverter::ConvertMouseWheelEvent(
|
| - const WebMouseWheelEvent& wheel_event) {
|
| - cocoa_event_.type = NPCocoaEventScrollWheel;
|
| - cocoa_event_.data.mouse.pluginX = wheel_event.x;
|
| - cocoa_event_.data.mouse.pluginY = wheel_event.y;
|
| - cocoa_event_.data.mouse.modifierFlags |= CocoaModifiers(wheel_event);
|
| - cocoa_event_.data.mouse.deltaX = wheel_event.deltaX;
|
| - cocoa_event_.data.mouse.deltaY = wheel_event.deltaY;
|
| - return true;
|
| -}
|
| -
|
| -NSUInteger CocoaPluginWebEventConverter::CocoaModifiers(
|
| - const WebInputEvent& web_event) {
|
| - NSInteger modifiers = 0;
|
| - if (web_event.modifiers & WebInputEvent::ControlKey)
|
| - modifiers |= NSControlKeyMask;
|
| - if (web_event.modifiers & WebInputEvent::ShiftKey)
|
| - modifiers |= NSShiftKeyMask;
|
| - if (web_event.modifiers & WebInputEvent::AltKey)
|
| - modifiers |= NSAlternateKeyMask;
|
| - if (web_event.modifiers & WebInputEvent::MetaKey)
|
| - modifiers |= NSCommandKeyMask;
|
| - if (CapsLockIsActive(web_event))
|
| - modifiers |= NSAlphaShiftKeyMask;
|
| - return modifiers;
|
| -}
|
| -
|
| -bool CocoaPluginWebEventConverter::KeyIsModifier(int native_key_code) {
|
| - switch (native_key_code) {
|
| - case 55: // Left command
|
| - case 54: // Right command
|
| - case 58: // Left option
|
| - case 61: // Right option
|
| - case 59: // Left control
|
| - case 62: // Right control
|
| - case 56: // Left shift
|
| - case 60: // Right shift
|
| - case 57: // Caps lock
|
| - return true;
|
| - default:
|
| - return false;
|
| - }
|
| -}
|
| -
|
| -#pragma mark -
|
| -
|
| -bool PluginWebEventConverter::InitWithEvent(const WebInputEvent& web_event) {
|
| - if (web_event.type == WebInputEvent::MouseWheel) {
|
| - return ConvertMouseWheelEvent(
|
| - *static_cast<const WebMouseWheelEvent*>(&web_event));
|
| - } else if (WebInputEvent::isMouseEventType(web_event.type)) {
|
| - return ConvertMouseEvent(*static_cast<const WebMouseEvent*>(&web_event));
|
| - } else if (WebInputEvent::isKeyboardEventType(web_event.type)) {
|
| - return ConvertKeyboardEvent(
|
| - *static_cast<const WebKeyboardEvent*>(&web_event));
|
| - }
|
| - DLOG(WARNING) << "Unknown event type " << web_event.type;
|
| - return false;
|
| -}
|
| -
|
| -#pragma mark -
|
| -
|
| -PluginWebEventConverter*
|
| - PluginWebEventConverterFactory::CreateConverterForModel(
|
| - NPEventModel event_model) {
|
| - switch (event_model) {
|
| - case NPEventModelCocoa:
|
| - return new CocoaPluginWebEventConverter();
|
| -#ifndef NP_NO_CARBON
|
| - case NPEventModelCarbon:
|
| - return new CarbonPluginWebEventConverter();
|
| -#endif
|
| - default:
|
| - NOTIMPLEMENTED();
|
| - return NULL;
|
| - }
|
| -}
|
|
|