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

Side by Side Diff: Source/core/rendering/RootInlineBox.cpp

Issue 14783007: Incorrect layout for blocks containing ideographs with -webkit-linebox-contain: glyphs, font, inlin… (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: missing? Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « LayoutTests/fast/block/lineboxcontain/block-with-ideographs.xhtml ('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) 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 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
790 790
791 // Examine the font box for inline flows and text boxes to see if any pa rt of it is above the baseline. 791 // Examine the font box for inline flows and text boxes to see if any pa rt of it is above the baseline.
792 // If the top of our font box relative to the root box baseline is above the root box baseline, then 792 // If the top of our font box relative to the root box baseline is above the root box baseline, then
793 // we are contributing to the maxAscent value. Descent is similar. If an y part of our font box is below 793 // we are contributing to the maxAscent value. Descent is similar. If an y part of our font box is below
794 // the root box's baseline, then we contribute to the maxDescent value. 794 // the root box's baseline, then we contribute to the maxDescent value.
795 affectsAscent = ascentWithLeading - box->logicalTop() > 0; 795 affectsAscent = ascentWithLeading - box->logicalTop() > 0;
796 affectsDescent = descentWithLeading + box->logicalTop() > 0; 796 affectsDescent = descentWithLeading + box->logicalTop() > 0;
797 } 797 }
798 798
799 if (includeFontForBox(box) && !setUsedFont) { 799 if (includeFontForBox(box) && !setUsedFont) {
800 int fontAscent = box->renderer()->style(isFirstLineStyle())->fontMetrics ().ascent(); 800 int fontAscent = box->renderer()->style(isFirstLineStyle())->fontMetrics ().ascent(baselineType());
801 int fontDescent = box->renderer()->style(isFirstLineStyle())->fontMetric s().descent(); 801 int fontDescent = box->renderer()->style(isFirstLineStyle())->fontMetric s().descent(baselineType());
802 setAscentAndDescent(ascent, descent, fontAscent, fontDescent, ascentDesc entSet); 802 setAscentAndDescent(ascent, descent, fontAscent, fontDescent, ascentDesc entSet);
803 affectsAscent = fontAscent - box->logicalTop() > 0; 803 affectsAscent = fontAscent - box->logicalTop() > 0;
804 affectsDescent = fontDescent + box->logicalTop() > 0; 804 affectsDescent = fontDescent + box->logicalTop() > 0;
805 } 805 }
806 806
807 if (includeGlyphsForBox(box) && glyphOverflow && glyphOverflow->computeBound s) { 807 if (includeGlyphsForBox(box) && glyphOverflow && glyphOverflow->computeBound s) {
808 setAscentAndDescent(ascent, descent, glyphOverflow->top, glyphOverflow-> bottom, ascentDescentSet); 808 setAscentAndDescent(ascent, descent, glyphOverflow->top, glyphOverflow-> bottom, ascentDescentSet);
809 affectsAscent = glyphOverflow->top - box->logicalTop() > 0; 809 affectsAscent = glyphOverflow->top - box->logicalTop() > 0;
810 affectsDescent = glyphOverflow->bottom + box->logicalTop() > 0; 810 affectsDescent = glyphOverflow->bottom + box->logicalTop() > 0;
811 glyphOverflow->top = min(glyphOverflow->top, max(0, glyphOverflow->top - box->renderer()->style(isFirstLineStyle())->fontMetrics().ascent())); 811 glyphOverflow->top = min(glyphOverflow->top, max(0, glyphOverflow->top - box->renderer()->style(isFirstLineStyle())->fontMetrics().ascent(baselineType() )));
812 glyphOverflow->bottom = min(glyphOverflow->bottom, max(0, glyphOverflow- >bottom - box->renderer()->style(isFirstLineStyle())->fontMetrics().descent())); 812 glyphOverflow->bottom = min(glyphOverflow->bottom, max(0, glyphOverflow- >bottom - box->renderer()->style(isFirstLineStyle())->fontMetrics().descent(base lineType())));
813 } 813 }
814 814
815 if (includeMarginForBox(box)) { 815 if (includeMarginForBox(box)) {
816 LayoutUnit ascentWithMargin = box->renderer()->style(isFirstLineStyle()) ->fontMetrics().ascent(); 816 LayoutUnit ascentWithMargin = box->renderer()->style(isFirstLineStyle()) ->fontMetrics().ascent(baselineType());
817 LayoutUnit descentWithMargin = box->renderer()->style(isFirstLineStyle() )->fontMetrics().descent(); 817 LayoutUnit descentWithMargin = box->renderer()->style(isFirstLineStyle() )->fontMetrics().descent(baselineType());
818 if (box->parent() && !box->renderer()->isText()) { 818 if (box->parent() && !box->renderer()->isText()) {
819 ascentWithMargin += box->boxModelObject()->borderBefore() + box->box ModelObject()->paddingBefore() + box->boxModelObject()->marginBefore(); 819 ascentWithMargin += box->boxModelObject()->borderBefore() + box->box ModelObject()->paddingBefore() + box->boxModelObject()->marginBefore();
820 descentWithMargin += box->boxModelObject()->borderAfter() + box->box ModelObject()->paddingAfter() + box->boxModelObject()->marginAfter(); 820 descentWithMargin += box->boxModelObject()->borderAfter() + box->box ModelObject()->paddingAfter() + box->boxModelObject()->marginAfter();
821 } 821 }
822 setAscentAndDescent(ascent, descent, ascentWithMargin, descentWithMargin , ascentDescentSet); 822 setAscentAndDescent(ascent, descent, ascentWithMargin, descentWithMargin , ascentDescentSet);
823 823
824 // Treat like a replaced element, since we're using the margin box. 824 // Treat like a replaced element, since we're using the margin box.
825 affectsAscent = true; 825 affectsAscent = true;
826 affectsDescent = true; 826 affectsDescent = true;
827 } 827 }
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 } 986 }
987 987
988 #ifndef NDEBUG 988 #ifndef NDEBUG
989 const char* RootInlineBox::boxName() const 989 const char* RootInlineBox::boxName() const
990 { 990 {
991 return "RootInlineBox"; 991 return "RootInlineBox";
992 } 992 }
993 #endif 993 #endif
994 994
995 } // namespace WebCore 995 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/block/lineboxcontain/block-with-ideographs.xhtml ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698