| 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 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 } | 411 } |
| 412 | 412 |
| 413 gfx::NativeView RenderWidgetHostViewMac::GetNativeView() { | 413 gfx::NativeView RenderWidgetHostViewMac::GetNativeView() { |
| 414 return native_view(); | 414 return native_view(); |
| 415 } | 415 } |
| 416 | 416 |
| 417 void RenderWidgetHostViewMac::MovePluginWindows( | 417 void RenderWidgetHostViewMac::MovePluginWindows( |
| 418 const std::vector<webkit_glue::WebPluginGeometry>& moves) { | 418 const std::vector<webkit_glue::WebPluginGeometry>& moves) { |
| 419 // Handle movement of accelerated plugins, which are the only "windowed" | 419 // Handle movement of accelerated plugins, which are the only "windowed" |
| 420 // plugins that exist on the Mac. | 420 // plugins that exist on the Mac. |
| 421 if (moves.size() > 0) { | 421 for (std::vector<webkit_glue::WebPluginGeometry>::const_iterator iter = |
| 422 for (std::vector<webkit_glue::WebPluginGeometry>::const_iterator iter = | 422 moves.begin(); |
| 423 moves.begin(); | 423 iter != moves.end(); |
| 424 iter != moves.end(); | 424 ++iter) { |
| 425 ++iter) { | 425 webkit_glue::WebPluginGeometry geom = *iter; |
| 426 webkit_glue::WebPluginGeometry geom = *iter; | 426 // Ignore bogus moves which claim to move the plugin to (0, 0) |
| 427 // Ignore bogus moves which claim to move the plugin to (0, 0) | 427 // with width and height (0, 0) |
| 428 // with width and height (0, 0) | 428 if (geom.window_rect.x() == 0 && |
| 429 if (geom.window_rect.x() == 0 && | 429 geom.window_rect.y() == 0 && |
| 430 geom.window_rect.y() == 0 && | 430 geom.window_rect.IsEmpty()) { |
| 431 geom.window_rect.IsEmpty()) { | 431 continue; |
| 432 continue; | 432 } |
| 433 } | |
| 434 | 433 |
| 435 gfx::Rect rect = geom.window_rect; | 434 gfx::Rect rect = geom.window_rect; |
| 436 if (geom.visible) { | 435 if (geom.visible) { |
| 437 rect.set_x(rect.x() + geom.clip_rect.x()); | 436 rect.set_x(rect.x() + geom.clip_rect.x()); |
| 438 rect.set_y(rect.y() + geom.clip_rect.y()); | 437 rect.set_y(rect.y() + geom.clip_rect.y()); |
| 439 rect.set_width(geom.clip_rect.width()); | 438 rect.set_width(geom.clip_rect.width()); |
| 440 rect.set_height(geom.clip_rect.height()); | 439 rect.set_height(geom.clip_rect.height()); |
| 441 } | 440 } |
| 442 | 441 |
| 443 PluginViewMap::iterator it = plugin_views_.find(geom.window); | 442 PluginViewMap::iterator it = plugin_views_.find(geom.window); |
| 444 DCHECK(plugin_views_.end() != it); | 443 DCHECK(plugin_views_.end() != it); |
| 445 if (plugin_views_.end() == it) { | 444 if (plugin_views_.end() == it) { |
| 446 continue; | 445 continue; |
| 447 } | 446 } |
| 448 NSRect new_rect([cocoa_view_ RectToNSRect:rect]); | 447 NSRect new_rect([cocoa_view_ RectToNSRect:rect]); |
| 449 [it->second setFrame:new_rect]; | 448 [it->second setFrame:new_rect]; |
| 450 [it->second setNeedsDisplay:YES]; | 449 [it->second setNeedsDisplay:YES]; |
| 451 | 450 |
| 452 plugin_container_manager_.SetPluginContainerGeometry(geom); | 451 plugin_container_manager_.SetPluginContainerGeometry(geom); |
| 453 } | 452 |
| 453 BOOL visible = |
| 454 plugin_container_manager_.SurfaceShouldBeVisible(geom.window); |
| 455 [it->second setHidden:!visible]; |
| 454 } | 456 } |
| 455 } | 457 } |
| 456 | 458 |
| 457 void RenderWidgetHostViewMac::Focus() { | 459 void RenderWidgetHostViewMac::Focus() { |
| 458 [[cocoa_view_ window] makeFirstResponder:cocoa_view_]; | 460 [[cocoa_view_ window] makeFirstResponder:cocoa_view_]; |
| 459 } | 461 } |
| 460 | 462 |
| 461 void RenderWidgetHostViewMac::Blur() { | 463 void RenderWidgetHostViewMac::Blur() { |
| 462 [[cocoa_view_ window] makeFirstResponder:nil]; | 464 [[cocoa_view_ window] makeFirstResponder:nil]; |
| 463 } | 465 } |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 | 821 |
| 820 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( | 822 void RenderWidgetHostViewMac::AcceleratedSurfaceBuffersSwapped( |
| 821 gfx::PluginWindowHandle window) { | 823 gfx::PluginWindowHandle window) { |
| 822 PluginViewMap::iterator it = plugin_views_.find(window); | 824 PluginViewMap::iterator it = plugin_views_.find(window); |
| 823 DCHECK(plugin_views_.end() != it); | 825 DCHECK(plugin_views_.end() != it); |
| 824 if (plugin_views_.end() == it) { | 826 if (plugin_views_.end() == it) { |
| 825 return; | 827 return; |
| 826 } | 828 } |
| 827 DCHECK([it->second isKindOfClass:[AcceleratedPluginView class]]); | 829 DCHECK([it->second isKindOfClass:[AcceleratedPluginView class]]); |
| 828 | 830 |
| 831 plugin_container_manager_.SetSurfaceWasPaintedTo(window); |
| 829 AcceleratedPluginView* view = | 832 AcceleratedPluginView* view = |
| 830 static_cast<AcceleratedPluginView*>(it->second); | 833 static_cast<AcceleratedPluginView*>(it->second); |
| 831 [view setHidden:NO]; | 834 // The surface is hidden until its first paint, to not show gargabe. |
| 835 if (plugin_container_manager_.SurfaceShouldBeVisible(window)) |
| 836 [view setHidden:NO]; |
| 832 [view setSurfaceWasSwapped:YES]; | 837 [view setSurfaceWasSwapped:YES]; |
| 833 } | 838 } |
| 834 | 839 |
| 835 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstance( | 840 void RenderWidgetHostViewMac::DrawAcceleratedSurfaceInstance( |
| 836 CGLContextObj context, gfx::PluginWindowHandle plugin_handle) { | 841 CGLContextObj context, gfx::PluginWindowHandle plugin_handle) { |
| 837 // Called on the display link thread. | 842 // Called on the display link thread. |
| 838 PluginViewMap::iterator it = plugin_views_.find(plugin_handle); | 843 PluginViewMap::iterator it = plugin_views_.find(plugin_handle); |
| 839 DCHECK(plugin_views_.end() != it); | 844 DCHECK(plugin_views_.end() != it); |
| 840 if (plugin_views_.end() == it) { | 845 if (plugin_views_.end() == it) { |
| 841 return; | 846 return; |
| (...skipping 1444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2286 NSArray* toDeclare = [NSArray arrayWithObject:NSStringPboardType]; | 2291 NSArray* toDeclare = [NSArray arrayWithObject:NSStringPboardType]; |
| 2287 [pboard declareTypes:toDeclare owner:nil]; | 2292 [pboard declareTypes:toDeclare owner:nil]; |
| 2288 return [pboard setString:text forType:NSStringPboardType]; | 2293 return [pboard setString:text forType:NSStringPboardType]; |
| 2289 } | 2294 } |
| 2290 | 2295 |
| 2291 - (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard { | 2296 - (BOOL)readSelectionFromPasteboard:(NSPasteboard*)pboard { |
| 2292 return NO; | 2297 return NO; |
| 2293 } | 2298 } |
| 2294 | 2299 |
| 2295 @end | 2300 @end |
| OLD | NEW |