Chromium Code Reviews| 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/QuartzCore.h> | 5 #include <QuartzCore/QuartzCore.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 #include "app/app_switches.h" | 9 #include "app/app_switches.h" |
| 10 #include "app/surface/io_surface_support_mac.h" | 10 #include "app/surface/io_surface_support_mac.h" |
| (...skipping 648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 659 // ignore them so we don't re-allocate the backing store. We will paint | 659 // ignore them so we don't re-allocate the backing store. We will paint |
| 660 // everything again when we become selected again. | 660 // everything again when we become selected again. |
| 661 is_hidden_ = true; | 661 is_hidden_ = true; |
| 662 | 662 |
| 663 // If we have a renderer, then inform it that we are being hidden so it can | 663 // If we have a renderer, then inform it that we are being hidden so it can |
| 664 // reduce its resource utilization. | 664 // reduce its resource utilization. |
| 665 render_widget_host_->WasHidden(); | 665 render_widget_host_->WasHidden(); |
| 666 } | 666 } |
| 667 | 667 |
| 668 void RenderWidgetHostViewMac::SetSize(const gfx::Size& size) { | 668 void RenderWidgetHostViewMac::SetSize(const gfx::Size& size) { |
| 669 gfx::Rect rect = GetViewBounds(); | |
| 670 rect.set_size(size); | |
| 671 SetBounds(rect); | |
| 672 } | |
| 673 | |
| 674 void RenderWidgetHostViewMac::SetBounds(const gfx::Rect& rect) { | |
| 669 if (is_hidden_) | 675 if (is_hidden_) |
| 670 return; | 676 return; |
| 671 | 677 |
| 672 // During the initial creation of the RenderWidgetHostView in | 678 // During the initial creation of the RenderWidgetHostView in |
| 673 // TabContents::CreateRenderViewForRenderManager, SetSize is called with an | 679 // TabContents::CreateRenderViewForRenderManager, SetSize is called with an |
| 674 // empty size. In the Windows code flow, it is not ignored because subsequent | 680 // empty size. In the Windows code flow, it is not ignored because subsequent |
| 675 // sizing calls from the OS flow through TCVW::WasSized which calls SetSize() | 681 // sizing calls from the OS flow through TCVW::WasSized which calls SetSize() |
| 676 // again. On Cocoa, we rely on the Cocoa view struture and resizer flags to | 682 // again. On Cocoa, we rely on the Cocoa view struture and resizer flags to |
| 677 // keep things sized properly. On the other hand, if the size is not empty | 683 // keep things sized properly. On the other hand, if the size is not empty |
| 678 // then this is a valid request for a pop-up. | 684 // then this is a valid request for a pop-up. |
| 679 if (size.IsEmpty()) | 685 if (rect.size().IsEmpty()) |
| 680 return; | 686 return; |
| 681 | 687 |
| 682 // Do conversions to upper-left origin, as "set size" means keep the | 688 // The position of |rect| is screen coordnate system and we have to consider |
| 683 // upper-left corner pinned. If the new size is valid, this is a popup whose | 689 // Cocoa coordinate system is upside-down and also muti screen. |
| 684 // superview is another RenderWidgetHostViewCocoa, but even if it's directly | 690 NSPoint global_origin = NSPointFromCGPoint(rect.origin().ToCGPoint()); |
| 685 // in a TabContentsViewCocoa, they're both BaseViews. | 691 if ([[NSScreen screens] count] > 0) { |
| 686 DCHECK([[cocoa_view_ superview] isKindOfClass:[BaseView class]]); | 692 NSRect bounds = NSMakeRect(0, 0, rect.width(), rect.height()); |
| 687 gfx::Rect rect = | 693 bounds = [cocoa_view_ convertRect:bounds toView:nil]; |
|
Nico
2011/02/16 18:18:45
is convertSize:toView: enough?
| |
| 688 [(BaseView*)[cocoa_view_ superview] flipNSRectToRect:[cocoa_view_ frame]]; | 694 global_origin.y = [[[NSScreen screens] objectAtIndex:0] frame].size.height - |
| 689 rect.set_width(size.width()); | 695 bounds.size.height - global_origin.y; |
|
Nico
2011/02/16 18:20:03
global_origin and the screen's frame are in screen
honten.org
2011/02/16 18:45:37
Here, my intention is |rect| is actually in view c
Nico
2011/02/16 21:16:01
Chances are I misunderstand something.
…ah! So Ge
honten.org
2011/02/16 21:18:57
Sure, I'll file it and fix the nits.
On 2011/02/1
honten.org
2011/02/18 09:11:26
Done.
| |
| 690 rect.set_height(size.height()); | 696 } |
| 691 [cocoa_view_ setFrame: | 697 |
| 692 [(BaseView*)[cocoa_view_ superview] flipRectToNSRect:rect]]; | 698 // Then |global_origin| is converted to client coordinate system. |
| 699 NSPoint window_origin = | |
| 700 [[cocoa_view_ window] convertScreenToBase:global_origin]; | |
| 701 NSRect frame = NSMakeRect(window_origin.x, window_origin.y, | |
| 702 rect.width(), rect.height()); | |
| 703 [cocoa_view_ setFrame:frame]; | |
| 693 } | 704 } |
| 694 | 705 |
| 695 gfx::NativeView RenderWidgetHostViewMac::GetNativeView() { | 706 gfx::NativeView RenderWidgetHostViewMac::GetNativeView() { |
| 696 return native_view(); | 707 return native_view(); |
| 697 } | 708 } |
| 698 | 709 |
| 699 void RenderWidgetHostViewMac::MovePluginWindows( | 710 void RenderWidgetHostViewMac::MovePluginWindows( |
| 700 const std::vector<webkit::npapi::WebPluginGeometry>& moves) { | 711 const std::vector<webkit::npapi::WebPluginGeometry>& moves) { |
| 701 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 712 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 702 // Handle movement of accelerated plugins, which are the only "windowed" | 713 // Handle movement of accelerated plugins, which are the only "windowed" |
| (...skipping 2124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2827 if (!string) return NO; | 2838 if (!string) return NO; |
| 2828 | 2839 |
| 2829 // If the user is currently using an IME, confirm the IME input, | 2840 // If the user is currently using an IME, confirm the IME input, |
| 2830 // and then insert the text from the service, the same as TextEdit and Safari. | 2841 // and then insert the text from the service, the same as TextEdit and Safari. |
| 2831 [self confirmComposition]; | 2842 [self confirmComposition]; |
| 2832 [self insertText:string]; | 2843 [self insertText:string]; |
| 2833 return YES; | 2844 return YES; |
| 2834 } | 2845 } |
| 2835 | 2846 |
| 2836 @end | 2847 @end |
| OLD | NEW |