Title: [99891] trunk/Source/WebKit2
Revision
99891
Author
[email protected]
Date
2011-11-10 13:06:39 -0800 (Thu, 10 Nov 2011)

Log Message

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.

Modified Paths

Diff

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];
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to