| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include <QuartzCore/CAOpenGLLayer.h> | 5 #include <QuartzCore/CAOpenGLLayer.h> |
| 6 | 6 |
| 7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" | 7 #include "chrome/browser/renderer_host/render_widget_host_view_mac.h" |
| 8 | 8 |
| 9 #import "base/chrome_application_mac.h" | 9 #import "base/chrome_application_mac.h" |
| 10 #include "base/histogram.h" | 10 #include "base/histogram.h" |
| (...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 } | 587 } |
| 588 | 588 |
| 589 void RenderWidgetHostViewMac::ShutdownHost() { | 589 void RenderWidgetHostViewMac::ShutdownHost() { |
| 590 shutdown_factory_.RevokeAll(); | 590 shutdown_factory_.RevokeAll(); |
| 591 render_widget_host_->Shutdown(); | 591 render_widget_host_->Shutdown(); |
| 592 // Do not touch any members at this point, |this| has been deleted. | 592 // Do not touch any members at this point, |this| has been deleted. |
| 593 } | 593 } |
| 594 | 594 |
| 595 namespace { | 595 namespace { |
| 596 | 596 |
| 597 // Adjusts an NSRect in screen coordinates to have an origin in the upper left, | 597 // Adjusts an NSRect in Cocoa screen coordinates to have an origin in the upper |
| 598 // and stuffs it into a gfx::Rect. This is likely incorrect for a multiple- | 598 // left of the primary screen (Carbon coordinates), and stuffs it into a |
| 599 // monitor setup. | 599 // gfx::Rect. |
| 600 gfx::Rect NSRectToRect(const NSRect rect, NSScreen* screen) { | 600 gfx::Rect NSRectToRect(const NSRect rect) { |
| 601 gfx::Rect new_rect(NSRectToCGRect(rect)); | 601 gfx::Rect new_rect(NSRectToCGRect(rect)); |
| 602 new_rect.set_y([screen frame].size.height - new_rect.y() - new_rect.height()); | 602 if ([[NSScreen screens] count] > 0) { |
| 603 new_rect.set_y([[[NSScreen screens] objectAtIndex:0] frame].size.height - |
| 604 new_rect.y() - new_rect.height()); |
| 605 } |
| 603 return new_rect; | 606 return new_rect; |
| 604 } | 607 } |
| 605 | 608 |
| 606 } // namespace | 609 } // namespace |
| 607 | 610 |
| 608 gfx::Rect RenderWidgetHostViewMac::GetWindowRect() { | 611 gfx::Rect RenderWidgetHostViewMac::GetWindowRect() { |
| 609 // TODO(shess): In case of !window, the view has been removed from | 612 // TODO(shess): In case of !window, the view has been removed from |
| 610 // the view hierarchy because the tab isn't main. Could retrieve | 613 // the view hierarchy because the tab isn't main. Could retrieve |
| 611 // the information from the main tab for our window. | 614 // the information from the main tab for our window. |
| 612 NSWindow* enclosing_window = [cocoa_view_ window]; | 615 NSWindow* enclosing_window = [cocoa_view_ window]; |
| 613 if (!cocoa_view_ || !enclosing_window) { | 616 if (!cocoa_view_ || !enclosing_window) { |
| 614 return gfx::Rect(); | 617 return gfx::Rect(); |
| 615 } | 618 } |
| 616 | 619 |
| 617 // During dragging of a torn-off tab, [cocoa_view_ window] is a floating panel | 620 // During dragging of a torn-off tab, [cocoa_view_ window] is a floating panel |
| 618 // attached to the actual browser window that the tab is visually part of; we | 621 // attached to the actual browser window that the tab is visually part of; we |
| 619 // want the bounds of the browser window rather than the panel. | 622 // want the bounds of the browser window rather than the panel. |
| 620 if ([enclosing_window parentWindow]) | 623 if ([enclosing_window parentWindow]) |
| 621 enclosing_window = [enclosing_window parentWindow]; | 624 enclosing_window = [enclosing_window parentWindow]; |
| 622 | 625 |
| 623 NSRect bounds = [cocoa_view_ bounds]; | 626 NSRect bounds = [cocoa_view_ bounds]; |
| 624 bounds = [cocoa_view_ convertRect:bounds toView:nil]; | 627 bounds = [cocoa_view_ convertRect:bounds toView:nil]; |
| 625 bounds.origin = [enclosing_window convertBaseToScreen:bounds.origin]; | 628 bounds.origin = [enclosing_window convertBaseToScreen:bounds.origin]; |
| 626 return NSRectToRect(bounds, [[cocoa_view_ window] screen]); | 629 return NSRectToRect(bounds); |
| 627 } | 630 } |
| 628 | 631 |
| 629 gfx::Rect RenderWidgetHostViewMac::GetRootWindowRect() { | 632 gfx::Rect RenderWidgetHostViewMac::GetRootWindowRect() { |
| 630 // TODO(shess): In case of !window, the view has been removed from | 633 // TODO(shess): In case of !window, the view has been removed from |
| 631 // the view hierarchy because the tab isn't main. Could retrieve | 634 // the view hierarchy because the tab isn't main. Could retrieve |
| 632 // the information from the main tab for our window. | 635 // the information from the main tab for our window. |
| 633 NSWindow* enclosing_window = [cocoa_view_ window]; | 636 NSWindow* enclosing_window = [cocoa_view_ window]; |
| 634 if (!enclosing_window) { | 637 if (!enclosing_window) { |
| 635 return gfx::Rect(); | 638 return gfx::Rect(); |
| 636 } | 639 } |
| 637 | 640 |
| 638 // During dragging of a torn-off tab, [cocoa_view_ window] is a floating panel | 641 // During dragging of a torn-off tab, [cocoa_view_ window] is a floating panel |
| 639 // attached to the actual browser window that the tab is visually part of; we | 642 // attached to the actual browser window that the tab is visually part of; we |
| 640 // want the bounds of the browser window rather than the panel. | 643 // want the bounds of the browser window rather than the panel. |
| 641 if ([enclosing_window parentWindow]) | 644 if ([enclosing_window parentWindow]) |
| 642 enclosing_window = [enclosing_window parentWindow]; | 645 enclosing_window = [enclosing_window parentWindow]; |
| 643 | 646 |
| 644 NSRect bounds = [enclosing_window frame]; | 647 NSRect bounds = [enclosing_window frame]; |
| 645 return NSRectToRect(bounds, [enclosing_window screen]); | 648 return NSRectToRect(bounds); |
| 646 } | 649 } |
| 647 | 650 |
| 648 void RenderWidgetHostViewMac::SetActive(bool active) { | 651 void RenderWidgetHostViewMac::SetActive(bool active) { |
| 649 if (render_widget_host_) | 652 if (render_widget_host_) |
| 650 render_widget_host_->SetActive(active); | 653 render_widget_host_->SetActive(active); |
| 651 } | 654 } |
| 652 | 655 |
| 653 void RenderWidgetHostViewMac::SetWindowVisibility(bool visible) { | 656 void RenderWidgetHostViewMac::SetWindowVisibility(bool visible) { |
| 654 if (render_widget_host_) { | 657 if (render_widget_host_) { |
| 655 render_widget_host_->Send(new ViewMsg_SetWindowVisibility( | 658 render_widget_host_->Send(new ViewMsg_SetWindowVisibility( |
| (...skipping 1003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1659 } | 1662 } |
| 1660 | 1663 |
| 1661 - (void)pasteAsPlainText:(id)sender { | 1664 - (void)pasteAsPlainText:(id)sender { |
| 1662 if (renderWidgetHostView_->render_widget_host_->IsRenderView()) { | 1665 if (renderWidgetHostView_->render_widget_host_->IsRenderView()) { |
| 1663 static_cast<RenderViewHost*>(renderWidgetHostView_->render_widget_host_)-> | 1666 static_cast<RenderViewHost*>(renderWidgetHostView_->render_widget_host_)-> |
| 1664 ForwardEditCommand("PasteAndMatchStyle", ""); | 1667 ForwardEditCommand("PasteAndMatchStyle", ""); |
| 1665 } | 1668 } |
| 1666 } | 1669 } |
| 1667 | 1670 |
| 1668 @end | 1671 @end |
| OLD | NEW |