OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
605 | 605 |
606 // We are no longer at the top of the block if we encounter a non-empty chil d. | 606 // We are no longer at the top of the block if we encounter a non-empty chil d. |
607 // This has to be done after checking for clear, so that margins can be rese t if a clear occurred. | 607 // This has to be done after checking for clear, so that margins can be rese t if a clear occurred. |
608 if (marginInfo.atBeforeSideOfBlock() && !childIsSelfCollapsing) | 608 if (marginInfo.atBeforeSideOfBlock() && !childIsSelfCollapsing) |
609 marginInfo.setAtBeforeSideOfBlock(false); | 609 marginInfo.setAtBeforeSideOfBlock(false); |
610 | 610 |
611 // Now place the child in the correct left position | 611 // Now place the child in the correct left position |
612 determineLogicalLeftPositionForChild(child, ApplyLayoutDelta); | 612 determineLogicalLeftPositionForChild(child, ApplyLayoutDelta); |
613 | 613 |
614 LayoutSize childOffset = child->location() - oldRect.location(); | 614 LayoutSize childOffset = child->location() - oldRect.location(); |
615 relayoutShapeDescendantIfMoved(childRenderBlock, childOffset); | |
616 | 615 |
617 // Update our height now that the child has been placed in the correct posit ion. | 616 // Update our height now that the child has been placed in the correct posit ion. |
618 setLogicalHeight(logicalHeight() + logicalHeightForChild(child)); | 617 setLogicalHeight(logicalHeight() + logicalHeightForChild(child)); |
619 if (mustSeparateMarginAfterForChild(child)) { | 618 if (mustSeparateMarginAfterForChild(child)) { |
620 setLogicalHeight(logicalHeight() + marginAfterForChild(child)); | 619 setLogicalHeight(logicalHeight() + marginAfterForChild(child)); |
621 marginInfo.clearMargin(); | 620 marginInfo.clearMargin(); |
622 } | 621 } |
623 // If the child has overhanging floats that intrude into following siblings (or possibly out | 622 // If the child has overhanging floats that intrude into following siblings (or possibly out |
624 // of this block), then the parent gets notified of the floats now. | 623 // of this block), then the parent gets notified of the floats now. |
625 if (childRenderBlockFlow && childRenderBlockFlow->containsFloats()) | 624 if (childRenderBlockFlow && childRenderBlockFlow->containsFloats()) |
(...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2131 right -= textIndentOffset(); | 2130 right -= textIndentOffset(); |
2132 | 2131 |
2133 return right; | 2132 return right; |
2134 } | 2133 } |
2135 | 2134 |
2136 LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject * floatingObject, LayoutUnit logicalTopOffset) const | 2135 LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject * floatingObject, LayoutUnit logicalTopOffset) const |
2137 { | 2136 { |
2138 RenderBox* childBox = floatingObject->renderer(); | 2137 RenderBox* childBox = floatingObject->renderer(); |
2139 LayoutUnit logicalLeftOffset = logicalLeftOffsetForContent(); // Constant pa rt of left offset. | 2138 LayoutUnit logicalLeftOffset = logicalLeftOffsetForContent(); // Constant pa rt of left offset. |
2140 LayoutUnit logicalRightOffset; // Constant part of right offset. | 2139 LayoutUnit logicalRightOffset; // Constant part of right offset. |
2141 // FIXME Bug 102948: This only works for shape outside directly set on this block. | 2140 // FIXME Bug 102948: This only works for shape outside directly set on this block. |
Zoltan
2014/03/26 21:01:09
We can remove the FIXME.
| |
2142 ShapeInsideInfo* shapeInsideInfo = this->layoutShapeInsideInfo(); | 2141 logicalRightOffset = logicalRightOffsetForContent(); |
2143 // FIXME: Implement behavior for right floats. | |
2144 if (shapeInsideInfo) { | |
2145 LayoutSize floatLogicalSize = logicalSizeForFloat(floatingObject); | |
2146 // floatingObject's logicalSize doesn't contain the actual height at thi s point, so we need to calculate it | |
2147 floatLogicalSize.setHeight(logicalHeightForChild(childBox) + marginBefor eForChild(childBox) + marginAfterForChild(childBox)); | |
2148 | |
2149 // FIXME: If the float doesn't fit in the shape we should push it under the content box | |
2150 logicalTopOffset = shapeInsideInfo->computeFirstFitPositionForFloat(floa tLogicalSize); | |
2151 if (logicalHeight() > logicalTopOffset) | |
2152 logicalTopOffset = logicalHeight(); | |
2153 | |
2154 SegmentList segments = shapeInsideInfo->computeSegmentsForLine(logicalTo pOffset, floatLogicalSize.height()); | |
2155 // FIXME: Add support for shapes with multiple segments. | |
2156 if (segments.size() >= 1) { | |
2157 // The segment offsets are relative to the content box. | |
2158 logicalRightOffset = logicalLeftOffset + segments[0].logicalRight; | |
2159 logicalLeftOffset += segments[0].logicalLeft; | |
2160 } | |
2161 } else { | |
2162 logicalRightOffset = logicalRightOffsetForContent(); | |
2163 } | |
2164 | 2142 |
2165 LayoutUnit floatLogicalWidth = min(logicalWidthForFloat(floatingObject), log icalRightOffset - logicalLeftOffset); // The width we look for. | 2143 LayoutUnit floatLogicalWidth = min(logicalWidthForFloat(floatingObject), log icalRightOffset - logicalLeftOffset); // The width we look for. |
2166 | 2144 |
2167 LayoutUnit floatLogicalLeft; | 2145 LayoutUnit floatLogicalLeft; |
2168 | 2146 |
2169 bool insideFlowThread = flowThreadContainingBlock(); | 2147 bool insideFlowThread = flowThreadContainingBlock(); |
2170 | 2148 |
2171 if (childBox->style()->floating() == LeftFloat) { | 2149 if (childBox->style()->floating() == LeftFloat) { |
2172 LayoutUnit heightRemainingLeft = 1; | 2150 LayoutUnit heightRemainingLeft = 1; |
2173 LayoutUnit heightRemainingRight = 1; | 2151 LayoutUnit heightRemainingRight = 1; |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2813 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() | 2791 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() |
2814 { | 2792 { |
2815 if (m_rareData) | 2793 if (m_rareData) |
2816 return *m_rareData; | 2794 return *m_rareData; |
2817 | 2795 |
2818 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); | 2796 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); |
2819 return *m_rareData; | 2797 return *m_rareData; |
2820 } | 2798 } |
2821 | 2799 |
2822 } // namespace WebCore | 2800 } // namespace WebCore |
OLD | NEW |