Modified: trunk/Source/WebKit2/ChangeLog (99890 => 99891)
--- trunk/Source/WebKit2/ChangeLog 2011-11-10 21:06:34 UTC (rev 99890)
+++ trunk/Source/WebKit2/ChangeLog 2011-11-10 21:06:39 UTC (rev 99891)
@@ -1,5 +1,32 @@
2011-11-10 Anders Carlsson <[email protected]>
+ Add a simple content layer to TiledCoreAnimationDrawingArea
+ https://bugs.webkit.org/show_bug.cgi?id=72044
+
+ Reviewed by Darin Adler.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ Add a content layer member variable.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (-[WKContentLayer _initWithWebPage:WebKit::]):
+ Add initializer.
+
+ (-[WKContentLayer drawInContext:]):
+ Lay out and draw the web page.
+
+ (WebKit::TiledCoreAnimationDrawingArea::TiledCoreAnimationDrawingArea):
+ Add the content layer as a sublayer of the root layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::setNeedsDisplay):
+ (WebKit::TiledCoreAnimationDrawingArea::scroll):
+ Tell the content layer to paint.
+
+ (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
+ Resize the content layer as well.
+
+2011-11-10 Anders Carlsson <[email protected]>
+
The WKView layer hosting subview needs to be flipped
https://bugs.webkit.org/show_bug.cgi?id=72042
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (99890 => 99891)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2011-11-10 21:06:34 UTC (rev 99890)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2011-11-10 21:06:39 UTC (rev 99891)
@@ -30,6 +30,7 @@
#include <wtf/RetainPtr.h>
OBJC_CLASS CALayer;
+OBJC_CLASS WKContentLayer;
typedef struct __WKCARemoteLayerClientRef* WKCARemoteLayerClientRef;
@@ -56,6 +57,8 @@
RetainPtr<WKCARemoteLayerClientRef> m_remoteLayerClient;
RetainPtr<CALayer> m_rootLayer;
+
+ RetainPtr<WKContentLayer> m_contentLayer;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (99890 => 99891)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2011-11-10 21:06:34 UTC (rev 99890)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2011-11-10 21:06:39 UTC (rev 99891)
@@ -31,6 +31,7 @@
#import "WebPage.h"
#import "WebProcess.h"
#import <QuartzCore/QuartzCore.h>
+#import <WebCore/GraphicsContext.h>
#import <WebKitSystemInterface.h>
@interface CATransaction (Details)
@@ -39,6 +40,37 @@
using namespace WebCore;
+@interface WKContentLayer : CALayer {
+ WebKit::WebPage *_webPage;
+}
+
+- (id)initWithWebPage:(WebKit::WebPage *)webPage;
+
+@end
+
+@implementation WKContentLayer
+
+- (id)initWithWebPage:(WebKit::WebPage *)webPage
+{
+ self = [super init];
+ if (self)
+ self->_webPage = webPage;
+
+ return self;
+}
+
+- (void)drawInContext:(CGContextRef)context
+{
+ _webPage->layoutIfNeeded();
+
+ CGRect clipRect = CGContextGetClipBoundingBox(context);
+
+ GraphicsContext graphicsContext(context);
+ _webPage->drawRect(graphicsContext, enclosingIntRect(clipRect));
+}
+
+@end
+
namespace WebKit {
PassOwnPtr<TiledCoreAnimationDrawingArea> TiledCoreAnimationDrawingArea::create(WebPage* webPage, const WebPageCreationParameters& parameters)
@@ -51,16 +83,23 @@
{
m_rootLayer = [CALayer layer];
- m_rootLayer.get().frame = (CGRect)m_webPage->bounds();
+ CGRect rootLayerFrame = m_webPage->bounds();
+ m_rootLayer.get().frame = rootLayerFrame;
m_rootLayer.get().opaque = YES;
+ m_rootLayer.get().geometryFlipped = YES;
// Give the root layer a background color so it's visible on screen.
m_rootLayer.get().backgroundColor = CGColorCreateGenericRGB(1, 0, 0, 1);
+ m_contentLayer.adoptNS([[WKContentLayer alloc] initWithWebPage:webPage]);
+ m_contentLayer.get().frame = m_rootLayer.get().frame;
+
+ [m_rootLayer.get() addSublayer:m_contentLayer.get()];
+
mach_port_t serverPort = WebProcess::shared().compositingRenderServerPort();
m_remoteLayerClient = WKCARemoteLayerClientMakeWithServerPort(serverPort);
WKCARemoteLayerClientSetLayer(m_remoteLayerClient.get(), m_rootLayer.get());
-
+
LayerTreeContext layerTreeContext;
layerTreeContext.contextID = WKCARemoteLayerClientGetClientId(m_remoteLayerClient.get());
m_webPage->send(Messages::DrawingAreaProxy::EnterAcceleratedCompositingMode(0, layerTreeContext));
@@ -70,14 +109,14 @@
{
}
-void TiledCoreAnimationDrawingArea::setNeedsDisplay(const IntRect&)
+void TiledCoreAnimationDrawingArea::setNeedsDisplay(const IntRect& rect)
{
- // FIXME: Implement.
+ [m_contentLayer.get() setNeedsDisplayInRect:rect];
}
void TiledCoreAnimationDrawingArea::scroll(const IntRect& scrollRect, const IntSize& scrollOffset)
{
- // FIXME: Implement.
+ [m_contentLayer.get() setNeedsDisplayInRect:scrollRect];
}
void TiledCoreAnimationDrawingArea::setRootCompositingLayer(GraphicsLayer*)
@@ -92,9 +131,15 @@
void TiledCoreAnimationDrawingArea::updateGeometry(const IntSize& viewSize)
{
+ m_webPage->setSize(viewSize);
+ m_webPage->layoutIfNeeded();
+
[CATransaction begin];
[CATransaction setDisableActions:YES];
- [m_rootLayer.get() setFrame:CGRectMake(0, 0, viewSize.width(), viewSize.height())];
+
+ m_rootLayer.get().frame = CGRectMake(0, 0, viewSize.width(), viewSize.height());
+ m_contentLayer.get().frame = CGRectMake(0, 0, viewSize.width(), viewSize.height());
+
[CATransaction commit];
[CATransaction flush];