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 811 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
822 // line and all following lines. | 822 // line and all following lines. |
823 LayoutRect logicalVisualOverflow = lineBox.logicalVisualOverflowRect(lineBox
.lineTop(), lineBox.lineBottom()); | 823 LayoutRect logicalVisualOverflow = lineBox.logicalVisualOverflowRect(lineBox
.lineTop(), lineBox.lineBottom()); |
824 LayoutUnit logicalOffset = std::min(lineBox.lineTopWithLeading(), logicalVis
ualOverflow.y()); | 824 LayoutUnit logicalOffset = std::min(lineBox.lineTopWithLeading(), logicalVis
ualOverflow.y()); |
825 LayoutUnit logicalBottom = std::max(lineBox.lineBottomWithLeading(), logical
VisualOverflow.maxY()); | 825 LayoutUnit logicalBottom = std::max(lineBox.lineBottomWithLeading(), logical
VisualOverflow.maxY()); |
826 LayoutUnit lineHeight = logicalBottom - logicalOffset; | 826 LayoutUnit lineHeight = logicalBottom - logicalOffset; |
827 updateMinimumPageHeight(logicalOffset, calculateMinimumPageHeight(styleRef()
, &lineBox, logicalOffset, logicalBottom)); | 827 updateMinimumPageHeight(logicalOffset, calculateMinimumPageHeight(styleRef()
, &lineBox, logicalOffset, logicalBottom)); |
828 logicalOffset += delta; | 828 logicalOffset += delta; |
829 lineBox.setPaginationStrut(0); | 829 lineBox.setPaginationStrut(0); |
830 lineBox.setIsFirstAfterPageBreak(false); | 830 lineBox.setIsFirstAfterPageBreak(false); |
831 LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalOffset); | 831 LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalOffset); |
832 bool hasUniformPageLogicalHeight = !flowThread || flowThread->regionsHaveUni
formLogicalHeight(); | 832 bool hasUniformPageLogicalHeight = !flowThread || flowThread->columnSetsHave
UniformLogicalHeight(); |
833 // If lineHeight is greater than pageLogicalHeight, but logicalVisualOverflo
w.height() still fits, we are | 833 // If lineHeight is greater than pageLogicalHeight, but logicalVisualOverflo
w.height() still fits, we are |
834 // still going to add a strut, so that the visible overflow fits on a single
page. | 834 // still going to add a strut, so that the visible overflow fits on a single
page. |
835 if (!pageLogicalHeight || (hasUniformPageLogicalHeight && logicalVisualOverf
low.height() > pageLogicalHeight)) { | 835 if (!pageLogicalHeight || (hasUniformPageLogicalHeight && logicalVisualOverf
low.height() > pageLogicalHeight)) { |
836 // FIXME: In case the line aligns with the top of the page (or it's slig
htly shifted downwards) it will not be marked as the first line in the page. | 836 // FIXME: In case the line aligns with the top of the page (or it's slig
htly shifted downwards) it will not be marked as the first line in the page. |
837 // From here, the fix is not straightforward because it's not easy to al
ways determine when the current line is the first in the page. | 837 // From here, the fix is not straightforward because it's not easy to al
ways determine when the current line is the first in the page. |
838 return; | 838 return; |
839 } | 839 } |
840 LayoutUnit remainingLogicalHeight = pageRemainingLogicalHeightForOffset(logi
calOffset, ExcludePageBoundary); | 840 LayoutUnit remainingLogicalHeight = pageRemainingLogicalHeightForOffset(logi
calOffset, ExcludePageBoundary); |
841 | 841 |
842 int lineIndex = lineCount(&lineBox); | 842 int lineIndex = lineCount(&lineBox); |
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1736 LayoutFlowThread* flowThread = flowThreadContainingBlock(); | 1736 LayoutFlowThread* flowThread = flowThreadContainingBlock(); |
1737 bool isInsideMulticolFlowThread = flowThread; | 1737 bool isInsideMulticolFlowThread = flowThread; |
1738 bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()
->isPaginatingColumns(); | 1738 bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()
->isPaginatingColumns(); |
1739 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogi
calHeight(); // FIXME: Once columns can print we have to check this. | 1739 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogi
calHeight(); // FIXME: Once columns can print we have to check this. |
1740 bool checkBeforeAlways = (checkColumnBreaks && child.style()->columnBreakBef
ore() == PBALWAYS) | 1740 bool checkBeforeAlways = (checkColumnBreaks && child.style()->columnBreakBef
ore() == PBALWAYS) |
1741 || (checkPageBreaks && child.style()->pageBreakBefore() == PBALWAYS); | 1741 || (checkPageBreaks && child.style()->pageBreakBefore() == PBALWAYS); |
1742 if (checkBeforeAlways && inNormalFlow(&child)) { | 1742 if (checkBeforeAlways && inNormalFlow(&child)) { |
1743 if (checkColumnBreaks) { | 1743 if (checkColumnBreaks) { |
1744 if (isInsideMulticolFlowThread) { | 1744 if (isInsideMulticolFlowThread) { |
1745 LayoutUnit offsetBreakAdjustment = 0; | 1745 LayoutUnit offsetBreakAdjustment = 0; |
1746 if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirst
Page() + logicalOffset, &child, true, &offsetBreakAdjustment)) | 1746 if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirst
Page() + logicalOffset, &child, true, &offsetBreakAdjustment)) |
1747 return logicalOffset + offsetBreakAdjustment; | 1747 return logicalOffset + offsetBreakAdjustment; |
1748 } else { | 1748 } else { |
1749 view()->layoutState()->addForcedColumnBreak(child, logicalOffset
); | 1749 view()->layoutState()->addForcedColumnBreak(child, logicalOffset
); |
1750 } | 1750 } |
1751 } | 1751 } |
1752 return nextPageLogicalTop(logicalOffset, IncludePageBoundary); | 1752 return nextPageLogicalTop(logicalOffset, IncludePageBoundary); |
1753 } | 1753 } |
1754 return logicalOffset; | 1754 return logicalOffset; |
1755 } | 1755 } |
1756 | 1756 |
1757 LayoutUnit LayoutBlockFlow::applyAfterBreak(LayoutBox& child, LayoutUnit logical
Offset, MarginInfo& marginInfo) | 1757 LayoutUnit LayoutBlockFlow::applyAfterBreak(LayoutBox& child, LayoutUnit logical
Offset, MarginInfo& marginInfo) |
1758 { | 1758 { |
1759 // FIXME: Add page break checking here when we support printing. | 1759 // FIXME: Add page break checking here when we support printing. |
1760 LayoutFlowThread* flowThread = flowThreadContainingBlock(); | 1760 LayoutFlowThread* flowThread = flowThreadContainingBlock(); |
1761 bool isInsideMulticolFlowThread = flowThread; | 1761 bool isInsideMulticolFlowThread = flowThread; |
1762 bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()
->isPaginatingColumns(); | 1762 bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()
->isPaginatingColumns(); |
1763 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogi
calHeight(); // FIXME: Once columns can print we have to check this. | 1763 bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogi
calHeight(); // FIXME: Once columns can print we have to check this. |
1764 bool checkAfterAlways = (checkColumnBreaks && child.style()->columnBreakAfte
r() == PBALWAYS) | 1764 bool checkAfterAlways = (checkColumnBreaks && child.style()->columnBreakAfte
r() == PBALWAYS) |
1765 || (checkPageBreaks && child.style()->pageBreakAfter() == PBALWAYS); | 1765 || (checkPageBreaks && child.style()->pageBreakAfter() == PBALWAYS); |
1766 if (checkAfterAlways && inNormalFlow(&child)) { | 1766 if (checkAfterAlways && inNormalFlow(&child)) { |
1767 // So our margin doesn't participate in the next collapsing steps. | 1767 // So our margin doesn't participate in the next collapsing steps. |
1768 marginInfo.clearMargin(); | 1768 marginInfo.clearMargin(); |
1769 | 1769 |
1770 if (checkColumnBreaks) { | 1770 if (checkColumnBreaks) { |
1771 if (isInsideMulticolFlowThread) { | 1771 if (isInsideMulticolFlowThread) { |
1772 LayoutUnit offsetBreakAdjustment = 0; | 1772 LayoutUnit offsetBreakAdjustment = 0; |
1773 if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirst
Page() + logicalOffset, &child, false, &offsetBreakAdjustment)) | 1773 if (flowThread->addForcedColumnBreak(offsetFromLogicalTopOfFirst
Page() + logicalOffset, &child, false, &offsetBreakAdjustment)) |
1774 return logicalOffset + offsetBreakAdjustment; | 1774 return logicalOffset + offsetBreakAdjustment; |
1775 } else { | 1775 } else { |
1776 view()->layoutState()->addForcedColumnBreak(child, logicalOffset
); | 1776 view()->layoutState()->addForcedColumnBreak(child, logicalOffset
); |
1777 } | 1777 } |
1778 } | 1778 } |
1779 return nextPageLogicalTop(logicalOffset, IncludePageBoundary); | 1779 return nextPageLogicalTop(logicalOffset, IncludePageBoundary); |
1780 } | 1780 } |
1781 return logicalOffset; | 1781 return logicalOffset; |
1782 } | 1782 } |
1783 | 1783 |
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2555 | 2555 |
2556 m_floatingObjects->add(floatingObject->copyToNewContainer(offset
)); | 2556 m_floatingObjects->add(floatingObject->copyToNewContainer(offset
)); |
2557 } | 2557 } |
2558 } | 2558 } |
2559 } | 2559 } |
2560 } | 2560 } |
2561 | 2561 |
2562 void LayoutBlockFlow::addOverhangingFloats(LayoutBlockFlow* child, bool makeChil
dPaintOtherFloats) | 2562 void LayoutBlockFlow::addOverhangingFloats(LayoutBlockFlow* child, bool makeChil
dPaintOtherFloats) |
2563 { | 2563 { |
2564 // Prevent floats from being added to the canvas by the root element, e.g.,
<html>. | 2564 // Prevent floats from being added to the canvas by the root element, e.g.,
<html>. |
2565 if (!child->containsFloats() || child->isLayoutRegion() || child->createsNew
FormattingContext()) | 2565 if (!child->containsFloats() || child->createsNewFormattingContext()) |
2566 return; | 2566 return; |
2567 | 2567 |
2568 LayoutUnit childLogicalTop = child->logicalTop(); | 2568 LayoutUnit childLogicalTop = child->logicalTop(); |
2569 LayoutUnit childLogicalLeft = child->logicalLeft(); | 2569 LayoutUnit childLogicalLeft = child->logicalLeft(); |
2570 | 2570 |
2571 // Floats that will remain the child's responsibility to paint should factor
into its | 2571 // Floats that will remain the child's responsibility to paint should factor
into its |
2572 // overflow. | 2572 // overflow. |
2573 FloatingObjectSetIterator childEnd = child->m_floatingObjects->set().end(); | 2573 FloatingObjectSetIterator childEnd = child->m_floatingObjects->set().end(); |
2574 for (FloatingObjectSetIterator childIt = child->m_floatingObjects->set().beg
in(); childIt != childEnd; ++childIt) { | 2574 for (FloatingObjectSetIterator childIt = child->m_floatingObjects->set().beg
in(); childIt != childEnd; ++childIt) { |
2575 FloatingObject* floatingObject = childIt->get(); | 2575 FloatingObject* floatingObject = childIt->get(); |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3153 FrameView* frameView = document().view(); | 3153 FrameView* frameView = document().view(); |
3154 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr
ollOffset().height(); | 3154 LayoutUnit top = (style()->position() == FixedPosition) ? 0 : frameView->scr
ollOffset().height(); |
3155 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height(
); | 3155 int visibleHeight = frameView->visibleContentRect(IncludeScrollbars).height(
); |
3156 if (size().height() < visibleHeight) | 3156 if (size().height() < visibleHeight) |
3157 top += (visibleHeight - size().height()) / 2; | 3157 top += (visibleHeight - size().height()) / 2; |
3158 setY(top); | 3158 setY(top); |
3159 dialog->setCentered(top); | 3159 dialog->setCentered(top); |
3160 } | 3160 } |
3161 | 3161 |
3162 } // namespace blink | 3162 } // namespace blink |
OLD | NEW |