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/surface/io_surface_support_mac.h" | 9 #include "app/surface/io_surface_support_mac.h" |
10 #import "base/chrome_application_mac.h" | 10 #import "base/chrome_application_mac.h" |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 void RenderWidgetHostViewMac::KillSelf() { | 606 void RenderWidgetHostViewMac::KillSelf() { |
607 if (shutdown_factory_.empty()) { | 607 if (shutdown_factory_.empty()) { |
608 [cocoa_view_ setHidden:YES]; | 608 [cocoa_view_ setHidden:YES]; |
609 MessageLoop::current()->PostTask(FROM_HERE, | 609 MessageLoop::current()->PostTask(FROM_HERE, |
610 shutdown_factory_.NewRunnableMethod( | 610 shutdown_factory_.NewRunnableMethod( |
611 &RenderWidgetHostViewMac::ShutdownHost)); | 611 &RenderWidgetHostViewMac::ShutdownHost)); |
612 } | 612 } |
613 } | 613 } |
614 | 614 |
615 gfx::PluginWindowHandle | 615 gfx::PluginWindowHandle |
616 RenderWidgetHostViewMac::AllocateFakePluginWindowHandle(bool opaque) { | 616 RenderWidgetHostViewMac::AllocateFakePluginWindowHandle(bool opaque, |
| 617 bool root) { |
617 // Make sure we have a layer for the plugin to draw into. | 618 // Make sure we have a layer for the plugin to draw into. |
618 [cocoa_view_ ensureAcceleratedPluginLayer]; | 619 [cocoa_view_ ensureAcceleratedPluginLayer]; |
619 | 620 |
620 return plugin_container_manager_.AllocateFakePluginWindowHandle(opaque); | 621 return plugin_container_manager_.AllocateFakePluginWindowHandle(opaque, root); |
621 } | 622 } |
622 | 623 |
623 void RenderWidgetHostViewMac::DestroyFakePluginWindowHandle( | 624 void RenderWidgetHostViewMac::DestroyFakePluginWindowHandle( |
624 gfx::PluginWindowHandle window) { | 625 gfx::PluginWindowHandle window) { |
625 plugin_container_manager_.DestroyFakePluginWindowHandle(window); | 626 plugin_container_manager_.DestroyFakePluginWindowHandle(window); |
626 } | 627 } |
627 | 628 |
628 void RenderWidgetHostViewMac::AcceleratedSurfaceSetIOSurface( | 629 void RenderWidgetHostViewMac::AcceleratedSurfaceSetIOSurface( |
629 gfx::PluginWindowHandle window, | 630 gfx::PluginWindowHandle window, |
630 int32 width, | 631 int32 width, |
(...skipping 12 matching lines...) Expand all Loading... |
643 TransportDIB::Handle transport_dib) { | 644 TransportDIB::Handle transport_dib) { |
644 plugin_container_manager_.SetSizeAndTransportDIB(window, | 645 plugin_container_manager_.SetSizeAndTransportDIB(window, |
645 width, | 646 width, |
646 height, | 647 height, |
647 transport_dib); | 648 transport_dib); |
648 } | 649 } |
649 | 650 |
650 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( | 651 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( |
651 gfx::PluginWindowHandle window) { | 652 gfx::PluginWindowHandle window) { |
652 [cocoa_view_ drawAcceleratedPluginLayer]; | 653 [cocoa_view_ drawAcceleratedPluginLayer]; |
| 654 if (GetRenderWidgetHost()->is_gpu_rendering_active()) { |
| 655 // Additionally dirty the entire region of the view to make AppKit |
| 656 // and Core Animation think that our CALayer needs to repaint |
| 657 // itself. |
| 658 [cocoa_view_ setNeedsDisplayInRect:[cocoa_view_ frame]]; |
| 659 } |
653 } | 660 } |
654 | 661 |
655 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstances( | 662 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstances( |
656 CGLContextObj context) { | 663 CGLContextObj context) { |
657 CGLSetCurrentContext(context); | 664 CGLSetCurrentContext(context); |
658 gfx::Rect rect = GetWindowRect(); | 665 gfx::Rect rect = GetWindowRect(); |
659 glMatrixMode(GL_PROJECTION); | 666 glMatrixMode(GL_PROJECTION); |
660 glLoadIdentity(); | 667 glLoadIdentity(); |
661 // Note that we place the origin at the upper left corner with +y | 668 // Note that we place the origin at the upper left corner with +y |
662 // going down | 669 // going down |
663 glOrtho(0, rect.width(), rect.height(), 0, -1, 1); | 670 glOrtho(0, rect.width(), rect.height(), 0, -1, 1); |
664 glMatrixMode(GL_MODELVIEW); | 671 glMatrixMode(GL_MODELVIEW); |
665 glLoadIdentity(); | 672 glLoadIdentity(); |
666 | 673 |
667 plugin_container_manager_.Draw(context); | 674 plugin_container_manager_.Draw( |
| 675 context, GetRenderWidgetHost()->is_gpu_rendering_active()); |
668 } | 676 } |
669 | 677 |
670 void RenderWidgetHostViewMac::AcceleratedSurfaceContextChanged() { | 678 void RenderWidgetHostViewMac::AcceleratedSurfaceContextChanged() { |
671 plugin_container_manager_.ForceTextureReload(); | 679 plugin_container_manager_.ForceTextureReload(); |
672 } | 680 } |
673 | 681 |
674 void RenderWidgetHostViewMac::SetVisuallyDeemphasized(bool deemphasized) { | 682 void RenderWidgetHostViewMac::SetVisuallyDeemphasized(bool deemphasized) { |
675 // Mac uses tab-modal sheets, so this is a no-op. | 683 // Mac uses tab-modal sheets, so this is a no-op. |
676 } | 684 } |
677 | 685 |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 } | 1166 } |
1159 | 1167 |
1160 - (void)drawRect:(NSRect)dirtyRect { | 1168 - (void)drawRect:(NSRect)dirtyRect { |
1161 if (!renderWidgetHostView_->render_widget_host_) { | 1169 if (!renderWidgetHostView_->render_widget_host_) { |
1162 // TODO(shess): Consider using something more noticable? | 1170 // TODO(shess): Consider using something more noticable? |
1163 [[NSColor whiteColor] set]; | 1171 [[NSColor whiteColor] set]; |
1164 NSRectFill(dirtyRect); | 1172 NSRectFill(dirtyRect); |
1165 return; | 1173 return; |
1166 } | 1174 } |
1167 | 1175 |
| 1176 if (renderWidgetHostView_->render_widget_host_->is_gpu_rendering_active()) { |
| 1177 // In this mode the accelerated plugin layer is considered to be |
| 1178 // opaque. We do not want its contents to be blended with anything |
| 1179 // underneath it. |
| 1180 acceleratedPluginLayer_.get().opaque = YES; |
| 1181 [acceleratedPluginLayer_.get() setNeedsDisplay]; |
| 1182 return; |
| 1183 } |
| 1184 |
1168 DCHECK( | 1185 DCHECK( |
1169 renderWidgetHostView_->render_widget_host_->process()->HasConnection()); | 1186 renderWidgetHostView_->render_widget_host_->process()->HasConnection()); |
1170 DCHECK(!renderWidgetHostView_->about_to_validate_and_paint_); | 1187 DCHECK(!renderWidgetHostView_->about_to_validate_and_paint_); |
1171 | 1188 |
1172 renderWidgetHostView_->about_to_validate_and_paint_ = true; | 1189 renderWidgetHostView_->about_to_validate_and_paint_ = true; |
1173 BackingStoreMac* backing_store = static_cast<BackingStoreMac*>( | 1190 BackingStoreMac* backing_store = static_cast<BackingStoreMac*>( |
1174 renderWidgetHostView_->render_widget_host_->GetBackingStore(true)); | 1191 renderWidgetHostView_->render_widget_host_->GetBackingStore(true)); |
1175 renderWidgetHostView_->about_to_validate_and_paint_ = false; | 1192 renderWidgetHostView_->about_to_validate_and_paint_ = false; |
1176 | 1193 |
1177 if (backing_store) { | 1194 if (backing_store) { |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1272 // recorded. | 1289 // recorded. |
1273 renderWidgetHostView_->tab_switch_paint_time_ = base::TimeTicks(); | 1290 renderWidgetHostView_->tab_switch_paint_time_ = base::TimeTicks(); |
1274 } | 1291 } |
1275 } else { | 1292 } else { |
1276 [[NSColor whiteColor] set]; | 1293 [[NSColor whiteColor] set]; |
1277 NSRectFill(dirtyRect); | 1294 NSRectFill(dirtyRect); |
1278 if (renderWidgetHostView_->whiteout_start_time_.is_null()) | 1295 if (renderWidgetHostView_->whiteout_start_time_.is_null()) |
1279 renderWidgetHostView_->whiteout_start_time_ = base::TimeTicks::Now(); | 1296 renderWidgetHostView_->whiteout_start_time_ = base::TimeTicks::Now(); |
1280 } | 1297 } |
1281 | 1298 |
| 1299 // If we get here then the accelerated plugin layer is not supposed |
| 1300 // to be considered opaque -- plugins overlay the browser's normal |
| 1301 // painting. |
| 1302 acceleratedPluginLayer_.get().opaque = NO; |
| 1303 |
1282 // This helps keep accelerated plugins' output in better sync with the | 1304 // This helps keep accelerated plugins' output in better sync with the |
1283 // window as it resizes. | 1305 // window as it resizes. |
1284 [acceleratedPluginLayer_.get() setNeedsDisplay]; | 1306 [acceleratedPluginLayer_.get() setNeedsDisplay]; |
1285 } | 1307 } |
1286 | 1308 |
1287 - (BOOL)canBecomeKeyView { | 1309 - (BOOL)canBecomeKeyView { |
1288 if (!renderWidgetHostView_->render_widget_host_) | 1310 if (!renderWidgetHostView_->render_widget_host_) |
1289 return NO; | 1311 return NO; |
1290 | 1312 |
1291 return canBeKeyView_; | 1313 return canBeKeyView_; |
(...skipping 805 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2097 renderWidgetHostView_->render_widget_host_->ImeConfirmComposition(); | 2119 renderWidgetHostView_->render_widget_host_->ImeConfirmComposition(); |
2098 | 2120 |
2099 [self cancelComposition]; | 2121 [self cancelComposition]; |
2100 } | 2122 } |
2101 | 2123 |
2102 - (ViewID)viewID { | 2124 - (ViewID)viewID { |
2103 return VIEW_ID_TAB_CONTAINER_FOCUS_VIEW; | 2125 return VIEW_ID_TAB_CONTAINER_FOCUS_VIEW; |
2104 } | 2126 } |
2105 | 2127 |
2106 @end | 2128 @end |
OLD | NEW |