Index: ui/base/cocoa/underlay_opengl_hosting_window.mm |
diff --git a/ui/base/cocoa/underlay_opengl_hosting_window.mm b/ui/base/cocoa/underlay_opengl_hosting_window.mm |
index 39a30360441412d7b0852c43f87022902e5ae004..489054ca7fe13da6c3f4a1349fc9dc6db223f756 100644 |
--- a/ui/base/cocoa/underlay_opengl_hosting_window.mm |
+++ b/ui/base/cocoa/underlay_opengl_hosting_window.mm |
@@ -4,89 +4,7 @@ |
#import "ui/base/cocoa/underlay_opengl_hosting_window.h" |
-#import <objc/runtime.h> |
- |
-#include "base/command_line.h" |
#include "base/logging.h" |
-#include "base/mac/mac_util.h" |
-#include "base/mac/scoped_nsautorelease_pool.h" |
-#include "base/mac/scoped_nsobject.h" |
-#include "ui/base/ui_base_switches.h" |
- |
-@interface NSWindow (UndocumentedAPI) |
-// Normally, punching a hole in a window by painting a subview with a |
-// transparent color causes the shadow for that area to also not be present. |
-// That feature is "content has shadow", which means that shadows are effective |
-// even in the content area of the window. If, however, "content has shadow" is |
-// turned off, then the transparent area of the content casts a shadow. The one |
-// tricky part is that even if "content has shadow" is turned off, "the content" |
-// is defined as being the scanline from the leftmost opaque part to the |
-// rightmost opaque part. Therefore, to force the entire window to have a |
-// shadow, make sure that for the entire content region, there is an opaque area |
-// on the right and left edge of the window. |
-- (void)_setContentHasShadow:(BOOL)shadow; |
-@end |
- |
-@interface OpaqueView : NSView |
-@end |
- |
-namespace { |
- |
-bool CoreAnimationIsEnabled() { |
- static bool is_enabled = !CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kDisableCoreAnimation); |
- return is_enabled; |
-} |
- |
-NSComparisonResult OpaqueViewsOnTop(id view1, id view2, void* context) { |
- BOOL view_1_is_opaque_view = [view1 isKindOfClass:[OpaqueView class]]; |
- BOOL view_2_is_opaque_view = [view2 isKindOfClass:[OpaqueView class]]; |
- if (view_1_is_opaque_view && view_2_is_opaque_view) |
- return NSOrderedSame; |
- if (view_1_is_opaque_view) |
- return NSOrderedDescending; |
- if (view_2_is_opaque_view) |
- return NSOrderedAscending; |
- return NSOrderedSame; |
-} |
- |
-} // namespace |
- |
-@implementation OpaqueView |
- |
-- (void)drawRect:(NSRect)r { |
- [[NSColor blackColor] set]; |
- NSRectFill(r); |
-} |
- |
-- (void)resetCursorRects { |
- // When a view is moved relative to its peers, its cursor rects are reset. |
- // (This is an undocumented side-effect.) At that time, verify that any |
- // OpaqueViews are z-ordered in the front, and enforce it if need be. |
- |
- NSView* rootView = [self superview]; |
- DCHECK_EQ((NSView*)nil, [rootView superview]); |
- NSArray* subviews = [rootView subviews]; |
- |
- // If a window has any opaques, it will have exactly two. |
- DCHECK_EQ(2U, [[subviews indexesOfObjectsPassingTest: |
- ^(id el, NSUInteger i, BOOL *stop) { |
- return [el isKindOfClass:[OpaqueView class]]; |
- }] count]); |
- |
- NSUInteger count = [subviews count]; |
- if (count < 2) |
- return; |
- |
- if (![[subviews objectAtIndex:count - 1] isKindOfClass:[OpaqueView class]] || |
- ![[subviews objectAtIndex:count - 2] isKindOfClass:[OpaqueView class]]) { |
- // Do not sort the subviews array here and call -[NSView setSubviews:] as |
- // that causes a crash on 10.6. |
- [rootView sortSubviewsUsingFunction:OpaqueViewsOnTop context:NULL]; |
- } |
-} |
- |
-@end |
@implementation UnderlayOpenGLHostingWindow |
@@ -107,58 +25,10 @@ NSComparisonResult OpaqueViewsOnTop(id view1, id view2, void* context) { |
// (This is checked here because UnderlayOpenGLHostingWindow is the base of |
// most Chromium windows, not because this is related to its functionality.) |
DCHECK(!NSIsEmptyRect(contentRect)); |
- if ((self = [super initWithContentRect:contentRect |
- styleMask:windowStyle |
- backing:bufferingType |
- defer:deferCreation])) { |
- if (CoreAnimationIsEnabled()) { |
- // If CoreAnimation is used, then the hole punching technique won't be |
- // used. Bail now and don't play any special games with the shadow. |
- // TODO(avi): Rip all this shadow code out once CoreAnimation can't be |
- // turned off. http://crbug.com/336554 |
- return self; |
- } |
- |
- // OpenGL-accelerated content works by punching holes in windows. Therefore |
- // all windows hosting OpenGL content must not be opaque. |
- [self setOpaque:NO]; |
- |
- if (windowStyle & NSTitledWindowMask) { |
- // Only fiddle with shadows if the window is a proper window with a |
- // title bar and all. |
- [self _setContentHasShadow:NO]; |
- |
- NSView* rootView = [[self contentView] superview]; |
- const NSRect rootBounds = [rootView bounds]; |
- |
- // On 10.7/8, the bottom corners of the window are rounded by magic at a |
- // deeper level than the NSThemeFrame, so it is OK to have the opaques |
- // go all the way to the bottom. |
- const CGFloat kTopEdgeInset = 16; |
- const CGFloat kAlphaValueJustOpaqueEnough = 0.005; |
- |
- base::scoped_nsobject<NSView> leftOpaque([[OpaqueView alloc] |
- initWithFrame:NSMakeRect(NSMinX(rootBounds), |
- NSMinY(rootBounds), |
- 1, |
- NSHeight(rootBounds) - kTopEdgeInset)]); |
- [leftOpaque setAutoresizingMask:NSViewMaxXMargin | |
- NSViewHeightSizable]; |
- [leftOpaque setAlphaValue:kAlphaValueJustOpaqueEnough]; |
- [rootView addSubview:leftOpaque]; |
- |
- base::scoped_nsobject<NSView> rightOpaque([[OpaqueView alloc] |
- initWithFrame:NSMakeRect(NSMaxX(rootBounds) - 1, |
- NSMinY(rootBounds), |
- 1, |
- NSHeight(rootBounds) - kTopEdgeInset)]); |
- [rightOpaque setAutoresizingMask:NSViewMinXMargin | |
- NSViewHeightSizable]; |
- [rightOpaque setAlphaValue:kAlphaValueJustOpaqueEnough]; |
- [rootView addSubview:rightOpaque]; |
- } |
- } |
- |
+ self = [super initWithContentRect:contentRect |
+ styleMask:windowStyle |
+ backing:bufferingType |
+ defer:deferCreation]; |
return self; |
} |