Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: ui/base/cocoa/underlay_opengl_hosting_window.mm

Issue 469003006: Remove --disable-core-animation flag (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@erikchen_patch
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698