OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 922 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
933 | 933 |
934 if (paintInfo.phase != PaintPhaseChildOutlines) { | 934 if (paintInfo.phase != PaintPhaseChildOutlines) { |
935 if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhas
eSelfOutline) { | 935 if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhas
eSelfOutline) { |
936 // Add ourselves to the paint info struct's list of inlines that nee
d to paint their | 936 // Add ourselves to the paint info struct's list of inlines that nee
d to paint their |
937 // outlines. | 937 // outlines. |
938 if (renderer()->style()->visibility() == VISIBLE && renderer()->hasO
utline() && !isRootInlineBox()) { | 938 if (renderer()->style()->visibility() == VISIBLE && renderer()->hasO
utline() && !isRootInlineBox()) { |
939 RenderInline* inlineFlow = toRenderInline(renderer()); | 939 RenderInline* inlineFlow = toRenderInline(renderer()); |
940 | 940 |
941 RenderBlock* cb = 0; | 941 RenderBlock* cb = 0; |
942 bool containingBlockPaintsContinuationOutline = inlineFlow->cont
inuation() || inlineFlow->isInlineElementContinuation(); | 942 bool containingBlockPaintsContinuationOutline = inlineFlow->cont
inuation() || inlineFlow->isInlineElementContinuation(); |
943 if (containingBlockPaintsContinuationOutline) { | 943 if (containingBlockPaintsContinuationOutline) { |
944 cb = renderer()->containingBlock()->containingBlock(); | 944 // FIXME: See https://bugs.webkit.org/show_bug.cgi?id=54690.
We currently don't reconnect inline continuations |
945 | 945 // after a child removal. As a result, those merged inlines
do not get seperated and hence not get enclosed by |
946 for (RenderBoxModelObject* box = boxModelObject(); box != cb
; box = box->parent()->enclosingBoxModelObject()) { | 946 // anonymous blocks. In this case, it is better to bail out
and paint it ourself. |
947 if (box->hasSelfPaintingLayer()) { | 947 RenderBlock* enclosingAnonymousBlock = renderer()->containin
gBlock(); |
948 containingBlockPaintsContinuationOutline = false; | 948 if (!enclosingAnonymousBlock->isAnonymousBlock()) |
949 break; | 949 containingBlockPaintsContinuationOutline = false; |
| 950 else { |
| 951 cb = enclosingAnonymousBlock->containingBlock(); |
| 952 for (RenderBoxModelObject* box = boxModelObject(); box !
= cb; box = box->parent()->enclosingBoxModelObject()) { |
| 953 if (box->hasSelfPaintingLayer()) { |
| 954 containingBlockPaintsContinuationOutline = false
; |
| 955 break; |
| 956 } |
950 } | 957 } |
951 } | 958 } |
952 } | 959 } |
953 | 960 |
954 if (containingBlockPaintsContinuationOutline) { | 961 if (containingBlockPaintsContinuationOutline) { |
955 // Add ourselves to the containing block of the entire conti
nuation so that it can | 962 // Add ourselves to the containing block of the entire conti
nuation so that it can |
956 // paint us atomically. | 963 // paint us atomically. |
957 cb->addContinuationWithOutline(toRenderInline(renderer()->no
de()->renderer())); | 964 cb->addContinuationWithOutline(toRenderInline(renderer()->no
de()->renderer())); |
958 } else if (!inlineFlow->isInlineElementContinuation()) | 965 } else if (!inlineFlow->isInlineElementContinuation()) |
959 paintInfo.outlineObjects->add(inlineFlow); | 966 paintInfo.outlineObjects->add(inlineFlow); |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1349 ASSERT(child->prevOnLine() == prev); | 1356 ASSERT(child->prevOnLine() == prev); |
1350 prev = child; | 1357 prev = child; |
1351 } | 1358 } |
1352 ASSERT(prev == m_lastChild); | 1359 ASSERT(prev == m_lastChild); |
1353 #endif | 1360 #endif |
1354 } | 1361 } |
1355 | 1362 |
1356 #endif | 1363 #endif |
1357 | 1364 |
1358 } // namespace WebCore | 1365 } // namespace WebCore |
OLD | NEW |