Index: ui/events/cocoa/events_mac.mm |
diff --git a/ui/events/events_stub.cc b/ui/events/cocoa/events_mac.mm |
similarity index 44% |
copy from ui/events/events_stub.cc |
copy to ui/events/cocoa/events_mac.mm |
index bece37acbc94fdc815e97117f29f7f3a35adc685..c5caf791b85e5e6ed1b5a4b8ef1fbe12b098d339 100644 |
--- a/ui/events/events_stub.cc |
+++ b/ui/events/cocoa/events_mac.mm |
@@ -1,43 +1,96 @@ |
-// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Copyright 2014 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 <Cocoa/Cocoa.h> |
+ |
#include "base/logging.h" |
#include "base/time/time.h" |
#include "build/build_config.h" |
+#include "ui/events/cocoa/cocoa_event_utils.h" |
#include "ui/events/event_utils.h" |
+#import "ui/events/keycodes/keyboard_code_conversion_mac.h" |
#include "ui/gfx/point.h" |
#include "ui/gfx/vector2d.h" |
namespace ui { |
-// Stub implementations of platform-specific methods in events_util.h, built |
-// on platform sthat currently do not have a complete implementation of events. |
- |
void UpdateDeviceList() { |
NOTIMPLEMENTED(); |
} |
EventType EventTypeFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
+ NSEventType type = [native_event type]; |
+ switch (type) { |
+ case NSKeyDown: |
+ return ET_KEY_PRESSED; |
+ case NSKeyUp: |
+ return ET_KEY_RELEASED; |
+ case NSLeftMouseDown: |
+ case NSRightMouseDown: |
+ case NSOtherMouseDown: |
+ return ET_MOUSE_PRESSED; |
+ case NSLeftMouseUp: |
+ case NSRightMouseUp: |
+ case NSOtherMouseUp: |
+ return ET_MOUSE_RELEASED; |
+ case NSLeftMouseDragged: |
+ case NSRightMouseDragged: |
+ case NSOtherMouseDragged: |
+ return ET_MOUSE_DRAGGED; |
+ case NSMouseMoved: |
+ case NSScrollWheel: |
+ return ET_MOUSEWHEEL; |
+ case NSMouseEntered: |
+ return ET_MOUSE_ENTERED; |
+ case NSMouseExited: |
+ return ET_MOUSE_EXITED; |
+ case NSEventTypeSwipe: |
+ return ET_GESTURE_MULTIFINGER_SWIPE; |
sadrul
2014/04/24 19:47:12
MULTIFINGER_SWIPE currently represent multi-finger
tapted
2014/04/25 03:44:55
Done.
|
+ case NSFlagsChanged: |
+ case NSAppKitDefined: |
+ case NSSystemDefined: |
+ case NSApplicationDefined: |
+ case NSPeriodic: |
+ case NSCursorUpdate: |
+ case NSTabletPoint: |
+ case NSTabletProximity: |
+ case NSEventTypeGesture: |
+ case NSEventTypeMagnify: |
+ case NSEventTypeRotate: |
+ case NSEventTypeBeginGesture: |
+ case NSEventTypeEndGesture: |
+ NOTIMPLEMENTED() << type; |
+ break; |
+ default: |
+ break; |
+ } |
return ET_UNKNOWN; |
} |
-#if !defined(OS_MACOSX) |
-int EventFlagsFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return 0; |
+int EventFlagsFromNative(const base::NativeEvent& event) { |
+ NSUInteger modifiers = [event modifierFlags]; |
+ return EventFlagsFromNSEventWithModifiers(event, modifiers); |
} |
-#endif |
base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return base::TimeDelta(); |
+ NSTimeInterval since_system_startup = [native_event timestamp]; |
+ int64_t seconds = since_system_startup; |
+ since_system_startup -= seconds; |
+ int64_t microseconds = since_system_startup * 1000000; |
+ return base::TimeDelta::FromSeconds(seconds) + |
+ base::TimeDelta::FromMicroseconds(microseconds); |
} |
gfx::Point EventLocationFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return gfx::Point(); |
+ if (![native_event window]) { |
+ NOTIMPLEMENTED(); // Point will be in screen coordinates. |
sadrul
2014/04/24 19:47:12
return after this?
tapted
2014/04/25 03:44:55
Done - now returns (0,0) rather than relying on [n
|
+ } |
+ NSPoint location = [native_event locationInWindow]; |
+ return gfx::Point(location.x, |
+ NSHeight([[native_event window] frame]) - location.y); |
} |
gfx::Point EventSystemLocationFromNative( |
@@ -53,13 +106,41 @@ int EventButtonFromNative(const base::NativeEvent& native_event) { |
int GetChangedMouseButtonFlagsFromNative( |
const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
+ NSEventType type = [native_event type]; |
+ switch (type) { |
+ case NSLeftMouseDown: |
+ case NSLeftMouseUp: |
+ case NSLeftMouseDragged: |
+ return EF_LEFT_MOUSE_BUTTON; |
+ case NSRightMouseDown: |
+ case NSRightMouseUp: |
+ case NSRightMouseDragged: |
+ return EF_RIGHT_MOUSE_BUTTON; |
+ case NSOtherMouseDown: |
+ case NSOtherMouseUp: |
+ case NSOtherMouseDragged: |
+ return EF_MIDDLE_MOUSE_BUTTON; |
+ } |
return 0; |
} |
-gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return gfx::Vector2d(); |
+gfx::Vector2d GetMouseWheelOffset(const base::NativeEvent& event) { |
+ // Empirically, a value of 0.1 is typical for one mousewheel click. Positive |
+ // values when scrolling up or to the left. Scrolling quickly results in a |
+ // higher delta per click, up to about 15.0. (Quartz documentation suggests |
+ // +/-10). |
+ // Multiply by 1000 to vaguely approximate WHEEL_DELTA on Windows (120). |
+ const CGFloat kWheelDeltaMultiplier = 1000; |
+ return gfx::Vector2d(kWheelDeltaMultiplier * [event deltaX], |
+ kWheelDeltaMultiplier * [event deltaY]); |
+} |
+ |
+base::NativeEvent CopyNativeEvent(const base::NativeEvent& event) { |
+ return [event copy]; |
+} |
+ |
+void ReleaseCopiedNativeEvent(const base::NativeEvent& event) { |
+ [event release]; |
} |
void ClearTouchIdIfReleased(const base::NativeEvent& native_event) { |
@@ -133,13 +214,11 @@ bool IsTouchpadEvent(const base::NativeEvent& native_event) { |
} |
KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return static_cast<KeyboardCode>(0); |
+ return KeyboardCodeFromNSEvent(native_event); |
} |
const char* CodeFromNative(const base::NativeEvent& native_event) { |
- NOTIMPLEMENTED(); |
- return ""; |
+ return CodeFromNSEvent(native_event); |
} |
} // namespace ui |