Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(348)

Unified Diff: ui/events/cocoa/events_mac.mm

Issue 251493002: MacViews: Implement basic NSEvent -> ui::Event conversion for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/events/cocoa/events_mac.mm
diff --git a/ui/events/cocoa/events_mac.mm b/ui/events/cocoa/events_mac.mm
new file mode 100644
index 0000000000000000000000000000000000000000..cca24ac0d3c85c9ecd4e64224fd0ac4f7c3a4364
--- /dev/null
+++ b/ui/events/cocoa/events_mac.mm
@@ -0,0 +1,225 @@
+// 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 {
+
+void UpdateDeviceList() {
+ NOTIMPLEMENTED();
+}
+
+EventType EventTypeFromNative(const base::NativeEvent& native_event) {
+ 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_SCROLL_FLING_START;
+ 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:
Robert Sesek 2014/04/25 15:39:23 Shouldn't the default case also be NOTIMPLEMENTED(
tapted 2014/04/28 07:39:49 events_win and events_x do not do this. However, I
+ break;
+ }
+ return ET_UNKNOWN;
+}
+
+int EventFlagsFromNative(const base::NativeEvent& event) {
+ NSUInteger modifiers = [event modifierFlags];
+ return EventFlagsFromNSEventWithModifiers(event, modifiers);
+}
+
+base::TimeDelta EventTimeFromNative(const base::NativeEvent& native_event) {
Robert Sesek 2014/04/25 15:39:23 It's not clear to me what this function is trying
tapted 2014/04/28 07:39:49 It's a somewhat paranoid equivalent of return bas
Robert Sesek 2014/04/28 18:51:32 That makes sense. I don't think it needs to be tha
+ 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) {
+ if (![native_event window]) {
+ NOTIMPLEMENTED(); // Point will be in screen coordinates.
+ return gfx::Point(0, 0);
sadrul 2014/04/25 11:40:28 You can just do gfx::Point()
tapted 2014/04/28 07:39:49 Done.
+ }
+ NSPoint location = [native_event locationInWindow];
+ return gfx::Point(location.x,
+ NSHeight([[native_event window] frame]) - location.y);
+}
+
+gfx::Point EventSystemLocationFromNative(
+ const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return gfx::Point();
+}
+
+int EventButtonFromNative(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+int GetChangedMouseButtonFlagsFromNative(
+ const base::NativeEvent& native_event) {
+ 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& 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) {
+ NOTIMPLEMENTED();
+}
+
+int GetTouchId(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0;
+}
+
+float GetTouchRadiusX(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0.f;
+}
+
+float GetTouchRadiusY(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0.f;
+}
+
+float GetTouchAngle(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0.f;
+}
+
+float GetTouchForce(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return 0.f;
+}
+
+bool GetScrollOffsets(const base::NativeEvent& native_event,
+ float* x_offset,
+ float* y_offset,
+ float* x_offset_ordinal,
+ float* y_offset_ordinal,
+ int* finger_count) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool GetFlingData(const base::NativeEvent& native_event,
+ float* vx,
+ float* vy,
+ float* vx_ordinal,
+ float* vy_ordinal,
+ bool* is_cancel) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool GetGestureTimes(const base::NativeEvent& native_event,
+ double* start_time,
+ double* end_time) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+void SetNaturalScroll(bool enabled) {
+ NOTIMPLEMENTED();
+}
+
+bool IsNaturalScrollEnabled() {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+bool IsTouchpadEvent(const base::NativeEvent& native_event) {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+KeyboardCode KeyboardCodeFromNative(const base::NativeEvent& native_event) {
+ return KeyboardCodeFromNSEvent(native_event);
+}
+
+const char* CodeFromNative(const base::NativeEvent& native_event) {
+ return CodeFromNSEvent(native_event);
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698