| OLD | NEW | 
|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #import "ui/views/cocoa/bridged_content_view.h" | 5 #import "ui/views/cocoa/bridged_content_view.h" | 
| 6 | 6 | 
| 7 #include "base/logging.h" | 7 #include "base/logging.h" | 
| 8 #import "base/mac/scoped_nsobject.h" | 8 #import "base/mac/scoped_nsobject.h" | 
| 9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" | 
| 10 #include "ui/base/ime/text_input_client.h" | 10 #include "ui/base/ime/text_input_client.h" | 
| 11 #include "ui/gfx/canvas_paint_mac.h" | 11 #include "ui/gfx/canvas_paint_mac.h" | 
| 12 #include "ui/gfx/geometry/rect.h" | 12 #include "ui/gfx/geometry/rect.h" | 
| 13 #include "ui/strings/grit/ui_strings.h" | 13 #include "ui/strings/grit/ui_strings.h" | 
| 14 #include "ui/views/view.h" | 14 #include "ui/views/view.h" | 
| 15 #include "ui/views/widget/widget.h" | 15 #include "ui/views/widget/widget.h" | 
| 16 | 16 | 
|  | 17 namespace { | 
|  | 18 | 
|  | 19 // Convert a |point| in |source_window|'s AppKit coordinate system (origin at | 
|  | 20 // the bottom left of the window) to |target_window|'s content rect, with the | 
|  | 21 // origin at the top left of the content area. | 
|  | 22 // If |source_window| is nil, |point| will be treated as screen coordinates. | 
|  | 23 gfx::Point MovePointToWindow(const NSPoint& point, | 
|  | 24                              NSWindow* source_window, | 
|  | 25                              NSWindow* target_window) { | 
|  | 26   NSPoint point_in_screen = source_window | 
|  | 27       ? [source_window convertBaseToScreen:point] | 
|  | 28       : point; | 
|  | 29 | 
|  | 30   NSPoint point_in_window = [target_window convertScreenToBase:point_in_screen]; | 
|  | 31   NSRect content_rect = | 
|  | 32       [target_window contentRectForFrameRect:[target_window frame]]; | 
|  | 33   return gfx::Point(point_in_window.x, | 
|  | 34                     NSHeight(content_rect) - point_in_window.y); | 
|  | 35 } | 
|  | 36 | 
|  | 37 } | 
|  | 38 | 
| 17 @interface BridgedContentView () | 39 @interface BridgedContentView () | 
| 18 | 40 | 
| 19 // Translates the location of |theEvent| to toolkit-views coordinates and passes | 41 // Translates the location of |theEvent| to toolkit-views coordinates and passes | 
| 20 // the event to NativeWidgetMac for handling. | 42 // the event to NativeWidgetMac for handling. | 
| 21 - (void)handleMouseEvent:(NSEvent*)theEvent; | 43 - (void)handleMouseEvent:(NSEvent*)theEvent; | 
| 22 | 44 | 
| 23 // Execute a command on the currently focused TextInputClient. | 45 // Execute a command on the currently focused TextInputClient. | 
| 24 // |commandId| should be a resource ID from ui_strings.grd. | 46 // |commandId| should be a resource ID from ui_strings.grd. | 
| 25 - (void)doCommandByID:(int)commandId; | 47 - (void)doCommandByID:(int)commandId; | 
| 26 | 48 | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 52   } | 74   } | 
| 53   return self; | 75   return self; | 
| 54 } | 76 } | 
| 55 | 77 | 
| 56 - (void)clearView { | 78 - (void)clearView { | 
| 57   hostedView_ = NULL; | 79   hostedView_ = NULL; | 
| 58   [trackingArea_.get() clearOwner]; | 80   [trackingArea_.get() clearOwner]; | 
| 59   [self removeTrackingArea:trackingArea_.get()]; | 81   [self removeTrackingArea:trackingArea_.get()]; | 
| 60 } | 82 } | 
| 61 | 83 | 
|  | 84 - (void)processCapturedMouseEvent:(NSEvent*)theEvent { | 
|  | 85   if (!hostedView_) | 
|  | 86     return; | 
|  | 87 | 
|  | 88   NSWindow* source = [theEvent window]; | 
|  | 89   NSWindow* target = [self window]; | 
|  | 90   DCHECK(target); | 
|  | 91 | 
|  | 92   // If it's the view's window, process normally. | 
|  | 93   if ([target isEqual:source]) { | 
|  | 94     [self handleMouseEvent:theEvent]; | 
|  | 95     return; | 
|  | 96   } | 
|  | 97 | 
|  | 98   ui::MouseEvent event(theEvent); | 
|  | 99   event.set_location( | 
|  | 100       MovePointToWindow([theEvent locationInWindow], source, target)); | 
|  | 101   hostedView_->GetWidget()->OnMouseEvent(&event); | 
|  | 102 } | 
|  | 103 | 
| 62 // BridgedContentView private implementation. | 104 // BridgedContentView private implementation. | 
| 63 | 105 | 
| 64 - (void)handleMouseEvent:(NSEvent*)theEvent { | 106 - (void)handleMouseEvent:(NSEvent*)theEvent { | 
| 65   if (!hostedView_) | 107   if (!hostedView_) | 
| 66     return; | 108     return; | 
| 67 | 109 | 
| 68   ui::MouseEvent event(theEvent); | 110   ui::MouseEvent event(theEvent); | 
| 69   hostedView_->GetWidget()->OnMouseEvent(&event); | 111   hostedView_->GetWidget()->OnMouseEvent(&event); | 
| 70 } | 112 } | 
| 71 | 113 | 
| (...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 321   } | 363   } | 
| 322 | 364 | 
| 323   return [super accessibilityAttributeValue:attribute]; | 365   return [super accessibilityAttributeValue:attribute]; | 
| 324 } | 366 } | 
| 325 | 367 | 
| 326 - (id)accessibilityHitTest:(NSPoint)point { | 368 - (id)accessibilityHitTest:(NSPoint)point { | 
| 327   return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; | 369   return [hostedView_->GetNativeViewAccessible() accessibilityHitTest:point]; | 
| 328 } | 370 } | 
| 329 | 371 | 
| 330 @end | 372 @end | 
| OLD | NEW | 
|---|