| 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 if (child->isText()) { | 158 if (child->isText()) { |
| 159 RenderStyle* childStyle = child->renderer().style(isFirstLineStyle()
); | 159 RenderStyle* childStyle = child->renderer().style(isFirstLineStyle()
); |
| 160 if (childStyle->letterSpacing() < 0 || childStyle->textShadow() || c
hildStyle->textEmphasisMark() != TextEmphasisMarkNone || childStyle->textStrokeW
idth()) | 160 if (childStyle->letterSpacing() < 0 || childStyle->textShadow() || c
hildStyle->textEmphasisMark() != TextEmphasisMarkNone || childStyle->textStrokeW
idth()) |
| 161 child->clearKnownToHaveNoOverflow(); | 161 child->clearKnownToHaveNoOverflow(); |
| 162 } else if (child->renderer().isReplaced()) { | 162 } else if (child->renderer().isReplaced()) { |
| 163 RenderBox& box = toRenderBox(child->renderer()); | 163 RenderBox& box = toRenderBox(child->renderer()); |
| 164 if (box.hasRenderOverflow() || box.hasSelfPaintingLayer()) | 164 if (box.hasRenderOverflow() || box.hasSelfPaintingLayer()) |
| 165 child->clearKnownToHaveNoOverflow(); | 165 child->clearKnownToHaveNoOverflow(); |
| 166 } else if (!child->renderer().isBR() && (child->renderer().style(isFirst
LineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer() | 166 } else if (!child->renderer().isBR() && (child->renderer().style(isFirst
LineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer() |
| 167 || (child->renderer().isListMarker() && !toRenderListMarker(child->r
enderer()).isInside()) | 167 || (child->renderer().isListMarker() && !toRenderListMarker(child->r
enderer()).isInside()) |
| 168 || child->renderer().style(isFirstLineStyle())->hasBorderImageOutset
s())) { | 168 || child->renderer().style(isFirstLineStyle())->hasBorderImageOutset
s() |
| 169 | 169 || child->renderer().style(isFirstLineStyle())->hasOutline())) { |
| 170 child->clearKnownToHaveNoOverflow(); | 170 child->clearKnownToHaveNoOverflow(); |
| 171 } | 171 } |
| 172 | 172 |
| 173 if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlow
Box(child)->knownToHaveNoOverflow()) | 173 if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlow
Box(child)->knownToHaveNoOverflow()) |
| 174 clearKnownToHaveNoOverflow(); | 174 clearKnownToHaveNoOverflow(); |
| 175 } | 175 } |
| 176 | 176 |
| 177 checkConsistency(); | 177 checkConsistency(); |
| 178 } | 178 } |
| 179 | 179 |
| (...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 825 LayoutUnit outsetLogicalLeft = includeLogicalLeftEdge() ? borderOutsetLogica
lLeft : LayoutUnit(); | 825 LayoutUnit outsetLogicalLeft = includeLogicalLeftEdge() ? borderOutsetLogica
lLeft : LayoutUnit(); |
| 826 LayoutUnit outsetLogicalRight = includeLogicalRightEdge() ? borderOutsetLogi
calRight : LayoutUnit(); | 826 LayoutUnit outsetLogicalRight = includeLogicalRightEdge() ? borderOutsetLogi
calRight : LayoutUnit(); |
| 827 | 827 |
| 828 LayoutUnit logicalLeftVisualOverflow = min(pixelSnappedLogicalLeft() - outse
tLogicalLeft, logicalVisualOverflow.x()); | 828 LayoutUnit logicalLeftVisualOverflow = min(pixelSnappedLogicalLeft() - outse
tLogicalLeft, logicalVisualOverflow.x()); |
| 829 LayoutUnit logicalRightVisualOverflow = max(pixelSnappedLogicalRight() + out
setLogicalRight, logicalVisualOverflow.maxX()); | 829 LayoutUnit logicalRightVisualOverflow = max(pixelSnappedLogicalRight() + out
setLogicalRight, logicalVisualOverflow.maxX()); |
| 830 | 830 |
| 831 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, | 831 logicalVisualOverflow = LayoutRect(logicalLeftVisualOverflow, logicalTopVisu
alOverflow, |
| 832 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); | 832 logicalRightVisualOverflow - logicalLeftV
isualOverflow, logicalBottomVisualOverflow - logicalTopVisualOverflow); |
| 833 } | 833 } |
| 834 | 834 |
| 835 inline void InlineFlowBox::addOutlineVisualOverflow(LayoutRect& logicalVisualOve
rflow) |
| 836 { |
| 837 // Outline on root line boxes is applied to the block and not to the lines. |
| 838 if (!parent()) |
| 839 return; |
| 840 |
| 841 RenderStyle* style = renderer().style(isFirstLineStyle()); |
| 842 if (!style->hasOutline()) |
| 843 return; |
| 844 |
| 845 logicalVisualOverflow.inflate(style->outlineSize()); |
| 846 } |
| 847 |
| 835 inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
hOverflowAndFallbackFontsMap& textBoxDataMap, LayoutRect& logicalVisualOverflow) | 848 inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
hOverflowAndFallbackFontsMap& textBoxDataMap, LayoutRect& logicalVisualOverflow) |
| 836 { | 849 { |
| 837 if (textBox->knownToHaveNoOverflow()) | 850 if (textBox->knownToHaveNoOverflow()) |
| 838 return; | 851 return; |
| 839 | 852 |
| 840 RenderStyle* style = textBox->renderer().style(isFirstLineStyle()); | 853 RenderStyle* style = textBox->renderer().style(isFirstLineStyle()); |
| 841 | 854 |
| 842 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(textBox)
; | 855 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(textBox)
; |
| 843 GlyphOverflow* glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.s
econd; | 856 GlyphOverflow* glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.s
econd; |
| 844 bool isFlippedLine = style->isFlippedLinesWritingMode(); | 857 bool isFlippedLine = style->isFlippedLinesWritingMode(); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 m_overflow.clear(); | 938 m_overflow.clear(); |
| 926 | 939 |
| 927 // Visual overflow just includes overflow for stuff we need to repaint ourse
lves. Self-painting layers are ignored. | 940 // Visual overflow just includes overflow for stuff we need to repaint ourse
lves. Self-painting layers are ignored. |
| 928 // Layout overflow is used to determine scrolling extent, so it still includ
es child layers and also factors in | 941 // Layout overflow is used to determine scrolling extent, so it still includ
es child layers and also factors in |
| 929 // transforms, relative positioning, etc. | 942 // transforms, relative positioning, etc. |
| 930 LayoutRect logicalLayoutOverflow(enclosingLayoutRect(logicalFrameRectIncludi
ngLineHeight(lineTop, lineBottom))); | 943 LayoutRect logicalLayoutOverflow(enclosingLayoutRect(logicalFrameRectIncludi
ngLineHeight(lineTop, lineBottom))); |
| 931 LayoutRect logicalVisualOverflow(logicalLayoutOverflow); | 944 LayoutRect logicalVisualOverflow(logicalLayoutOverflow); |
| 932 | 945 |
| 933 addBoxShadowVisualOverflow(logicalVisualOverflow); | 946 addBoxShadowVisualOverflow(logicalVisualOverflow); |
| 934 addBorderOutsetVisualOverflow(logicalVisualOverflow); | 947 addBorderOutsetVisualOverflow(logicalVisualOverflow); |
| 948 addOutlineVisualOverflow(logicalVisualOverflow); |
| 935 | 949 |
| 936 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { | 950 for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) { |
| 937 if (curr->renderer().isOutOfFlowPositioned()) | 951 if (curr->renderer().isOutOfFlowPositioned()) |
| 938 continue; // Positioned placeholders don't affect calculations. | 952 continue; // Positioned placeholders don't affect calculations. |
| 939 | 953 |
| 940 if (curr->renderer().isText()) { | 954 if (curr->renderer().isText()) { |
| 941 InlineTextBox* text = toInlineTextBox(curr); | 955 InlineTextBox* text = toInlineTextBox(curr); |
| 942 RenderText& rt = toRenderText(text->renderer()); | 956 RenderText& rt = toRenderText(text->renderer()); |
| 943 if (rt.isBR()) | 957 if (rt.isBR()) |
| 944 continue; | 958 continue; |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1067 if (!result.addNodeToRectBasedTestResult(renderer().node(), request, loc
ationInContainer, rect)) | 1081 if (!result.addNodeToRectBasedTestResult(renderer().node(), request, loc
ationInContainer, rect)) |
| 1068 return true; | 1082 return true; |
| 1069 } | 1083 } |
| 1070 | 1084 |
| 1071 return false; | 1085 return false; |
| 1072 } | 1086 } |
| 1073 | 1087 |
| 1074 void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
LayoutUnit lineTop, LayoutUnit lineBottom) | 1088 void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
LayoutUnit lineTop, LayoutUnit lineBottom) |
| 1075 { | 1089 { |
| 1076 LayoutRect overflowRect(visualOverflowRect(lineTop, lineBottom)); | 1090 LayoutRect overflowRect(visualOverflowRect(lineTop, lineBottom)); |
| 1077 overflowRect.inflate(renderer().maximalOutlineSize(paintInfo.phase)); | |
| 1078 flipForWritingMode(overflowRect); | 1091 flipForWritingMode(overflowRect); |
| 1079 overflowRect.moveBy(paintOffset); | 1092 overflowRect.moveBy(paintOffset); |
| 1080 | 1093 |
| 1081 if (!paintInfo.rect.intersects(pixelSnappedIntRect(overflowRect))) | 1094 if (!paintInfo.rect.intersects(pixelSnappedIntRect(overflowRect))) |
| 1082 return; | 1095 return; |
| 1083 | 1096 |
| 1084 if (paintInfo.phase != PaintPhaseChildOutlines) { | 1097 if (paintInfo.phase != PaintPhaseChildOutlines) { |
| 1085 if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhas
eSelfOutline) { | 1098 if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhas
eSelfOutline) { |
| 1086 // Add ourselves to the paint info struct's list of inlines that nee
d to paint their | 1099 // Add ourselves to the paint info struct's list of inlines that nee
d to paint their |
| 1087 // outlines. | 1100 // outlines. |
| (...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1643 ASSERT(child->prevOnLine() == prev); | 1656 ASSERT(child->prevOnLine() == prev); |
| 1644 prev = child; | 1657 prev = child; |
| 1645 } | 1658 } |
| 1646 ASSERT(prev == m_lastChild); | 1659 ASSERT(prev == m_lastChild); |
| 1647 #endif | 1660 #endif |
| 1648 } | 1661 } |
| 1649 | 1662 |
| 1650 #endif | 1663 #endif |
| 1651 | 1664 |
| 1652 } // namespace WebCore | 1665 } // namespace WebCore |
| OLD | NEW |