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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 checkConsistency(); | 177 checkConsistency(); |
178 } | 178 } |
179 | 179 |
180 void InlineFlowBox::removeChild(InlineBox* child) | 180 void InlineFlowBox::removeChild(InlineBox* child) |
181 { | 181 { |
182 checkConsistency(); | 182 checkConsistency(); |
183 | 183 |
184 if (!isDirty()) | 184 if (!isDirty()) |
185 dirtyLineBoxes(); | 185 dirtyLineBoxes(); |
186 | 186 |
187 root()->childRemoved(child); | 187 root().childRemoved(child); |
188 | 188 |
189 if (child == m_firstChild) | 189 if (child == m_firstChild) |
190 m_firstChild = child->nextOnLine(); | 190 m_firstChild = child->nextOnLine(); |
191 if (child == m_lastChild) | 191 if (child == m_lastChild) |
192 m_lastChild = child->prevOnLine(); | 192 m_lastChild = child->prevOnLine(); |
193 if (child->nextOnLine()) | 193 if (child->nextOnLine()) |
194 child->nextOnLine()->setPrevOnLine(child->prevOnLine()); | 194 child->nextOnLine()->setPrevOnLine(child->prevOnLine()); |
195 if (child->prevOnLine()) | 195 if (child->prevOnLine()) |
196 child->prevOnLine()->setNextOnLine(child->nextOnLine()); | 196 child->prevOnLine()->setNextOnLine(child->nextOnLine()); |
197 | 197 |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 if (knownToHaveNoOverflow()) | 394 if (knownToHaveNoOverflow()) |
395 maxLogicalRight = max(logicalLeft, maxLogicalRight); | 395 maxLogicalRight = max(logicalLeft, maxLogicalRight); |
396 } else { | 396 } else { |
397 if (curr->renderer().isOutOfFlowPositioned()) { | 397 if (curr->renderer().isOutOfFlowPositioned()) { |
398 if (curr->renderer().parent()->style()->isLeftToRightDirection()
) { | 398 if (curr->renderer().parent()->style()->isLeftToRightDirection()
) { |
399 curr->setLogicalLeft(logicalLeft); | 399 curr->setLogicalLeft(logicalLeft); |
400 } else { | 400 } else { |
401 // Our offset that we cache needs to be from the edge of the
right border box and | 401 // Our offset that we cache needs to be from the edge of the
right border box and |
402 // not the left border box. We have to subtract |x| from th
e width of the block | 402 // not the left border box. We have to subtract |x| from th
e width of the block |
403 // (which can be obtained from the root line box). | 403 // (which can be obtained from the root line box). |
404 curr->setLogicalLeft(root()->block().logicalWidth() - logica
lLeft); | 404 curr->setLogicalLeft(root().block().logicalWidth() - logical
Left); |
405 } | 405 } |
406 continue; // The positioned object has no effect on the width. | 406 continue; // The positioned object has no effect on the width. |
407 } | 407 } |
408 if (curr->renderer().isRenderInline()) { | 408 if (curr->renderer().isRenderInline()) { |
409 InlineFlowBox* flow = toInlineFlowBox(curr); | 409 InlineFlowBox* flow = toInlineFlowBox(curr); |
410 logicalLeft += flow->marginLogicalLeft(); | 410 logicalLeft += flow->marginLogicalLeft(); |
411 if (knownToHaveNoOverflow()) | 411 if (knownToHaveNoOverflow()) |
412 minLogicalLeft = min(logicalLeft, minLogicalLeft); | 412 minLogicalLeft = min(logicalLeft, minLogicalLeft); |
413 logicalLeft = flow->placeBoxesInInlineDirection(logicalLeft, nee
dsWordSpacing, textBoxDataMap); | 413 logicalLeft = flow->placeBoxesInInlineDirection(logicalLeft, nee
dsWordSpacing, textBoxDataMap); |
414 if (knownToHaveNoOverflow()) | 414 if (knownToHaveNoOverflow()) |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 // Now check ourselves. Pixel snap hit testing. | 1037 // Now check ourselves. Pixel snap hit testing. |
1038 LayoutRect frameRect = roundedFrameRect(); | 1038 LayoutRect frameRect = roundedFrameRect(); |
1039 LayoutUnit minX = frameRect.x(); | 1039 LayoutUnit minX = frameRect.x(); |
1040 LayoutUnit minY = frameRect.y(); | 1040 LayoutUnit minY = frameRect.y(); |
1041 LayoutUnit width = frameRect.width(); | 1041 LayoutUnit width = frameRect.width(); |
1042 LayoutUnit height = frameRect.height(); | 1042 LayoutUnit height = frameRect.height(); |
1043 | 1043 |
1044 // Constrain our hit testing to the line top and bottom if necessary. | 1044 // Constrain our hit testing to the line top and bottom if necessary. |
1045 bool noQuirksMode = renderer().document().inNoQuirksMode(); | 1045 bool noQuirksMode = renderer().document().inNoQuirksMode(); |
1046 if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAn
dBaseline() && hasTextDescendants())) { | 1046 if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAn
dBaseline() && hasTextDescendants())) { |
1047 RootInlineBox* rootBox = root(); | 1047 RootInlineBox& rootBox = root(); |
1048 LayoutUnit& top = isHorizontal() ? minY : minX; | 1048 LayoutUnit& top = isHorizontal() ? minY : minX; |
1049 LayoutUnit& logicalHeight = isHorizontal() ? height : width; | 1049 LayoutUnit& logicalHeight = isHorizontal() ? height : width; |
1050 LayoutUnit bottom = min(rootBox->lineBottom(), top + logicalHeight); | 1050 LayoutUnit bottom = min(rootBox.lineBottom(), top + logicalHeight); |
1051 top = max(rootBox->lineTop(), top); | 1051 top = max(rootBox.lineTop(), top); |
1052 logicalHeight = bottom - top; | 1052 logicalHeight = bottom - top; |
1053 } | 1053 } |
1054 | 1054 |
1055 // Move x/y to our coordinates. | 1055 // Move x/y to our coordinates. |
1056 LayoutRect rect(minX, minY, width, height); | 1056 LayoutRect rect(minX, minY, width, height); |
1057 flipForWritingMode(rect); | 1057 flipForWritingMode(rect); |
1058 rect.moveBy(accumulatedOffset); | 1058 rect.moveBy(accumulatedOffset); |
1059 | 1059 |
1060 if (visibleToHitTestRequest(request) && locationInContainer.intersects(rect)
) { | 1060 if (visibleToHitTestRequest(request) && locationInContainer.intersects(rect)
) { |
1061 renderer().updateHitTestResult(result, flipForWritingMode(locationInCont
ainer.point() - toLayoutSize(accumulatedOffset))); // Don't add in m_x or m_y he
re, we want coords in the containing block's space. | 1061 renderer().updateHitTestResult(result, flipForWritingMode(locationInCont
ainer.point() - toLayoutSize(accumulatedOffset))); // Don't add in m_x or m_y he
re, we want coords in the containing block's space. |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1205 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't | 1205 // FIXME: We can do better here in the multi-line case. We want to push
a clip so that the shadow doesn't |
1206 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines | 1206 // protrude incorrectly at the edges, and we want to possibly include sh
adows cast from the previous/following lines |
1207 boxModelObject()->paintBoxShadow(info, paintRect, s, shadowStyle, includ
eLogicalLeftEdge(), includeLogicalRightEdge()); | 1207 boxModelObject()->paintBoxShadow(info, paintRect, s, shadowStyle, includ
eLogicalLeftEdge(), includeLogicalRightEdge()); |
1208 } | 1208 } |
1209 } | 1209 } |
1210 | 1210 |
1211 void InlineFlowBox::constrainToLineTopAndBottomIfNeeded(LayoutRect& rect) const | 1211 void InlineFlowBox::constrainToLineTopAndBottomIfNeeded(LayoutRect& rect) const |
1212 { | 1212 { |
1213 bool noQuirksMode = renderer().document().inNoQuirksMode(); | 1213 bool noQuirksMode = renderer().document().inNoQuirksMode(); |
1214 if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAn
dBaseline() && hasTextDescendants())) { | 1214 if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAn
dBaseline() && hasTextDescendants())) { |
1215 const RootInlineBox* rootBox = root(); | 1215 const RootInlineBox& rootBox = root(); |
1216 LayoutUnit logicalTop = isHorizontal() ? rect.y() : rect.x(); | 1216 LayoutUnit logicalTop = isHorizontal() ? rect.y() : rect.x(); |
1217 LayoutUnit logicalHeight = isHorizontal() ? rect.height() : rect.width()
; | 1217 LayoutUnit logicalHeight = isHorizontal() ? rect.height() : rect.width()
; |
1218 LayoutUnit bottom = min(rootBox->lineBottom(), logicalTop + logicalHeigh
t); | 1218 LayoutUnit bottom = min(rootBox.lineBottom(), logicalTop + logicalHeight
); |
1219 logicalTop = max(rootBox->lineTop(), logicalTop); | 1219 logicalTop = max(rootBox.lineTop(), logicalTop); |
1220 logicalHeight = bottom - logicalTop; | 1220 logicalHeight = bottom - logicalTop; |
1221 if (isHorizontal()) { | 1221 if (isHorizontal()) { |
1222 rect.setY(logicalTop); | 1222 rect.setY(logicalTop); |
1223 rect.setHeight(logicalHeight); | 1223 rect.setHeight(logicalHeight); |
1224 } else { | 1224 } else { |
1225 rect.setX(logicalTop); | 1225 rect.setX(logicalTop); |
1226 rect.setWidth(logicalHeight); | 1226 rect.setWidth(logicalHeight); |
1227 } | 1227 } |
1228 } | 1228 } |
1229 } | 1229 } |
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1638 ASSERT(child->prevOnLine() == prev); | 1638 ASSERT(child->prevOnLine() == prev); |
1639 prev = child; | 1639 prev = child; |
1640 } | 1640 } |
1641 ASSERT(prev == m_lastChild); | 1641 ASSERT(prev == m_lastChild); |
1642 #endif | 1642 #endif |
1643 } | 1643 } |
1644 | 1644 |
1645 #endif | 1645 #endif |
1646 | 1646 |
1647 } // namespace WebCore | 1647 } // namespace WebCore |
OLD | NEW |