OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
8 * | 8 * |
9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
675 bool isLayoutInline = boxModel.isLayoutInline(); | 675 bool isLayoutInline = boxModel.isLayoutInline(); |
676 if (isLayoutInline && !firstLine) { | 676 if (isLayoutInline && !firstLine) { |
677 LayoutUnit verticalPosition = | 677 LayoutUnit verticalPosition = |
678 LayoutUnit(verticalPositionCache.get(boxModel, baselineType())); | 678 LayoutUnit(verticalPositionCache.get(boxModel, baselineType())); |
679 if (verticalPosition != PositionUndefined) | 679 if (verticalPosition != PositionUndefined) |
680 return verticalPosition; | 680 return verticalPosition; |
681 } | 681 } |
682 | 682 |
683 LayoutUnit verticalPosition; | 683 LayoutUnit verticalPosition; |
684 EVerticalAlign verticalAlign = boxModel.style()->verticalAlign(); | 684 EVerticalAlign verticalAlign = boxModel.style()->verticalAlign(); |
685 if (verticalAlign == VerticalAlignTop || verticalAlign == VerticalAlignBottom) | 685 if (verticalAlign == EVerticalAlign::Top || |
| 686 verticalAlign == EVerticalAlign::Bottom) |
686 return LayoutUnit(); | 687 return LayoutUnit(); |
687 | 688 |
688 LineLayoutItem parent = boxModel.parent(); | 689 LineLayoutItem parent = boxModel.parent(); |
689 if (parent.isLayoutInline() && | 690 if (parent.isLayoutInline() && |
690 parent.style()->verticalAlign() != VerticalAlignTop && | 691 parent.style()->verticalAlign() != EVerticalAlign::Top && |
691 parent.style()->verticalAlign() != VerticalAlignBottom) | 692 parent.style()->verticalAlign() != EVerticalAlign::Bottom) |
692 verticalPosition = box->parent()->logicalTop(); | 693 verticalPosition = box->parent()->logicalTop(); |
693 | 694 |
694 if (verticalAlign != VerticalAlignBaseline) { | 695 if (verticalAlign != EVerticalAlign::Baseline) { |
695 const Font& font = parent.style(firstLine)->font(); | 696 const Font& font = parent.style(firstLine)->font(); |
696 const SimpleFontData* fontData = font.primaryFont(); | 697 const SimpleFontData* fontData = font.primaryFont(); |
697 DCHECK(fontData); | 698 DCHECK(fontData); |
698 if (!fontData) | 699 if (!fontData) |
699 return LayoutUnit(); | 700 return LayoutUnit(); |
700 | 701 |
701 const FontMetrics& fontMetrics = fontData->getFontMetrics(); | 702 const FontMetrics& fontMetrics = fontData->getFontMetrics(); |
702 int fontSize = font.getFontDescription().computedPixelSize(); | 703 int fontSize = font.getFontDescription().computedPixelSize(); |
703 | 704 |
704 LineDirectionMode lineDirection = | 705 LineDirectionMode lineDirection = |
705 parent.isHorizontalWritingMode() ? HorizontalLine : VerticalLine; | 706 parent.isHorizontalWritingMode() ? HorizontalLine : VerticalLine; |
706 | 707 |
707 if (verticalAlign == VerticalAlignSub) { | 708 if (verticalAlign == EVerticalAlign::Sub) { |
708 verticalPosition += fontSize / 5 + 1; | 709 verticalPosition += fontSize / 5 + 1; |
709 } else if (verticalAlign == VerticalAlignSuper) { | 710 } else if (verticalAlign == EVerticalAlign::Super) { |
710 verticalPosition -= fontSize / 3 + 1; | 711 verticalPosition -= fontSize / 3 + 1; |
711 } else if (verticalAlign == VerticalAlignTextTop) { | 712 } else if (verticalAlign == EVerticalAlign::TextTop) { |
712 verticalPosition += | 713 verticalPosition += |
713 boxModel.baselinePosition(baselineType(), firstLine, lineDirection) - | 714 boxModel.baselinePosition(baselineType(), firstLine, lineDirection) - |
714 fontMetrics.ascent(baselineType()); | 715 fontMetrics.ascent(baselineType()); |
715 } else if (verticalAlign == VerticalAlignMiddle) { | 716 } else if (verticalAlign == EVerticalAlign::Middle) { |
716 verticalPosition = LayoutUnit( | 717 verticalPosition = LayoutUnit( |
717 (verticalPosition - LayoutUnit(fontMetrics.xHeight() / 2) - | 718 (verticalPosition - LayoutUnit(fontMetrics.xHeight() / 2) - |
718 boxModel.lineHeight(firstLine, lineDirection) / 2 + | 719 boxModel.lineHeight(firstLine, lineDirection) / 2 + |
719 boxModel.baselinePosition(baselineType(), firstLine, lineDirection)) | 720 boxModel.baselinePosition(baselineType(), firstLine, lineDirection)) |
720 .round()); | 721 .round()); |
721 } else if (verticalAlign == VerticalAlignTextBottom) { | 722 } else if (verticalAlign == EVerticalAlign::TextBottom) { |
722 verticalPosition += fontMetrics.descent(baselineType()); | 723 verticalPosition += fontMetrics.descent(baselineType()); |
723 // lineHeight - baselinePosition is always 0 for replaced elements (except | 724 // lineHeight - baselinePosition is always 0 for replaced elements (except |
724 // inline blocks), so don't bother wasting time in that case. | 725 // inline blocks), so don't bother wasting time in that case. |
725 if (!boxModel.isAtomicInlineLevel() || | 726 if (!boxModel.isAtomicInlineLevel() || |
726 boxModel.isInlineBlockOrInlineTable()) | 727 boxModel.isInlineBlockOrInlineTable()) |
727 verticalPosition -= (boxModel.lineHeight(firstLine, lineDirection) - | 728 verticalPosition -= (boxModel.lineHeight(firstLine, lineDirection) - |
728 boxModel.baselinePosition( | 729 boxModel.baselinePosition( |
729 baselineType(), firstLine, lineDirection)); | 730 baselineType(), firstLine, lineDirection)); |
730 } else if (verticalAlign == VerticalAlignBaselineMiddle) { | 731 } else if (verticalAlign == EVerticalAlign::BaselineMiddle) { |
731 verticalPosition += | 732 verticalPosition += |
732 -boxModel.lineHeight(firstLine, lineDirection) / 2 + | 733 -boxModel.lineHeight(firstLine, lineDirection) / 2 + |
733 boxModel.baselinePosition(baselineType(), firstLine, lineDirection); | 734 boxModel.baselinePosition(baselineType(), firstLine, lineDirection); |
734 } else if (verticalAlign == VerticalAlignLength) { | 735 } else if (verticalAlign == EVerticalAlign::Length) { |
735 LayoutUnit lineHeight; | 736 LayoutUnit lineHeight; |
736 // Per http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align: | 737 // Per http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align: |
737 // 'Percentages: refer to the 'line-height' of the element itself'. | 738 // 'Percentages: refer to the 'line-height' of the element itself'. |
738 if (boxModel.style()->getVerticalAlignLength().isPercentOrCalc()) | 739 if (boxModel.style()->getVerticalAlignLength().isPercentOrCalc()) |
739 lineHeight = LayoutUnit(boxModel.style()->computedLineHeight()); | 740 lineHeight = LayoutUnit(boxModel.style()->computedLineHeight()); |
740 else | 741 else |
741 lineHeight = boxModel.lineHeight(firstLine, lineDirection); | 742 lineHeight = boxModel.lineHeight(firstLine, lineDirection); |
742 verticalPosition -= valueForLength( | 743 verticalPosition -= valueForLength( |
743 boxModel.style()->getVerticalAlignLength(), lineHeight); | 744 boxModel.style()->getVerticalAlignLength(), lineHeight); |
744 } | 745 } |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
781 } | 782 } |
782 endBox = nullptr; | 783 endBox = nullptr; |
783 return nullptr; | 784 return nullptr; |
784 } | 785 } |
785 | 786 |
786 const char* RootInlineBox::boxName() const { | 787 const char* RootInlineBox::boxName() const { |
787 return "RootInlineBox"; | 788 return "RootInlineBox"; |
788 } | 789 } |
789 | 790 |
790 } // namespace blink | 791 } // namespace blink |
OLD | NEW |