OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. |
4 * Copyright (C) 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2010 Google Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
560 } | 560 } |
561 expansionOpportunityCount -= opportunitiesInRun; | 561 expansionOpportunityCount -= opportunitiesInRun; |
562 if (!expansionOpportunityCount) | 562 if (!expansionOpportunityCount) |
563 break; | 563 break; |
564 } | 564 } |
565 } | 565 } |
566 } | 566 } |
567 | 567 |
568 void RenderBlockFlow::updateLogicalWidthForAlignment(const ETextAlign& textAlign
, const RootInlineBox* rootInlineBox, BidiRun* trailingSpaceRun, float& logicalL
eft, float& totalLogicalWidth, float& availableLogicalWidth, int expansionOpport
unityCount) | 568 void RenderBlockFlow::updateLogicalWidthForAlignment(const ETextAlign& textAlign
, const RootInlineBox* rootInlineBox, BidiRun* trailingSpaceRun, float& logicalL
eft, float& totalLogicalWidth, float& availableLogicalWidth, int expansionOpport
unityCount) |
569 { | 569 { |
570 TextDirection direction; | |
571 if (rootInlineBox && rootInlineBox->renderer()->style()->unicodeBidi() == Pl
aintext) | |
572 direction = rootInlineBox->direction(); | |
573 else | |
574 direction = style()->direction(); | |
575 | |
576 // Armed with the total width of the line (without justification), | 570 // Armed with the total width of the line (without justification), |
577 // we now examine our text-align property in order to determine where to pos
ition the | 571 // we now examine our text-align property in order to determine where to pos
ition the |
578 // objects horizontally. The total width of the line can be increased if we
end up | 572 // objects horizontally. The total width of the line can be increased if we
end up |
579 // justifying text. | 573 // justifying text. |
580 switch (textAlign) { | 574 switch (simplifiedTextAlign(textAlign, rootInlineBox)) { |
581 case LEFT: | 575 case LEFT: |
582 case WEBKIT_LEFT: | |
583 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirection(),
trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | 576 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirection(),
trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); |
584 break; | 577 break; |
585 case RIGHT: | 578 case RIGHT: |
586 case WEBKIT_RIGHT: | |
587 updateLogicalWidthForRightAlignedBlock(style()->isLeftToRightDirection()
, trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | 579 updateLogicalWidthForRightAlignedBlock(style()->isLeftToRightDirection()
, trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); |
588 break; | 580 break; |
589 case CENTER: | 581 case CENTER: |
590 case WEBKIT_CENTER: | |
591 updateLogicalWidthForCenterAlignedBlock(style()->isLeftToRightDirection(
), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | 582 updateLogicalWidthForCenterAlignedBlock(style()->isLeftToRightDirection(
), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); |
592 break; | 583 break; |
593 case JUSTIFY: | 584 case JUSTIFY: |
594 adjustInlineDirectionLineBounds(expansionOpportunityCount, logicalLeft,
availableLogicalWidth); | 585 adjustInlineDirectionLineBounds(expansionOpportunityCount, logicalLeft,
availableLogicalWidth); |
595 if (expansionOpportunityCount) { | 586 if (expansionOpportunityCount) { |
596 if (trailingSpaceRun) { | 587 if (trailingSpaceRun) { |
597 totalLogicalWidth -= trailingSpaceRun->m_box->logicalWidth(); | 588 totalLogicalWidth -= trailingSpaceRun->m_box->logicalWidth(); |
598 trailingSpaceRun->m_box->setLogicalWidth(0); | 589 trailingSpaceRun->m_box->setLogicalWidth(0); |
599 } | 590 } |
600 break; | 591 } else { |
| 592 ETextAlign adjustedTextAlign = style()->isLeftToRightDirection() ? L
EFT : RIGHT; |
| 593 updateLogicalWidthForAlignment(adjustedTextAlign, rootInlineBox, tra
ilingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth, expansionO
pportunityCount); |
601 } | 594 } |
602 // Fall through | |
603 case TASTART: | |
604 if (direction == LTR) | |
605 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio
n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | |
606 else | |
607 updateLogicalWidthForRightAlignedBlock(style()->isLeftToRightDirecti
on(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | |
608 break; | 595 break; |
609 case TAEND: | 596 default: |
610 if (direction == LTR) | 597 ASSERT_NOT_REACHED(); |
611 updateLogicalWidthForRightAlignedBlock(style()->isLeftToRightDirecti
on(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | |
612 else | |
613 updateLogicalWidthForLeftAlignedBlock(style()->isLeftToRightDirectio
n(), trailingSpaceRun, logicalLeft, totalLogicalWidth, availableLogicalWidth); | |
614 break; | 598 break; |
615 } | 599 } |
616 } | 600 } |
617 | 601 |
618 static void updateLogicalInlinePositions(RenderBlockFlow* block, float& lineLogi
calLeft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine,
IndentTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) | 602 static void updateLogicalInlinePositions(RenderBlockFlow* block, float& lineLogi
calLeft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine,
IndentTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight) |
619 { | 603 { |
620 LayoutUnit lineLogicalHeight = block->minLineHeightForReplacedRenderer(first
Line, boxLogicalHeight); | 604 LayoutUnit lineLogicalHeight = block->minLineHeightForReplacedRenderer(first
Line, boxLogicalHeight); |
621 lineLogicalLeft = block->logicalLeftOffsetForLine(block->logicalHeight(), sh
ouldIndentText == IndentText, lineLogicalHeight); | 605 lineLogicalLeft = block->logicalLeftOffsetForLine(block->logicalHeight(), sh
ouldIndentText == IndentText, lineLogicalHeight); |
622 // FIXME: This shouldn't be pixel snapped once multicolumn layout has been u
pdated to correctly carry over subpixel values. | 606 // FIXME: This shouldn't be pixel snapped once multicolumn layout has been u
pdated to correctly carry over subpixel values. |
623 // https://bugs.webkit.org/show_bug.cgi?id=105461 | 607 // https://bugs.webkit.org/show_bug.cgi?id=105461 |
(...skipping 1621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2245 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); | 2229 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); |
2246 | 2230 |
2247 setLineGridBox(lineGridBox); | 2231 setLineGridBox(lineGridBox); |
2248 | 2232 |
2249 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying | 2233 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying |
2250 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping | 2234 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping |
2251 // to this grid. | 2235 // to this grid. |
2252 } | 2236 } |
2253 | 2237 |
2254 } | 2238 } |
OLD | NEW |