Title: [117510] trunk/Source/WebKit/mac
- Revision
- 117510
- Author
- aes...@apple.com
- Date
- 2012-05-17 16:11:20 -0700 (Thu, 17 May 2012)
Log Message
Don't let -[CALayer renderInContext:] try to render WebView's root layer
https://bugs.webkit.org/show_bug.cgi?id=86773
<rdar://problem/10950075>
Reviewed by Dan Bernstein.
-[CALayer renderInContext:] doesn't correctly render our layer tree, so
don't let it try. Calling drawRect: with a bitmap context will already
do the right thing for WebViews.
* WebView/WebHTMLView.mm: Create a subclass of CALayer called WebLayerHostingLayer.
(-[WebLayerHostingLayer renderInContext:]): override renderInContext: to be a NOOP.
(-[WebHTMLView attachRootLayer:]): Create a WebLayerHostingLayer rather than a CALayer.
Modified Paths
Diff
Modified: trunk/Source/WebKit/mac/ChangeLog (117509 => 117510)
--- trunk/Source/WebKit/mac/ChangeLog 2012-05-17 23:03:05 UTC (rev 117509)
+++ trunk/Source/WebKit/mac/ChangeLog 2012-05-17 23:11:20 UTC (rev 117510)
@@ -1,3 +1,19 @@
+2012-05-17 Andy Estes <aes...@apple.com>
+
+ Don't let -[CALayer renderInContext:] try to render WebView's root layer
+ https://bugs.webkit.org/show_bug.cgi?id=86773
+ <rdar://problem/10950075>
+
+ Reviewed by Dan Bernstein.
+
+ -[CALayer renderInContext:] doesn't correctly render our layer tree, so
+ don't let it try. Calling drawRect: with a bitmap context will already
+ do the right thing for WebViews.
+
+ * WebView/WebHTMLView.mm: Create a subclass of CALayer called WebLayerHostingLayer.
+ (-[WebLayerHostingLayer renderInContext:]): override renderInContext: to be a NOOP.
+ (-[WebHTMLView attachRootLayer:]): Create a WebLayerHostingLayer rather than a CALayer.
+
2012-05-17 Hironori Bono <hb...@chromium.org>
[Refactoring] Move platform-specific code in Editor::respondToChangedSelection to the WebKit layer
Modified: trunk/Source/WebKit/mac/WebView/WebHTMLView.mm (117509 => 117510)
--- trunk/Source/WebKit/mac/WebView/WebHTMLView.mm 2012-05-17 23:03:05 UTC (rev 117509)
+++ trunk/Source/WebKit/mac/WebView/WebHTMLView.mm 2012-05-17 23:11:20 UTC (rev 117510)
@@ -212,6 +212,20 @@
}
@end
+@interface WebRootLayer : CALayer
+@end
+
+@implementation WebRootLayer
+- (void)renderInContext:(CGContextRef)ctx
+{
+ // AppKit calls -[CALayer renderInContext:] to render layer-backed views
+ // into bitmap contexts, but renderInContext: doesn't capture mask layers
+ // (<rdar://problem/9539526>), so we can't rely on it. Since our layer
+ // contents will have already been rendered by drawRect:, we can safely make
+ // this a NOOP.
+}
+@end
+
// if YES, do the standard NSView hit test (which can't give the right result when HTML overlaps a view)
static BOOL forceNSViewHitTest;
@@ -5466,7 +5480,7 @@
}
// Make a container layer, which will get sized/positioned by AppKit and CA.
- CALayer* viewLayer = [CALayer layer];
+ CALayer* viewLayer = [WebRootLayer layer];
#ifdef BUILDING_ON_LEOPARD
// Turn off default animations.
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes