Changeset 153112 in webkit


Ignore:
Timestamp:
Jul 24, 2013 8:16:00 PM (11 years ago)
Author:
Simon Fraser
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):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r153105 r153112  
     12013-07-24  Simon Fraser  <simon.fraser@apple.com>
     2
     3        [iOS] Captions are clipped in documents using pagination
     4        https://bugs.webkit.org/show_bug.cgi?id=119072
     5
     6        Reviewed by Beth Dakin.
     7
     8        MediaControlTextTrackContainerElement::createTextTrackRepresentationImage() is called
     9        to paint captions into a layer used for fullscreen video. It did the painting using
     10        a subtree paint, but starting at the root RenderView's layer. This is problematic,
     11        because the caption painting is subject to clipping for columns, and any enclosing
     12        overflow:hidden container.
     13       
     14        Fix this by starting the paint at the MediaControlTextTrackContainerElement's
     15        renderer's layer. By doing this we don't have to worry about an offset, so no
     16        translation is required.
     17       
     18        Also make sure we update layer before grabbing the renderer (in case layout
     19        destroys it).
     20
     21        * html/shadow/MediaControlElements.cpp:
     22        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
     23
    1242013-07-24  Simon Fraser  <simon.fraser@apple.com>
    225
  • trunk/Source/WebCore/html/shadow/MediaControlElements.cpp

    r152975 r153112  
    13981398        return 0;
    13991399
     1400    Frame* frame = document()->frame();
     1401    if (!frame)
     1402        return 0;
     1403
     1404    document()->updateLayout();
     1405
    14001406    RenderObject* renderer = this->renderer();
    14011407    if (!renderer)
    14021408        return 0;
    14031409
    1404     Frame* frame = document()->frame();
    1405     if (!frame)
     1410    if (!renderer->hasLayer())
    14061411        return 0;
    14071412
    1408     document()->updateLayout();
    1409 
    1410     LayoutRect topLevelRect;
    1411     IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLevelRect));
     1413    RenderLayer* layer = toRenderLayerModelObject(renderer)->layer();
    14121414
    14131415    float deviceScaleFactor = 1;
     
    14151417        deviceScaleFactor = page->deviceScaleFactor();
    14161418
     1419    IntRect paintingRect = IntRect(IntPoint(), layer->size());
    14171420    OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), deviceScaleFactor, ColorSpaceDeviceRGB));
    14181421    if (!buffer)
    14191422        return 0;
    14201423
    1421     // Translate the renderer painting rect into graphics context coordinates.
    1422     FloatSize translation(-paintingRect.x(), -paintingRect.y());
    1423 
    1424     buffer->context()->translate(translation);
    1425 
    1426     RenderLayer* layer = frame->contentRenderer()->layer();
    1427     layer->paint(buffer->context(), paintingRect, PaintBehaviorFlattenCompositingLayers, renderer, 0, RenderLayer::PaintLayerPaintingCompositingAllPhases);
     1424    layer->paint(buffer->context(), paintingRect, PaintBehaviorFlattenCompositingLayers, 0, 0, RenderLayer::PaintLayerPaintingCompositingAllPhases);
    14281425
    14291426    return buffer->copyImage();
Note: See TracChangeset for help on using the changeset viewer.