| 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 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox* child) co
nst | 1156 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox* child) co
nst |
| 1157 { | 1157 { |
| 1158 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1158 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
| 1159 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; | 1159 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit
ialPosition.toInt()]; |
| 1160 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; | 1160 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP
osition.next().toInt()]; |
| 1161 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); | 1161 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); |
| 1162 // FIXME: This should account for the grid item's <overflow-position>. | 1162 // FIXME: This should account for the grid item's <overflow-position>. |
| 1163 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - startOfColumn
- child->logicalWidth()) / 2; | 1163 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - startOfColumn
- child->logicalWidth()) / 2; |
| 1164 } | 1164 } |
| 1165 | 1165 |
| 1166 static ItemPosition resolveJustification(const RenderStyle* parentStyle, const R
enderStyle* childStyle) |
| 1167 { |
| 1168 ItemPosition justify = childStyle->justifySelf(); |
| 1169 if (justify == ItemPositionAuto) |
| 1170 justify = (parentStyle->justifyItems() == ItemPositionAuto) ? ItemPositi
onStretch : parentStyle->justifyItems(); |
| 1171 |
| 1172 return justify; |
| 1173 } |
| 1174 |
| 1166 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox* child) const | 1175 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox* child) const |
| 1167 { | 1176 { |
| 1168 ItemPosition childJustifySelf = child->style()->justifySelf(); | 1177 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHorizo
ntalWritingMode(); |
| 1169 switch (childJustifySelf) { | 1178 |
| 1179 switch (resolveJustification(style(), child->style())) { |
| 1170 case ItemPositionSelfStart: | 1180 case ItemPositionSelfStart: |
| 1181 // For orthogonal writing-modes, this computes to 'start' |
| 1182 // FIXME: grid track sizing and positioning do not support orthogonal mo
des yet. |
| 1183 if (hasOrthogonalWritingMode) |
| 1184 return columnPositionAlignedWithGridContainerStart(child); |
| 1185 |
| 1171 // self-start is based on the child's direction. That's why we need to c
heck against the grid container's direction. | 1186 // self-start is based on the child's direction. That's why we need to c
heck against the grid container's direction. |
| 1172 if (child->style()->direction() != style()->direction()) | 1187 if (child->style()->direction() != style()->direction()) |
| 1173 return columnPositionAlignedWithGridContainerEnd(child); | 1188 return columnPositionAlignedWithGridContainerEnd(child); |
| 1174 | 1189 |
| 1175 return columnPositionAlignedWithGridContainerStart(child); | 1190 return columnPositionAlignedWithGridContainerStart(child); |
| 1176 case ItemPositionSelfEnd: | 1191 case ItemPositionSelfEnd: |
| 1192 // For orthogonal writing-modes, this computes to 'start' |
| 1193 // FIXME: grid track sizing and positioning do not support orthogonal mo
des yet. |
| 1194 if (hasOrthogonalWritingMode) |
| 1195 return columnPositionAlignedWithGridContainerEnd(child); |
| 1196 |
| 1177 // self-end is based on the child's direction. That's why we need to che
ck against the grid container's direction. | 1197 // self-end is based on the child's direction. That's why we need to che
ck against the grid container's direction. |
| 1178 if (child->style()->direction() != style()->direction()) | 1198 if (child->style()->direction() != style()->direction()) |
| 1179 return columnPositionAlignedWithGridContainerStart(child); | 1199 return columnPositionAlignedWithGridContainerStart(child); |
| 1180 | 1200 |
| 1181 return columnPositionAlignedWithGridContainerEnd(child); | 1201 return columnPositionAlignedWithGridContainerEnd(child); |
| 1182 | 1202 |
| 1183 case ItemPositionFlexStart: | 1203 case ItemPositionFlexStart: |
| 1204 // Only used in flex layout, for other layout, it's equivalent to 'start
'. |
| 1205 return columnPositionAlignedWithGridContainerStart(child); |
| 1184 case ItemPositionFlexEnd: | 1206 case ItemPositionFlexEnd: |
| 1185 // Only used in flex layout, for other layout, it's equivalent to 'start
'. | 1207 // Only used in flex layout, for other layout, it's equivalent to 'start
'. |
| 1186 return columnPositionAlignedWithGridContainerStart(child); | 1208 return columnPositionAlignedWithGridContainerEnd(child); |
| 1187 | 1209 |
| 1188 case ItemPositionLeft: | 1210 case ItemPositionLeft: |
| 1189 // If the property's axis is not parallel with the inline axis, this is
equivalent to ‘start’. | 1211 // If the property's axis is not parallel with the inline axis, this is
equivalent to ‘start’. |
| 1190 if (!isHorizontalWritingMode()) | 1212 if (!isHorizontalWritingMode()) |
| 1191 return columnPositionAlignedWithGridContainerStart(child); | 1213 return columnPositionAlignedWithGridContainerStart(child); |
| 1192 | 1214 |
| 1193 if (style()->isLeftToRightDirection()) | 1215 if (style()->isLeftToRightDirection()) |
| 1194 return columnPositionAlignedWithGridContainerStart(child); | 1216 return columnPositionAlignedWithGridContainerStart(child); |
| 1195 | 1217 |
| 1196 return columnPositionAlignedWithGridContainerEnd(child); | 1218 return columnPositionAlignedWithGridContainerEnd(child); |
| 1197 case ItemPositionRight: | 1219 case ItemPositionRight: |
| 1198 // If the property's axis is not parallel with the inline axis, this is
equivalent to ‘start’. | 1220 // If the property's axis is not parallel with the inline axis, this is
equivalent to ‘start’. |
| 1199 if (!isHorizontalWritingMode()) | 1221 if (!isHorizontalWritingMode()) |
| 1200 return columnPositionAlignedWithGridContainerStart(child); | 1222 return columnPositionAlignedWithGridContainerStart(child); |
| 1201 | 1223 |
| 1202 if (style()->isLeftToRightDirection()) | 1224 if (style()->isLeftToRightDirection()) |
| 1203 return columnPositionAlignedWithGridContainerEnd(child); | 1225 return columnPositionAlignedWithGridContainerEnd(child); |
| 1204 | 1226 |
| 1205 return columnPositionAlignedWithGridContainerStart(child); | 1227 return columnPositionAlignedWithGridContainerStart(child); |
| 1206 | 1228 |
| 1207 case ItemPositionCenter: | 1229 case ItemPositionCenter: |
| 1208 return centeredColumnPositionForChild(child); | 1230 return centeredColumnPositionForChild(child); |
| 1209 case ItemPositionStart: | 1231 case ItemPositionStart: |
| 1210 return columnPositionAlignedWithGridContainerStart(child); | 1232 return columnPositionAlignedWithGridContainerStart(child); |
| 1211 case ItemPositionEnd: | 1233 case ItemPositionEnd: |
| 1212 return columnPositionAlignedWithGridContainerEnd(child); | 1234 return columnPositionAlignedWithGridContainerEnd(child); |
| 1213 | 1235 |
| 1214 case ItemPositionAuto: | 1236 case ItemPositionAuto: |
| 1237 break; |
| 1215 case ItemPositionStretch: | 1238 case ItemPositionStretch: |
| 1216 case ItemPositionBaseline: | 1239 case ItemPositionBaseline: |
| 1217 case ItemPositionLastBaseline: | 1240 case ItemPositionLastBaseline: |
| 1218 // FIXME: Implement the previous values. For now, we always start align
the child. | 1241 // FIXME: Implement the previous values. For now, we always start align
the child. |
| 1219 return startOfColumnForChild(child); | 1242 return startOfColumnForChild(child); |
| 1220 } | 1243 } |
| 1221 | 1244 |
| 1222 ASSERT_NOT_REACHED(); | 1245 ASSERT_NOT_REACHED(); |
| 1223 return 0; | 1246 return 0; |
| 1224 } | 1247 } |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1423 if (isOutOfFlowPositioned()) | 1446 if (isOutOfFlowPositioned()) |
| 1424 return "RenderGrid (positioned)"; | 1447 return "RenderGrid (positioned)"; |
| 1425 if (isAnonymous()) | 1448 if (isAnonymous()) |
| 1426 return "RenderGrid (generated)"; | 1449 return "RenderGrid (generated)"; |
| 1427 if (isRelPositioned()) | 1450 if (isRelPositioned()) |
| 1428 return "RenderGrid (relative positioned)"; | 1451 return "RenderGrid (relative positioned)"; |
| 1429 return "RenderGrid"; | 1452 return "RenderGrid"; |
| 1430 } | 1453 } |
| 1431 | 1454 |
| 1432 } // namespace blink | 1455 } // namespace blink |
| OLD | NEW |