Title: [153112] trunk/Source/WebCore
Revision
153112
Author
[email protected]
Date
2013-07-24 20:16:00 -0700 (Wed, 24 Jul 2013)

Log Message

[iOS] Captions are clipped in documents using pagination
https://bugs.webkit.org/show_bug.cgi?id=119072

Reviewed by Beth Dakin.

MediaControlTextTrackContainerElement::createTextTrackRepresentationImage() is called
to paint captions into a layer used for fullscreen video. It did the painting using
a subtree paint, but starting at the root RenderView's layer. This is problematic,
because the caption painting is subject to clipping for columns, and any enclosing
overflow:hidden container.

Fix this by starting the paint at the MediaControlTextTrackContainerElement's
renderer's layer. By doing this we don't have to worry about an offset, so no
translation is required.

Also make sure we update layer before grabbing the renderer (in case layout
destroys it).

* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (153111 => 153112)


--- trunk/Source/WebCore/ChangeLog	2013-07-25 02:32:37 UTC (rev 153111)
+++ trunk/Source/WebCore/ChangeLog	2013-07-25 03:16:00 UTC (rev 153112)
@@ -1,5 +1,28 @@
 2013-07-24  Simon Fraser  <[email protected]>
 
+        [iOS] Captions are clipped in documents using pagination
+        https://bugs.webkit.org/show_bug.cgi?id=119072
+
+        Reviewed by Beth Dakin.
+
+        MediaControlTextTrackContainerElement::createTextTrackRepresentationImage() is called
+        to paint captions into a layer used for fullscreen video. It did the painting using
+        a subtree paint, but starting at the root RenderView's layer. This is problematic,
+        because the caption painting is subject to clipping for columns, and any enclosing
+        overflow:hidden container.
+        
+        Fix this by starting the paint at the MediaControlTextTrackContainerElement's
+        renderer's layer. By doing this we don't have to worry about an offset, so no
+        translation is required.
+        
+        Also make sure we update layer before grabbing the renderer (in case layout
+        destroys it).
+
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
+
+2013-07-24  Simon Fraser  <[email protected]>
+
         REGRESSION (r152335): Mac Pro title occluded in MobileSafari; can't scroll page
         https://bugs.webkit.org/show_bug.cgi?id=119066
         <rdar://problem/14499184>

Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (153111 => 153112)


--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2013-07-25 02:32:37 UTC (rev 153111)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2013-07-25 03:16:00 UTC (rev 153112)
@@ -1397,35 +1397,32 @@
     if (!hasChildNodes())
         return 0;
 
-    RenderObject* renderer = this->renderer();
-    if (!renderer)
-        return 0;
-
     Frame* frame = document()->frame();
     if (!frame)
         return 0;
 
     document()->updateLayout();
 
-    LayoutRect topLevelRect;
-    IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect));
+    RenderObject* renderer = this->renderer();
+    if (!renderer)
+        return 0;
 
+    if (!renderer->hasLayer())
+        return 0;
+
+    RenderLayer* layer = toRenderLayerModelObject(renderer)->layer();
+
     float deviceScaleFactor = 1;
     if (Page* page = document()->page())
         deviceScaleFactor = page->deviceScaleFactor();
 
+    IntRect paintingRect = IntRect(IntPoint(), layer->size());
     OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB));
     if (!buffer)
         return 0;
 
-    // Translate the renderer painting rect into graphics context coordinates.
-    FloatSize translation(-paintingRect.x(), -paintingRect.y());
+    layer->paint(buffer->context(), paintingRect, PaintBehaviorFlattenCompositingLayers, 0, 0, RenderLayer::PaintLayerPaintingCompositingAllPhases);
 
-    buffer->context()->translate(translation);
-
-    RenderLayer* layer = frame->contentRenderer()->layer();
-    layer->paint(buffer->context(), paintingRect, PaintBehaviorFlattenCompositingLayers, renderer, 0, RenderLayer::PaintLayerPaintingCompositingAllPhases);
-
     return buffer->copyImage();
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to