| 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 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 683 void RenderWidgetHostViewMac::ImeCancelComposition() { | 683 void RenderWidgetHostViewMac::ImeCancelComposition() { |
| 684 [cocoa_view_ cancelComposition]; | 684 [cocoa_view_ cancelComposition]; |
| 685 } | 685 } |
| 686 | 686 |
| 687 void RenderWidgetHostViewMac::DidUpdateBackingStore( | 687 void RenderWidgetHostViewMac::DidUpdateBackingStore( |
| 688 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy, | 688 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy, |
| 689 const std::vector<gfx::Rect>& copy_rects) { | 689 const std::vector<gfx::Rect>& copy_rects) { |
| 690 if (!is_hidden_) { | 690 if (!is_hidden_) { |
| 691 std::vector<gfx::Rect> rects(copy_rects); | 691 std::vector<gfx::Rect> rects(copy_rects); |
| 692 | 692 |
| 693 // Because the findbar might be open, we cannot use scrollRect:by: here. Fo
r | 693 // Because the findbar might be open, we cannot use scrollRect:by: here. For |
| 694 // now, simply mark all of scroll rect as dirty. | 694 // now, simply mark all of scroll rect as dirty. |
| 695 if (!scroll_rect.IsEmpty()) | 695 if (!scroll_rect.IsEmpty()) |
| 696 rects.push_back(scroll_rect); | 696 rects.push_back(scroll_rect); |
| 697 | 697 |
| 698 for (size_t i = 0; i < rects.size(); ++i) { | 698 for (size_t i = 0; i < rects.size(); ++i) { |
| 699 NSRect ns_rect = [cocoa_view_ flipRectToNSRect:rects[i]]; | 699 NSRect ns_rect = [cocoa_view_ flipRectToNSRect:rects[i]]; |
| 700 | 700 |
| 701 if (about_to_validate_and_paint_) { | 701 if (about_to_validate_and_paint_) { |
| 702 // As much as we'd like to use -setNeedsDisplayInRect: here, we can't. | 702 // As much as we'd like to use -setNeedsDisplayInRect: here, we can't. |
| 703 // We're in the middle of executing a -drawRect:, and as soon as it | 703 // We're in the middle of executing a -drawRect:, and as soon as it |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 if (plugin_container_manager_.SurfaceShouldBeVisible(window)) | 943 if (plugin_container_manager_.SurfaceShouldBeVisible(window)) |
| 944 [view setHidden:NO]; | 944 [view setHidden:NO]; |
| 945 [view setSurfaceWasSwapped:YES]; | 945 [view setSurfaceWasSwapped:YES]; |
| 946 } | 946 } |
| 947 | 947 |
| 948 void RenderWidgetHostViewMac::UpdateRootGpuViewVisibility( | 948 void RenderWidgetHostViewMac::UpdateRootGpuViewVisibility( |
| 949 bool show_gpu_widget) { | 949 bool show_gpu_widget) { |
| 950 // Plugins are destroyed on page navigate. The compositor layer on the other | 950 // Plugins are destroyed on page navigate. The compositor layer on the other |
| 951 // hand is created on demand and then stays alive until its renderer process | 951 // hand is created on demand and then stays alive until its renderer process |
| 952 // dies (usually on cross-domain navigation). Instead, only a flag | 952 // dies (usually on cross-domain navigation). Instead, only a flag |
| 953 // |is_gpu_rendering_active()| is flipped when the compositor output should be | 953 // |is_accelerated_compositing_active()| is flipped when the compositor output |
| 954 // shown/hidden. | 954 // should be shown/hidden. |
| 955 // Show/hide the view belonging to the compositor here. | 955 // Show/hide the view belonging to the compositor here. |
| 956 plugin_container_manager_.set_gpu_rendering_active(show_gpu_widget); | 956 plugin_container_manager_.set_gpu_rendering_active(show_gpu_widget); |
| 957 | 957 |
| 958 gfx::PluginWindowHandle root_handle = | 958 gfx::PluginWindowHandle root_handle = |
| 959 plugin_container_manager_.root_container_handle(); | 959 plugin_container_manager_.root_container_handle(); |
| 960 if (root_handle != gfx::kNullPluginWindow) { | 960 if (root_handle != gfx::kNullPluginWindow) { |
| 961 PluginViewMap::iterator it = plugin_views_.find(root_handle); | 961 PluginViewMap::iterator it = plugin_views_.find(root_handle); |
| 962 DCHECK(plugin_views_.end() != it); | 962 DCHECK(plugin_views_.end() != it); |
| 963 if (plugin_views_.end() == it) { | 963 if (plugin_views_.end() == it) { |
| 964 return; | 964 return; |
| 965 } | 965 } |
| 966 bool visible = | 966 bool visible = |
| 967 plugin_container_manager_.SurfaceShouldBeVisible(root_handle); | 967 plugin_container_manager_.SurfaceShouldBeVisible(root_handle); |
| 968 [[it->second window] disableScreenUpdatesUntilFlush]; | 968 [[it->second window] disableScreenUpdatesUntilFlush]; |
| 969 [it->second setHidden:!visible]; | 969 [it->second setHidden:!visible]; |
| 970 } | 970 } |
| 971 } | 971 } |
| 972 | 972 |
| 973 void RenderWidgetHostViewMac::HandleDelayedGpuViewHiding() { | 973 void RenderWidgetHostViewMac::HandleDelayedGpuViewHiding() { |
| 974 if (needs_gpu_visibility_update_after_repaint_) { | 974 if (needs_gpu_visibility_update_after_repaint_) { |
| 975 UpdateRootGpuViewVisibility(false); | 975 UpdateRootGpuViewVisibility(false); |
| 976 needs_gpu_visibility_update_after_repaint_ = false; | 976 needs_gpu_visibility_update_after_repaint_ = false; |
| 977 } | 977 } |
| 978 } | 978 } |
| 979 | 979 |
| 980 void RenderWidgetHostViewMac::GpuRenderingStateDidChange() { | 980 void RenderWidgetHostViewMac::GpuRenderingStateDidChange() { |
| 981 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 981 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 982 if (GetRenderWidgetHost()->is_gpu_rendering_active()) { | 982 if (GetRenderWidgetHost()->is_accelerated_compositing_active()) { |
| 983 UpdateRootGpuViewVisibility( | 983 UpdateRootGpuViewVisibility( |
| 984 GetRenderWidgetHost()->is_gpu_rendering_active()); | 984 GetRenderWidgetHost()->is_accelerated_compositing_active()); |
| 985 } else { | 985 } else { |
| 986 needs_gpu_visibility_update_after_repaint_ = true; | 986 needs_gpu_visibility_update_after_repaint_ = true; |
| 987 } | 987 } |
| 988 } | 988 } |
| 989 | 989 |
| 990 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstance( | 990 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstance( |
| 991 CGLContextObj context, | 991 CGLContextObj context, |
| 992 gfx::PluginWindowHandle plugin_handle, | 992 gfx::PluginWindowHandle plugin_handle, |
| 993 NSSize size) { | 993 NSSize size) { |
| 994 // Called on the display link thread. | 994 // Called on the display link thread. |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1572 - (void)drawRect:(NSRect)dirtyRect { | 1572 - (void)drawRect:(NSRect)dirtyRect { |
| 1573 if (!renderWidgetHostView_->render_widget_host_) { | 1573 if (!renderWidgetHostView_->render_widget_host_) { |
| 1574 // TODO(shess): Consider using something more noticable? | 1574 // TODO(shess): Consider using something more noticable? |
| 1575 [[NSColor whiteColor] set]; | 1575 [[NSColor whiteColor] set]; |
| 1576 NSRectFill(dirtyRect); | 1576 NSRectFill(dirtyRect); |
| 1577 return; | 1577 return; |
| 1578 } | 1578 } |
| 1579 | 1579 |
| 1580 const gfx::Rect damagedRect([self flipNSRectToRect:dirtyRect]); | 1580 const gfx::Rect damagedRect([self flipNSRectToRect:dirtyRect]); |
| 1581 | 1581 |
| 1582 if (renderWidgetHostView_->render_widget_host_->is_gpu_rendering_active()) { | 1582 if (renderWidgetHostView_->render_widget_host_-> |
| 1583 is_accelerated_compositing_active()) { |
| 1583 gfx::Rect gpuRect; | 1584 gfx::Rect gpuRect; |
| 1584 | 1585 |
| 1585 gfx::PluginWindowHandle root_handle = | 1586 gfx::PluginWindowHandle root_handle = |
| 1586 renderWidgetHostView_->plugin_container_manager_.root_container_handle(); | 1587 renderWidgetHostView_->plugin_container_manager_.root_container_handle(); |
| 1587 if (root_handle != gfx::kNullPluginWindow) { | 1588 if (root_handle != gfx::kNullPluginWindow) { |
| 1588 RenderWidgetHostViewMac::PluginViewMap::iterator it = | 1589 RenderWidgetHostViewMac::PluginViewMap::iterator it = |
| 1589 renderWidgetHostView_->plugin_views_.find(root_handle); | 1590 renderWidgetHostView_->plugin_views_.find(root_handle); |
| 1590 DCHECK(it != renderWidgetHostView_->plugin_views_.end()); | 1591 DCHECK(it != renderWidgetHostView_->plugin_views_.end()); |
| 1591 if (it != renderWidgetHostView_->plugin_views_.end() && | 1592 if (it != renderWidgetHostView_->plugin_views_.end() && |
| 1592 ![it->second isHidden]) { | 1593 ![it->second isHidden]) { |
| (...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2568 if (!string) return NO; | 2569 if (!string) return NO; |
| 2569 | 2570 |
| 2570 // If the user is currently using an IME, confirm the IME input, | 2571 // If the user is currently using an IME, confirm the IME input, |
| 2571 // and then insert the text from the service, the same as TextEdit and Safari. | 2572 // and then insert the text from the service, the same as TextEdit and Safari. |
| 2572 [self confirmComposition]; | 2573 [self confirmComposition]; |
| 2573 [self insertText:string]; | 2574 [self insertText:string]; |
| 2574 return YES; | 2575 return YES; |
| 2575 } | 2576 } |
| 2576 | 2577 |
| 2577 @end | 2578 @end |
| OLD | NEW |