| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_mac.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" |
| 6 | 6 |
| 7 #include <QuartzCore/QuartzCore.h> | 7 #include <QuartzCore/QuartzCore.h> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 width, | 948 width, |
| 949 height, | 949 height, |
| 950 transport_dib); | 950 transport_dib); |
| 951 } | 951 } |
| 952 | 952 |
| 953 void RenderWidgetHostViewMac::CompositorSwapBuffers(uint64 surface_handle, | 953 void RenderWidgetHostViewMac::CompositorSwapBuffers(uint64 surface_handle, |
| 954 int32 route_id, | 954 int32 route_id, |
| 955 int32 gpu_host_id) { | 955 int32 gpu_host_id) { |
| 956 pending_swap_buffers_acks_.push_back(std::make_pair(route_id, gpu_host_id)); | 956 pending_swap_buffers_acks_.push_back(std::make_pair(route_id, gpu_host_id)); |
| 957 if (!compositing_iosurface_.get() && !is_hidden_) { | 957 if (!compositing_iosurface_.get() && !is_hidden_) { |
| 958 [cocoa_view_ addedGLContext]; | |
| 959 compositing_iosurface_.reset(CompositingIOSurfaceMac::Create()); | 958 compositing_iosurface_.reset(CompositingIOSurfaceMac::Create()); |
| 960 } | 959 } |
| 961 | 960 |
| 962 if (compositing_iosurface_.get() && !is_hidden_) { | 961 if (compositing_iosurface_.get() && !is_hidden_) { |
| 963 last_frame_was_accelerated_ = true; | 962 last_frame_was_accelerated_ = true; |
| 964 compositing_iosurface_->SetIOSurface(surface_handle); | 963 compositing_iosurface_->SetIOSurface(surface_handle); |
| 965 [cocoa_view_ setNeedsDisplay:YES]; | 964 [cocoa_view_ setNeedsDisplay:YES]; |
| 966 } else { | 965 } else { |
| 967 AckPendingCompositorSwapBuffers(); | 966 AckPendingCompositorSwapBuffers(); |
| 968 } | 967 } |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1220 if (self) { | 1219 if (self) { |
| 1221 editCommand_helper_.reset(new RenderWidgetHostViewMacEditCommandHelper); | 1220 editCommand_helper_.reset(new RenderWidgetHostViewMacEditCommandHelper); |
| 1222 editCommand_helper_->AddEditingSelectorsToClass([self class]); | 1221 editCommand_helper_->AddEditingSelectorsToClass([self class]); |
| 1223 | 1222 |
| 1224 renderWidgetHostView_.reset(r); | 1223 renderWidgetHostView_.reset(r); |
| 1225 canBeKeyView_ = YES; | 1224 canBeKeyView_ = YES; |
| 1226 focusedPluginIdentifier_ = -1; | 1225 focusedPluginIdentifier_ = -1; |
| 1227 | 1226 |
| 1228 // OpenGL support: | 1227 // OpenGL support: |
| 1229 handlingGlobalFrameDidChange_ = NO; | 1228 handlingGlobalFrameDidChange_ = NO; |
| 1230 hasGLContext_ = NO; | |
| 1231 [[NSNotificationCenter defaultCenter] | 1229 [[NSNotificationCenter defaultCenter] |
| 1232 addObserver:self | 1230 addObserver:self |
| 1233 selector:@selector(globalFrameDidChange:) | 1231 selector:@selector(globalFrameDidChange:) |
| 1234 name:NSViewGlobalFrameDidChangeNotification | 1232 name:NSViewGlobalFrameDidChangeNotification |
| 1235 object:self]; | 1233 object:self]; |
| 1236 } | 1234 } |
| 1237 return self; | 1235 return self; |
| 1238 } | 1236 } |
| 1239 | 1237 |
| 1240 - (void)dealloc { | 1238 - (void)dealloc { |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1757 for (NSView* subview in [self subviews]) { | 1755 for (NSView* subview in [self subviews]) { |
| 1758 if (![subview isKindOfClass:[RenderWidgetHostViewCocoa class]]) | 1756 if (![subview isKindOfClass:[RenderWidgetHostViewCocoa class]]) |
| 1759 continue; // Skip plugin views. | 1757 continue; // Skip plugin views. |
| 1760 | 1758 |
| 1761 [static_cast<RenderWidgetHostViewCocoa*>(subview) | 1759 [static_cast<RenderWidgetHostViewCocoa*>(subview) |
| 1762 renderWidgetHostViewMac]->KillSelf(); | 1760 renderWidgetHostViewMac]->KillSelf(); |
| 1763 } | 1761 } |
| 1764 } | 1762 } |
| 1765 } | 1763 } |
| 1766 | 1764 |
| 1767 // OpenGL support | |
| 1768 - (void)addedGLContext { | |
| 1769 hasGLContext_ = YES; | |
| 1770 if (![self isHiddenOrHasHiddenAncestor]) { | |
| 1771 // Intentionally leak underlaySurface count so that the window never changes | |
| 1772 // back to opaque. This is to prevent black/transparent flashing that | |
| 1773 // appears during tab switching otherwise. | |
| 1774 // TODO(jbates) Remove the underlaySurfaceAdded feature completely from | |
| 1775 // ChromeBrowserWindow when the subtle gray line corner bug is fixed. Then | |
| 1776 // the window can be permanently set to non-opaque. crbug.com/56154 | |
| 1777 if ([[self window] respondsToSelector:@selector(underlaySurfaceAdded)]) | |
| 1778 [static_cast<id>([self window]) underlaySurfaceAdded]; | |
| 1779 } | |
| 1780 } | |
| 1781 | |
| 1782 - (void)viewWillMoveToWindow:(NSWindow*)newWindow { | 1765 - (void)viewWillMoveToWindow:(NSWindow*)newWindow { |
| 1783 if (![self isHiddenOrHasHiddenAncestor]) { | |
| 1784 // Intentionally leak underlaySurface count (see comment in addedGLContext). | |
| 1785 if (hasGLContext_ && | |
| 1786 [newWindow respondsToSelector:@selector(underlaySurfaceAdded)]) | |
| 1787 [static_cast<id>(newWindow) underlaySurfaceAdded]; | |
| 1788 } | |
| 1789 | |
| 1790 // We're messing with the window, so do this to ensure no flashes. This one | 1766 // We're messing with the window, so do this to ensure no flashes. This one |
| 1791 // prevents a flash when the current tab is closed. | 1767 // prevents a flash when the current tab is closed. |
| 1792 [[self window] disableScreenUpdatesUntilFlush]; | 1768 [[self window] disableScreenUpdatesUntilFlush]; |
| 1793 } | 1769 } |
| 1794 | 1770 |
| 1795 - (void) globalFrameDidChange:(NSNotification*)notification { | 1771 - (void)globalFrameDidChange:(NSNotification*)notification { |
| 1796 if (handlingGlobalFrameDidChange_) | 1772 if (handlingGlobalFrameDidChange_) |
| 1797 return; | 1773 return; |
| 1798 | 1774 |
| 1799 handlingGlobalFrameDidChange_ = YES; | 1775 handlingGlobalFrameDidChange_ = YES; |
| 1800 if (renderWidgetHostView_->compositing_iosurface_.get()) | 1776 if (renderWidgetHostView_->compositing_iosurface_.get()) |
| 1801 renderWidgetHostView_->compositing_iosurface_->GlobalFrameDidChange(); | 1777 renderWidgetHostView_->compositing_iosurface_->GlobalFrameDidChange(); |
| 1802 handlingGlobalFrameDidChange_ = NO; | 1778 handlingGlobalFrameDidChange_ = NO; |
| 1803 } | 1779 } |
| 1804 | 1780 |
| 1805 - (void)setFrameSize:(NSSize)newSize { | 1781 - (void)setFrameSize:(NSSize)newSize { |
| (...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2878 if (!string) return NO; | 2854 if (!string) return NO; |
| 2879 | 2855 |
| 2880 // If the user is currently using an IME, confirm the IME input, | 2856 // If the user is currently using an IME, confirm the IME input, |
| 2881 // and then insert the text from the service, the same as TextEdit and Safari. | 2857 // and then insert the text from the service, the same as TextEdit and Safari. |
| 2882 [self confirmComposition]; | 2858 [self confirmComposition]; |
| 2883 [self insertText:string]; | 2859 [self insertText:string]; |
| 2884 return YES; | 2860 return YES; |
| 2885 } | 2861 } |
| 2886 | 2862 |
| 2887 @end | 2863 @end |
| OLD | NEW |