OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
850 placeItemsOnGrid(); | 850 placeItemsOnGrid(); |
851 | 851 |
852 Vector<GridTrack> columnTracks(gridColumnCount()); | 852 Vector<GridTrack> columnTracks(gridColumnCount()); |
853 Vector<GridTrack> rowTracks(gridRowCount()); | 853 Vector<GridTrack> rowTracks(gridRowCount()); |
854 computedUsedBreadthOfGridTracks(ForColumns, columnTracks, rowTracks); | 854 computedUsedBreadthOfGridTracks(ForColumns, columnTracks, rowTracks); |
855 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, columnTracks)); | 855 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, columnTracks)); |
856 computedUsedBreadthOfGridTracks(ForRows, columnTracks, rowTracks); | 856 computedUsedBreadthOfGridTracks(ForRows, columnTracks, rowTracks); |
857 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, rowTracks)); | 857 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, rowTracks)); |
858 | 858 |
859 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { | 859 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { |
860 LayoutPoint childPosition = findChildLogicalPosition(child, columnTracks
, rowTracks); | |
861 | |
862 // Because the grid area cannot be styled, we don't need to adjust | 860 // Because the grid area cannot be styled, we don't need to adjust |
863 // the grid breadth to account for 'box-sizing'. | 861 // the grid breadth to account for 'box-sizing'. |
864 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve
rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica
lWidth() : LayoutUnit(); | 862 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve
rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica
lWidth() : LayoutUnit(); |
865 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv
errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi
calHeight() : LayoutUnit(); | 863 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv
errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi
calHeight() : LayoutUnit(); |
866 | 864 |
867 // FIXME: For children in a content sized track, we clear the overrideCo
ntainingBlockContentLogicalHeight | |
868 // in minContentForChild / maxContentForChild which means that we will a
lways relayout the child. | |
869 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF
orChild(child, ForColumns, columnTracks); | 865 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF
orChild(child, ForColumns, columnTracks); |
870 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth
ForChild(child, ForRows, rowTracks); | 866 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth
ForChild(child, ForRows, rowTracks); |
871 | 867 |
872 SubtreeLayoutScope layoutScope(child); | 868 SubtreeLayoutScope layoutScope(child); |
873 if (oldOverrideContainingBlockContentLogicalWidth != overrideContainingB
lockContentLogicalWidth || (child->hasRelativeLogicalHeight() && oldOverrideCont
ainingBlockContentLogicalHeight != overrideContainingBlockContentLogicalHeight)) | 869 if (oldOverrideContainingBlockContentLogicalWidth != overrideContainingB
lockContentLogicalWidth || (child->hasRelativeLogicalHeight() && oldOverrideCont
ainingBlockContentLogicalHeight != overrideContainingBlockContentLogicalHeight)) |
874 layoutScope.setNeedsLayout(child); | 870 layoutScope.setNeedsLayout(child); |
875 | 871 |
876 child->setOverrideContainingBlockContentLogicalWidth(overrideContainingB
lockContentLogicalWidth); | 872 child->setOverrideContainingBlockContentLogicalWidth(overrideContainingB
lockContentLogicalWidth); |
877 child->setOverrideContainingBlockContentLogicalHeight(overrideContaining
BlockContentLogicalHeight); | 873 child->setOverrideContainingBlockContentLogicalHeight(overrideContaining
BlockContentLogicalHeight); |
878 | 874 |
879 LayoutRect oldChildRect = child->frameRect(); | 875 LayoutRect oldChildRect = child->frameRect(); |
880 | 876 |
881 // FIXME: Grid items should stretch to fill their cells. Once we | 877 // FIXME: Grid items should stretch to fill their cells. Once we |
882 // implement grid-{column,row}-align, we can also shrink to fit. For | 878 // implement grid-{column,row}-align, we can also shrink to fit. For |
883 // now, just size as if we were a regular child. | 879 // now, just size as if we were a regular child. |
884 child->layoutIfNeeded(); | 880 child->layoutIfNeeded(); |
885 | 881 |
886 // FIXME: Handle border & padding on the grid element. | 882 child->setLogicalLocation(findChildLogicalPosition(child, columnTracks,
rowTracks)); |
887 child->setLogicalLocation(childPosition); | |
888 | 883 |
889 // If the child moved, we have to repaint it as well as any floating/pos
itioned | 884 // If the child moved, we have to repaint it as well as any floating/pos
itioned |
890 // descendants. An exception is if we need a layout. In this case, we kn
ow we're going to | 885 // descendants. An exception is if we need a layout. In this case, we kn
ow we're going to |
891 // repaint ourselves (and the child) anyway. | 886 // repaint ourselves (and the child) anyway. |
892 if (!selfNeedsLayout() && child->checkForRepaintDuringLayout()) | 887 if (!selfNeedsLayout() && child->checkForRepaintDuringLayout()) |
893 child->repaintDuringLayoutIfMoved(oldChildRect); | 888 child->repaintDuringLayoutIfMoved(oldChildRect); |
894 } | 889 } |
895 | 890 |
896 for (size_t i = 0; i < rowTracks.size(); ++i) | 891 for (size_t i = 0; i < rowTracks.size(); ++i) |
897 setLogicalHeight(logicalHeight() + rowTracks[i].m_usedBreadth); | 892 setLogicalHeight(logicalHeight() + rowTracks[i].m_usedBreadth); |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1121 for (size_t trackIndex = span.initialPositionIndex; trackIndex <= span.final
PositionIndex; ++trackIndex) | 1116 for (size_t trackIndex = span.initialPositionIndex; trackIndex <= span.final
PositionIndex; ++trackIndex) |
1122 gridAreaBreadth += tracks[trackIndex].m_usedBreadth; | 1117 gridAreaBreadth += tracks[trackIndex].m_usedBreadth; |
1123 return gridAreaBreadth; | 1118 return gridAreaBreadth; |
1124 } | 1119 } |
1125 | 1120 |
1126 LayoutPoint RenderGrid::findChildLogicalPosition(RenderBox* child, const Vector<
GridTrack>& columnTracks, const Vector<GridTrack>& rowTracks) | 1121 LayoutPoint RenderGrid::findChildLogicalPosition(RenderBox* child, const Vector<
GridTrack>& columnTracks, const Vector<GridTrack>& rowTracks) |
1127 { | 1122 { |
1128 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1123 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
1129 | 1124 |
1130 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. | 1125 // The grid items should be inside the grid container's border box, that's w
hy they need to be shifted. |
1131 LayoutPoint offset(borderAndPaddingStart(), borderAndPaddingBefore()); | 1126 LayoutPoint offset(borderAndPaddingStart() + marginStartForChild(child), bor
derAndPaddingBefore() + marginBeforeForChild(child)); |
1132 // FIXME: |columnTrack| and |rowTrack| should be smaller than our column / r
ow count. | 1127 // FIXME: |columnTrack| and |rowTrack| should be smaller than our column / r
ow count. |
1133 for (size_t i = 0; i < coordinate.columns.initialPositionIndex && i < column
Tracks.size(); ++i) | 1128 for (size_t i = 0; i < coordinate.columns.initialPositionIndex && i < column
Tracks.size(); ++i) |
1134 offset.setX(offset.x() + columnTracks[i].m_usedBreadth); | 1129 offset.setX(offset.x() + columnTracks[i].m_usedBreadth); |
1135 for (size_t i = 0; i < coordinate.rows.initialPositionIndex && i < rowTracks
.size(); ++i) | 1130 for (size_t i = 0; i < coordinate.rows.initialPositionIndex && i < rowTracks
.size(); ++i) |
1136 offset.setY(offset.y() + rowTracks[i].m_usedBreadth); | 1131 offset.setY(offset.y() + rowTracks[i].m_usedBreadth); |
1137 | 1132 |
1138 // FIXME: Handle margins on the grid item. | |
1139 return offset; | 1133 return offset; |
1140 } | 1134 } |
1141 | 1135 |
1142 void RenderGrid::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOff
set) | 1136 void RenderGrid::paintChildren(PaintInfo& paintInfo, const LayoutPoint& paintOff
set) |
1143 { | 1137 { |
1144 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) | 1138 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) |
1145 paintChild(child, paintInfo, paintOffset); | 1139 paintChild(child, paintInfo, paintOffset); |
1146 } | 1140 } |
1147 | 1141 |
1148 const char* RenderGrid::renderName() const | 1142 const char* RenderGrid::renderName() const |
1149 { | 1143 { |
1150 if (isFloating()) | 1144 if (isFloating()) |
1151 return "RenderGrid (floating)"; | 1145 return "RenderGrid (floating)"; |
1152 if (isOutOfFlowPositioned()) | 1146 if (isOutOfFlowPositioned()) |
1153 return "RenderGrid (positioned)"; | 1147 return "RenderGrid (positioned)"; |
1154 if (isAnonymous()) | 1148 if (isAnonymous()) |
1155 return "RenderGrid (generated)"; | 1149 return "RenderGrid (generated)"; |
1156 if (isRelPositioned()) | 1150 if (isRelPositioned()) |
1157 return "RenderGrid (relative positioned)"; | 1151 return "RenderGrid (relative positioned)"; |
1158 return "RenderGrid"; | 1152 return "RenderGrid"; |
1159 } | 1153 } |
1160 | 1154 |
1161 } // namespace WebCore | 1155 } // namespace WebCore |
OLD | NEW |