| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 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 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 LayoutUnit borderAndPadding = child.borderAndPaddingLogicalWidth(); | 451 LayoutUnit borderAndPadding = child.borderAndPaddingLogicalWidth(); |
| 452 if (child.styleRef().logicalWidth().isAuto()) { | 452 if (child.styleRef().logicalWidth().isAuto()) { |
| 453 if (size.type() == MinContent) | 453 if (size.type() == MinContent) |
| 454 return child.minPreferredLogicalWidth() - borderAndPadding; | 454 return child.minPreferredLogicalWidth() - borderAndPadding; |
| 455 if (size.type() == MaxContent) | 455 if (size.type() == MaxContent) |
| 456 return child.maxPreferredLogicalWidth() - borderAndPadding; | 456 return child.maxPreferredLogicalWidth() - borderAndPadding; |
| 457 } | 457 } |
| 458 return child.computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(),
this) - borderAndPadding; | 458 return child.computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(),
this) - borderAndPadding; |
| 459 } | 459 } |
| 460 | 460 |
| 461 WritingMode LayoutFlexibleBox::transformedWritingMode() const | 461 LayoutFlexibleBox::TransformedWritingMode LayoutFlexibleBox::transformedWritingM
ode() const |
| 462 { | 462 { |
| 463 WritingMode mode = style()->writingMode(); | 463 WritingMode mode = style()->writingMode(); |
| 464 if (!isColumnFlow()) | 464 if (!isColumnFlow()) { |
| 465 return mode; | 465 static_assert(static_cast<TransformedWritingMode>(TopToBottomWritingMode
) == TransformedWritingMode::TopToBottomWritingMode |
| 466 && static_cast<TransformedWritingMode>(LeftToRightWritingMode) == Tr
ansformedWritingMode::LeftToRightWritingMode |
| 467 && static_cast<TransformedWritingMode>(RightToLeftWritingMode) == Tr
ansformedWritingMode::RightToLeftWritingMode, |
| 468 "WritingMode and TransformedWritingMode must match values."); |
| 469 return static_cast<TransformedWritingMode>(mode); |
| 470 } |
| 466 | 471 |
| 467 switch (mode) { | 472 switch (mode) { |
| 468 case TopToBottomWritingMode: | 473 case TopToBottomWritingMode: |
| 469 case BottomToTopWritingMode: | 474 return style()->isLeftToRightDirection() ? TransformedWritingMode::LeftT
oRightWritingMode : TransformedWritingMode::RightToLeftWritingMode; |
| 470 return style()->isLeftToRightDirection() ? LeftToRightWritingMode : Righ
tToLeftWritingMode; | |
| 471 case LeftToRightWritingMode: | 475 case LeftToRightWritingMode: |
| 472 case RightToLeftWritingMode: | 476 case RightToLeftWritingMode: |
| 473 return style()->isLeftToRightDirection() ? TopToBottomWritingMode : Bott
omToTopWritingMode; | 477 return style()->isLeftToRightDirection() ? TransformedWritingMode::TopTo
BottomWritingMode : TransformedWritingMode::BottomToTopWritingMode; |
| 474 } | 478 } |
| 475 ASSERT_NOT_REACHED(); | 479 ASSERT_NOT_REACHED(); |
| 476 return TopToBottomWritingMode; | 480 return TransformedWritingMode::TopToBottomWritingMode; |
| 477 } | 481 } |
| 478 | 482 |
| 479 LayoutUnit LayoutFlexibleBox::flowAwareBorderStart() const | 483 LayoutUnit LayoutFlexibleBox::flowAwareBorderStart() const |
| 480 { | 484 { |
| 481 if (isHorizontalFlow()) | 485 if (isHorizontalFlow()) |
| 482 return isLeftToRightFlow() ? borderLeft() : borderRight(); | 486 return isLeftToRightFlow() ? borderLeft() : borderRight(); |
| 483 return isLeftToRightFlow() ? borderTop() : borderBottom(); | 487 return isLeftToRightFlow() ? borderTop() : borderBottom(); |
| 484 } | 488 } |
| 485 | 489 |
| 486 LayoutUnit LayoutFlexibleBox::flowAwareBorderEnd() const | 490 LayoutUnit LayoutFlexibleBox::flowAwareBorderEnd() const |
| 487 { | 491 { |
| 488 if (isHorizontalFlow()) | 492 if (isHorizontalFlow()) |
| 489 return isLeftToRightFlow() ? borderRight() : borderLeft(); | 493 return isLeftToRightFlow() ? borderRight() : borderLeft(); |
| 490 return isLeftToRightFlow() ? borderBottom() : borderTop(); | 494 return isLeftToRightFlow() ? borderBottom() : borderTop(); |
| 491 } | 495 } |
| 492 | 496 |
| 493 LayoutUnit LayoutFlexibleBox::flowAwareBorderBefore() const | 497 LayoutUnit LayoutFlexibleBox::flowAwareBorderBefore() const |
| 494 { | 498 { |
| 495 switch (transformedWritingMode()) { | 499 switch (transformedWritingMode()) { |
| 496 case TopToBottomWritingMode: | 500 case TransformedWritingMode::TopToBottomWritingMode: |
| 497 return borderTop(); | 501 return borderTop(); |
| 498 case BottomToTopWritingMode: | 502 case TransformedWritingMode::BottomToTopWritingMode: |
| 499 return borderBottom(); | 503 return borderBottom(); |
| 500 case LeftToRightWritingMode: | 504 case TransformedWritingMode::LeftToRightWritingMode: |
| 501 return borderLeft(); | 505 return borderLeft(); |
| 502 case RightToLeftWritingMode: | 506 case TransformedWritingMode::RightToLeftWritingMode: |
| 503 return borderRight(); | 507 return borderRight(); |
| 504 } | 508 } |
| 505 ASSERT_NOT_REACHED(); | 509 ASSERT_NOT_REACHED(); |
| 506 return borderTop(); | 510 return borderTop(); |
| 507 } | 511 } |
| 508 | 512 |
| 509 LayoutUnit LayoutFlexibleBox::flowAwareBorderAfter() const | 513 LayoutUnit LayoutFlexibleBox::flowAwareBorderAfter() const |
| 510 { | 514 { |
| 511 switch (transformedWritingMode()) { | 515 switch (transformedWritingMode()) { |
| 512 case TopToBottomWritingMode: | 516 case TransformedWritingMode::TopToBottomWritingMode: |
| 513 return borderBottom(); | 517 return borderBottom(); |
| 514 case BottomToTopWritingMode: | 518 case TransformedWritingMode::BottomToTopWritingMode: |
| 515 return borderTop(); | 519 return borderTop(); |
| 516 case LeftToRightWritingMode: | 520 case TransformedWritingMode::LeftToRightWritingMode: |
| 517 return borderRight(); | 521 return borderRight(); |
| 518 case RightToLeftWritingMode: | 522 case TransformedWritingMode::RightToLeftWritingMode: |
| 519 return borderLeft(); | 523 return borderLeft(); |
| 520 } | 524 } |
| 521 ASSERT_NOT_REACHED(); | 525 ASSERT_NOT_REACHED(); |
| 522 return borderTop(); | 526 return borderTop(); |
| 523 } | 527 } |
| 524 | 528 |
| 525 LayoutUnit LayoutFlexibleBox::flowAwarePaddingStart() const | 529 LayoutUnit LayoutFlexibleBox::flowAwarePaddingStart() const |
| 526 { | 530 { |
| 527 if (isHorizontalFlow()) | 531 if (isHorizontalFlow()) |
| 528 return isLeftToRightFlow() ? paddingLeft() : paddingRight(); | 532 return isLeftToRightFlow() ? paddingLeft() : paddingRight(); |
| 529 return isLeftToRightFlow() ? paddingTop() : paddingBottom(); | 533 return isLeftToRightFlow() ? paddingTop() : paddingBottom(); |
| 530 } | 534 } |
| 531 | 535 |
| 532 LayoutUnit LayoutFlexibleBox::flowAwarePaddingEnd() const | 536 LayoutUnit LayoutFlexibleBox::flowAwarePaddingEnd() const |
| 533 { | 537 { |
| 534 if (isHorizontalFlow()) | 538 if (isHorizontalFlow()) |
| 535 return isLeftToRightFlow() ? paddingRight() : paddingLeft(); | 539 return isLeftToRightFlow() ? paddingRight() : paddingLeft(); |
| 536 return isLeftToRightFlow() ? paddingBottom() : paddingTop(); | 540 return isLeftToRightFlow() ? paddingBottom() : paddingTop(); |
| 537 } | 541 } |
| 538 | 542 |
| 539 LayoutUnit LayoutFlexibleBox::flowAwarePaddingBefore() const | 543 LayoutUnit LayoutFlexibleBox::flowAwarePaddingBefore() const |
| 540 { | 544 { |
| 541 switch (transformedWritingMode()) { | 545 switch (transformedWritingMode()) { |
| 542 case TopToBottomWritingMode: | 546 case TransformedWritingMode::TopToBottomWritingMode: |
| 543 return paddingTop(); | 547 return paddingTop(); |
| 544 case BottomToTopWritingMode: | 548 case TransformedWritingMode::BottomToTopWritingMode: |
| 545 return paddingBottom(); | 549 return paddingBottom(); |
| 546 case LeftToRightWritingMode: | 550 case TransformedWritingMode::LeftToRightWritingMode: |
| 547 return paddingLeft(); | 551 return paddingLeft(); |
| 548 case RightToLeftWritingMode: | 552 case TransformedWritingMode::RightToLeftWritingMode: |
| 549 return paddingRight(); | 553 return paddingRight(); |
| 550 } | 554 } |
| 551 ASSERT_NOT_REACHED(); | 555 ASSERT_NOT_REACHED(); |
| 552 return paddingTop(); | 556 return paddingTop(); |
| 553 } | 557 } |
| 554 | 558 |
| 555 LayoutUnit LayoutFlexibleBox::flowAwarePaddingAfter() const | 559 LayoutUnit LayoutFlexibleBox::flowAwarePaddingAfter() const |
| 556 { | 560 { |
| 557 switch (transformedWritingMode()) { | 561 switch (transformedWritingMode()) { |
| 558 case TopToBottomWritingMode: | 562 case TransformedWritingMode::TopToBottomWritingMode: |
| 559 return paddingBottom(); | 563 return paddingBottom(); |
| 560 case BottomToTopWritingMode: | 564 case TransformedWritingMode::BottomToTopWritingMode: |
| 561 return paddingTop(); | 565 return paddingTop(); |
| 562 case LeftToRightWritingMode: | 566 case TransformedWritingMode::LeftToRightWritingMode: |
| 563 return paddingRight(); | 567 return paddingRight(); |
| 564 case RightToLeftWritingMode: | 568 case TransformedWritingMode::RightToLeftWritingMode: |
| 565 return paddingLeft(); | 569 return paddingLeft(); |
| 566 } | 570 } |
| 567 ASSERT_NOT_REACHED(); | 571 ASSERT_NOT_REACHED(); |
| 568 return paddingTop(); | 572 return paddingTop(); |
| 569 } | 573 } |
| 570 | 574 |
| 571 LayoutUnit LayoutFlexibleBox::flowAwareMarginStartForChild(const LayoutBox& chil
d) const | 575 LayoutUnit LayoutFlexibleBox::flowAwareMarginStartForChild(const LayoutBox& chil
d) const |
| 572 { | 576 { |
| 573 if (isHorizontalFlow()) | 577 if (isHorizontalFlow()) |
| 574 return isLeftToRightFlow() ? child.marginLeft() : child.marginRight(); | 578 return isLeftToRightFlow() ? child.marginLeft() : child.marginRight(); |
| 575 return isLeftToRightFlow() ? child.marginTop() : child.marginBottom(); | 579 return isLeftToRightFlow() ? child.marginTop() : child.marginBottom(); |
| 576 } | 580 } |
| 577 | 581 |
| 578 LayoutUnit LayoutFlexibleBox::flowAwareMarginEndForChild(const LayoutBox& child)
const | 582 LayoutUnit LayoutFlexibleBox::flowAwareMarginEndForChild(const LayoutBox& child)
const |
| 579 { | 583 { |
| 580 if (isHorizontalFlow()) | 584 if (isHorizontalFlow()) |
| 581 return isLeftToRightFlow() ? child.marginRight() : child.marginLeft(); | 585 return isLeftToRightFlow() ? child.marginRight() : child.marginLeft(); |
| 582 return isLeftToRightFlow() ? child.marginBottom() : child.marginTop(); | 586 return isLeftToRightFlow() ? child.marginBottom() : child.marginTop(); |
| 583 } | 587 } |
| 584 | 588 |
| 585 LayoutUnit LayoutFlexibleBox::flowAwareMarginBeforeForChild(const LayoutBox& chi
ld) const | 589 LayoutUnit LayoutFlexibleBox::flowAwareMarginBeforeForChild(const LayoutBox& chi
ld) const |
| 586 { | 590 { |
| 587 switch (transformedWritingMode()) { | 591 switch (transformedWritingMode()) { |
| 588 case TopToBottomWritingMode: | 592 case TransformedWritingMode::TopToBottomWritingMode: |
| 589 return child.marginTop(); | 593 return child.marginTop(); |
| 590 case BottomToTopWritingMode: | 594 case TransformedWritingMode::BottomToTopWritingMode: |
| 591 return child.marginBottom(); | 595 return child.marginBottom(); |
| 592 case LeftToRightWritingMode: | 596 case TransformedWritingMode::LeftToRightWritingMode: |
| 593 return child.marginLeft(); | 597 return child.marginLeft(); |
| 594 case RightToLeftWritingMode: | 598 case TransformedWritingMode::RightToLeftWritingMode: |
| 595 return child.marginRight(); | 599 return child.marginRight(); |
| 596 } | 600 } |
| 597 ASSERT_NOT_REACHED(); | 601 ASSERT_NOT_REACHED(); |
| 598 return marginTop(); | 602 return marginTop(); |
| 599 } | 603 } |
| 600 | 604 |
| 601 LayoutUnit LayoutFlexibleBox::crossAxisMarginExtentForChild(const LayoutBox& chi
ld) const | 605 LayoutUnit LayoutFlexibleBox::crossAxisMarginExtentForChild(const LayoutBox& chi
ld) const |
| 602 { | 606 { |
| 603 return isHorizontalFlow() ? child.marginHeight() : child.marginWidth(); | 607 return isHorizontalFlow() ? child.marginHeight() : child.marginWidth(); |
| 604 } | 608 } |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1518 ASSERT(child); | 1522 ASSERT(child); |
| 1519 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; | 1523 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; |
| 1520 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; | 1524 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; |
| 1521 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; | 1525 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; |
| 1522 adjustAlignmentForChild(*child, newOffset - originalOffset); | 1526 adjustAlignmentForChild(*child, newOffset - originalOffset); |
| 1523 } | 1527 } |
| 1524 } | 1528 } |
| 1525 } | 1529 } |
| 1526 | 1530 |
| 1527 } | 1531 } |
| OLD | NEW |