Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: Source/WebCore/rendering/RenderTable.cpp

Issue 13674002: Support intrinsic values for height, min-height and max-height (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: CSS table tests Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/WebCore/rendering/RenderReplaced.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 * (C) 1997 Torben Weis (weis@kde.org) 3 * (C) 1997 Torben Weis (weis@kde.org)
4 * (C) 1998 Waldo Bastian (bastian@kde.org) 4 * (C) 1998 Waldo Bastian (bastian@kde.org)
5 * (C) 1999 Lars Knoll (knoll@kde.org) 5 * (C) 1999 Lars Knoll (knoll@kde.org)
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) 6 * (C) 1999 Antti Koivisto (koivisto@kde.org)
7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r ights reserved. 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All r ights reserved.
8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 LayoutUnit borders = 0; 320 LayoutUnit borders = 0;
321 bool isCSSTable = !node() || !node()->hasTagName(tableTag); 321 bool isCSSTable = !node() || !node()->hasTagName(tableTag);
322 if (isCSSTable && styleLogicalWidth.isSpecified() && styleLogicalWidth.isPos itive() && style()->boxSizing() == CONTENT_BOX) 322 if (isCSSTable && styleLogicalWidth.isSpecified() && styleLogicalWidth.isPos itive() && style()->boxSizing() == CONTENT_BOX)
323 borders = borderStart() + borderEnd() + (collapseBorders() ? LayoutUnit( ) : paddingStart() + paddingEnd()); 323 borders = borderStart() + borderEnd() + (collapseBorders() ? LayoutUnit( ) : paddingStart() + paddingEnd());
324 324
325 return minimumValueForLength(styleLogicalWidth, availableWidth, view()) + bo rders; 325 return minimumValueForLength(styleLogicalWidth, availableWidth, view()) + bo rders;
326 } 326 }
327 327
328 LayoutUnit RenderTable::convertStyleLogicalHeightToComputedHeight(const Length& styleLogicalHeight) 328 LayoutUnit RenderTable::convertStyleLogicalHeightToComputedHeight(const Length& styleLogicalHeight)
329 { 329 {
330 LayoutUnit borderAndPaddingBefore = borderBefore() + (collapseBorders() ? La youtUnit() : paddingBefore());
331 LayoutUnit borderAndPaddingAfter = borderAfter() + (collapseBorders() ? Layo utUnit() : paddingAfter());
332 LayoutUnit borderAndPadding = borderAndPaddingBefore + borderAndPaddingAfter ;
330 LayoutUnit computedLogicalHeight = 0; 333 LayoutUnit computedLogicalHeight = 0;
331 if (styleLogicalHeight.isFixed()) { 334 if (styleLogicalHeight.isFixed()) {
332 // HTML tables size as though CSS height includes border/padding, CSS ta bles do not. 335 // HTML tables size as though CSS height includes border/padding, CSS ta bles do not.
333 LayoutUnit borders = LayoutUnit(); 336 LayoutUnit borders = LayoutUnit();
334 // FIXME: We cannot apply box-sizing: content-box on <table> which other browsers allow. 337 // FIXME: We cannot apply box-sizing: content-box on <table> which other browsers allow.
335 if ((node() && node()->hasTagName(tableTag)) || style()->boxSizing() == BORDER_BOX) { 338 if ((node() && node()->hasTagName(tableTag)) || style()->boxSizing() == BORDER_BOX) {
336 LayoutUnit borderAndPaddingBefore = borderBefore() + (collapseBorder s() ? LayoutUnit() : paddingBefore()); 339 borders = borderAndPadding;
337 LayoutUnit borderAndPaddingAfter = borderAfter() + (collapseBorders( ) ? LayoutUnit() : paddingAfter());
338 borders = borderAndPaddingBefore + borderAndPaddingAfter;
339 } 340 }
340 computedLogicalHeight = styleLogicalHeight.value() - borders; 341 computedLogicalHeight = styleLogicalHeight.value() - borders;
341 } else if (styleLogicalHeight.isPercent()) 342 } else if (styleLogicalHeight.isPercent())
342 computedLogicalHeight = computePercentageLogicalHeight(styleLogicalHeigh t); 343 computedLogicalHeight = computePercentageLogicalHeight(styleLogicalHeigh t);
343 else if (styleLogicalHeight.isViewportPercentage()) 344 else if (styleLogicalHeight.isViewportPercentage())
344 computedLogicalHeight = minimumValueForLength(styleLogicalHeight, 0, vie w()); 345 computedLogicalHeight = minimumValueForLength(styleLogicalHeight, 0, vie w());
346 else if (styleLogicalHeight.isIntrinsic())
347 computedLogicalHeight = computeIntrinsicLogicalContentHeightUsing(styleL ogicalHeight, logicalHeight() - borderAndPadding, borderAndPadding);
345 else 348 else
346 ASSERT_NOT_REACHED(); 349 ASSERT_NOT_REACHED();
347 return max<LayoutUnit>(0, computedLogicalHeight); 350 return max<LayoutUnit>(0, computedLogicalHeight);
348 } 351 }
349 352
350 void RenderTable::layoutCaption(RenderTableCaption* caption) 353 void RenderTable::layoutCaption(RenderTableCaption* caption)
351 { 354 {
352 LayoutRect captionRect(caption->frameRect()); 355 LayoutRect captionRect(caption->frameRect());
353 356
354 if (caption->needsLayout()) { 357 if (caption->needsLayout()) {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 LayoutUnit borderAndPaddingAfter = borderAfter() + (collapsing ? LayoutUnit( ) : paddingAfter()); 472 LayoutUnit borderAndPaddingAfter = borderAfter() + (collapsing ? LayoutUnit( ) : paddingAfter());
470 473
471 setLogicalHeight(logicalHeight() + borderAndPaddingBefore); 474 setLogicalHeight(logicalHeight() + borderAndPaddingBefore);
472 475
473 if (!isOutOfFlowPositioned()) 476 if (!isOutOfFlowPositioned())
474 updateLogicalHeight(); 477 updateLogicalHeight();
475 478
476 LayoutUnit computedLogicalHeight = 0; 479 LayoutUnit computedLogicalHeight = 0;
477 480
478 Length logicalHeightLength = style()->logicalHeight(); 481 Length logicalHeightLength = style()->logicalHeight();
479 if (logicalHeightLength.isSpecified() && logicalHeightLength.isPositive()) 482 if (logicalHeightLength.isIntrinsic() || (logicalHeightLength.isSpecified() && logicalHeightLength.isPositive()))
480 computedLogicalHeight = convertStyleLogicalHeightToComputedHeight(logica lHeightLength); 483 computedLogicalHeight = convertStyleLogicalHeightToComputedHeight(logica lHeightLength);
481 484
482 Length logicalMaxHeightLength = style()->logicalMaxHeight(); 485 Length logicalMaxHeightLength = style()->logicalMaxHeight();
483 if (logicalMaxHeightLength.isSpecified() && !logicalMaxHeightLength.isNegati ve()) { 486 if (logicalMaxHeightLength.isIntrinsic() || (logicalMaxHeightLength.isSpecif ied() && !logicalMaxHeightLength.isNegative())) {
484 LayoutUnit computedMaxLogicalHeight = convertStyleLogicalHeightToCompute dHeight(logicalMaxHeightLength); 487 LayoutUnit computedMaxLogicalHeight = convertStyleLogicalHeightToCompute dHeight(logicalMaxHeightLength);
485 computedLogicalHeight = min(computedLogicalHeight, computedMaxLogicalHei ght); 488 computedLogicalHeight = min(computedLogicalHeight, computedMaxLogicalHei ght);
486 } 489 }
487 490
488 Length logicalMinHeightLength = style()->logicalMinHeight(); 491 Length logicalMinHeightLength = style()->logicalMinHeight();
489 if (logicalMinHeightLength.isSpecified() && !logicalMinHeightLength.isNegati ve()) { 492 if (logicalMinHeightLength.isIntrinsic() || (logicalMinHeightLength.isSpecif ied() && !logicalMinHeightLength.isNegative())) {
490 LayoutUnit computedMinLogicalHeight = convertStyleLogicalHeightToCompute dHeight(logicalMinHeightLength); 493 LayoutUnit computedMinLogicalHeight = convertStyleLogicalHeightToCompute dHeight(logicalMinHeightLength);
491 computedLogicalHeight = max(computedLogicalHeight, computedMinLogicalHei ght); 494 computedLogicalHeight = max(computedLogicalHeight, computedMinLogicalHei ght);
492 } 495 }
493 496
494 distributeExtraLogicalHeight(floorToInt(computedLogicalHeight - totalSection LogicalHeight)); 497 distributeExtraLogicalHeight(floorToInt(computedLogicalHeight - totalSection LogicalHeight));
495 498
496 for (RenderTableSection* section = topSection(); section; section = sectionB elow(section)) 499 for (RenderTableSection* section = topSection(); section; section = sectionB elow(section))
497 section->layoutRows(); 500 section->layoutRows();
498 501
499 if (!topSection() && computedLogicalHeight > totalSectionLogicalHeight && !d ocument()->inQuirksMode()) { 502 if (!topSection() && computedLogicalHeight > totalSectionLogicalHeight && !d ocument()->inQuirksMode()) {
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after
1425 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel l* cell) const 1428 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel l* cell) const
1426 { 1429 {
1427 ASSERT(cell->isFirstOrLastCellInRow()); 1430 ASSERT(cell->isFirstOrLastCellInRow());
1428 if (hasSameDirectionAs(cell->row())) 1431 if (hasSameDirectionAs(cell->row()))
1429 return style()->borderEnd(); 1432 return style()->borderEnd();
1430 1433
1431 return style()->borderStart(); 1434 return style()->borderStart();
1432 } 1435 }
1433 1436
1434 } 1437 }
OLDNEW
« no previous file with comments | « Source/WebCore/rendering/RenderReplaced.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698