Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #import "content/browser/renderer_host/accelerated_plugin_view_mac.h" | 5 #import "content/browser/renderer_host/accelerated_plugin_view_mac.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
| 9 #include "content/browser/browser_thread.h" | 9 #include "content/browser/browser_thread.h" |
| 10 #include "content/browser/renderer_host/render_widget_host_view_mac.h" | 10 #include "content/browser/renderer_host/render_widget_host_view_mac.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 LOG(ERROR) << "CGLPixelFormatObj failed"; | 65 LOG(ERROR) << "CGLPixelFormatObj failed"; |
| 66 | 66 |
| 67 // Draw at beam vsync. | 67 // Draw at beam vsync. |
| 68 GLint swapInterval; | 68 GLint swapInterval; |
| 69 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync)) | 69 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDisableGpuVsync)) |
| 70 swapInterval = 0; | 70 swapInterval = 0; |
| 71 else | 71 else |
| 72 swapInterval = 1; | 72 swapInterval = 1; |
| 73 [glContext_ setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; | 73 [glContext_ setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval]; |
| 74 | 74 |
| 75 handlingGlobalFrameDidChange_ = NO; | |
| 75 [[NSNotificationCenter defaultCenter] | 76 [[NSNotificationCenter defaultCenter] |
| 76 addObserver:self | 77 addObserver:self |
| 77 selector:@selector(globalFrameDidChange:) | 78 selector:@selector(globalFrameDidChange:) |
| 78 name:NSViewGlobalFrameDidChangeNotification | 79 name:NSViewGlobalFrameDidChangeNotification |
| 79 object:self]; | 80 object:self]; |
| 80 } | 81 } |
| 81 return self; | 82 return self; |
| 82 } | 83 } |
| 83 | 84 |
| 84 - (void)dealloc { | 85 - (void)dealloc { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 - (void)rightMouseDown:(NSEvent*)event { | 145 - (void)rightMouseDown:(NSEvent*)event { |
| 145 // The NSResponder documentation: "Note: The NSView implementation of this | 146 // The NSResponder documentation: "Note: The NSView implementation of this |
| 146 // method does not pass the message up the responder chain, it handles it | 147 // method does not pass the message up the responder chain, it handles it |
| 147 // directly." | 148 // directly." |
| 148 // That's bad, we want the next responder (RWHVMac) to handle this event to | 149 // That's bad, we want the next responder (RWHVMac) to handle this event to |
| 149 // dispatch it to the renderer. | 150 // dispatch it to the renderer. |
| 150 [[self nextResponder] rightMouseDown:event]; | 151 [[self nextResponder] rightMouseDown:event]; |
| 151 } | 152 } |
| 152 | 153 |
| 153 - (void)globalFrameDidChange:(NSNotification*)notification { | 154 - (void)globalFrameDidChange:(NSNotification*)notification { |
| 154 // This call to -update can call -globalFrameDidChange: again, see | 155 // Short-circuit recursive calls. |
| 155 // http://crbug.com/55754 comments 22 and 24. | 156 if (!handlingGlobalFrameDidChange_) { |
|
Nico
2011/10/13 02:26:07
nit: early return instead, less nesting that way.
Ken Russell (switch to Gerrit)
2011/10/13 18:41:20
Right, thanks. Done.
| |
| 156 [glContext_ update]; | 157 handlingGlobalFrameDidChange_ = YES; |
| 157 | 158 |
| 158 // You would think that -update updates the viewport. You would be wrong. | 159 // This call to -update can call -globalFrameDidChange: again, see |
| 159 CGLSetCurrentContext(cglContext_); | 160 // http://crbug.com/55754 comments 22 and 24. |
| 160 NSSize size = [self frame].size; | 161 [glContext_ update]; |
| 161 glViewport(0, 0, size.width, size.height); | 162 |
| 162 CGLSetCurrentContext(0); | 163 // You would think that -update updates the viewport. You would be wrong. |
| 164 CGLSetCurrentContext(cglContext_); | |
| 165 NSSize size = [self frame].size; | |
| 166 glViewport(0, 0, size.width, size.height); | |
| 167 CGLSetCurrentContext(0); | |
| 168 | |
| 169 handlingGlobalFrameDidChange_ = NO; | |
| 170 } | |
| 163 } | 171 } |
| 164 | 172 |
| 165 - (void)prepareForGLRendering { | 173 - (void)prepareForGLRendering { |
| 166 TRACE_EVENT0("browser", "AcceleratedPluginView::prepareForGLRendering"); | 174 TRACE_EVENT0("browser", "AcceleratedPluginView::prepareForGLRendering"); |
| 167 | 175 |
| 168 // If we're using OpenGL, make sure it is connected. | 176 // If we're using OpenGL, make sure it is connected. |
| 169 if ([glContext_ view] != self) { | 177 if ([glContext_ view] != self) { |
| 170 [glContext_ setView:self]; | 178 [glContext_ setView:self]; |
| 171 } | 179 } |
| 172 } | 180 } |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 238 return YES; | 246 return YES; |
| 239 } | 247 } |
| 240 | 248 |
| 241 - (void)viewDidMoveToSuperview { | 249 - (void)viewDidMoveToSuperview { |
| 242 TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidMoveToSuperview"); | 250 TRACE_EVENT0("browser", "AcceleratedPluginView::viewDidMoveToSuperview"); |
| 243 if (![self superview]) | 251 if (![self superview]) |
| 244 [self onRenderWidgetHostViewGone]; | 252 [self onRenderWidgetHostViewGone]; |
| 245 } | 253 } |
| 246 @end | 254 @end |
| 247 | 255 |
| OLD | NEW |