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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutListMarker.cpp

Issue 1407003005: Lists: Render marker text closer to list items. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated test expectations, again. Created 5 years, 2 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 | « third_party/WebKit/Source/core/layout/LayoutListMarker.h ('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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed.
5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net)
6 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com) 6 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com)
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1114 break; 1114 break;
1115 case ListStyleCategory::Symbol: 1115 case ListStyleCategory::Symbol:
1116 m_text = listMarkerText(style()->listStyleType(), 0); // value is ignore d for these types 1116 m_text = listMarkerText(style()->listStyleType(), 0); // value is ignore d for these types
1117 break; 1117 break;
1118 case ListStyleCategory::Language: 1118 case ListStyleCategory::Language:
1119 m_text = listMarkerText(style()->listStyleType(), m_listItem->value()); 1119 m_text = listMarkerText(style()->listStyleType(), m_listItem->value());
1120 break; 1120 break;
1121 } 1121 }
1122 } 1122 }
1123 1123
1124 LayoutUnit LayoutListMarker::getWidthOfTextWithSuffix() const
1125 {
1126 if (m_text.isEmpty())
1127 return 0;
1128 const Font& font = style()->font();
1129 LayoutUnit itemWidth = font.width(m_text);
1130 // TODO(wkorman): Look into constructing a text run for both text and suffix
1131 // and painting them together.
1132 UChar suffix[2] = { listMarkerSuffix(style()->listStyleType(), m_listItem->v alue()), ' ' };
1133 TextRun run = constructTextRun(font, suffix, 2, styleRef(), style()->directi on());
1134 LayoutUnit suffixSpaceWidth = font.width(run);
1135 return itemWidth + suffixSpaceWidth;
1136 }
1137
1124 void LayoutListMarker::computePreferredLogicalWidths() 1138 void LayoutListMarker::computePreferredLogicalWidths()
1125 { 1139 {
1126 ASSERT(preferredLogicalWidthsDirty()); 1140 ASSERT(preferredLogicalWidthsDirty());
1127 updateContent(); 1141 updateContent();
1128 1142
1129 if (isImage()) { 1143 if (isImage()) {
1130 LayoutSize imageSize = m_image->imageSize(this, style()->effectiveZoom() ); 1144 LayoutSize imageSize = m_image->imageSize(this, style()->effectiveZoom() );
1131 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = style()->isHor izontalWritingMode() ? imageSize.width() : imageSize.height(); 1145 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = style()->isHor izontalWritingMode() ? imageSize.width() : imageSize.height();
1132 clearPreferredLogicalWidthsDirty(); 1146 clearPreferredLogicalWidthsDirty();
1133 updateMargins(); 1147 updateMargins();
1134 return; 1148 return;
1135 } 1149 }
1136 1150
1137 const Font& font = style()->font(); 1151 const Font& font = style()->font();
1138 1152
1139 LayoutUnit logicalWidth = 0; 1153 LayoutUnit logicalWidth = 0;
1140 switch (listStyleCategory()) { 1154 switch (listStyleCategory()) {
1141 case ListStyleCategory::None: 1155 case ListStyleCategory::None:
1142 break; 1156 break;
1143 case ListStyleCategory::Symbol: 1157 case ListStyleCategory::Symbol:
1144 logicalWidth = (font.fontMetrics().ascent() * 2 / 3 + 1) / 2 + 2; 1158 logicalWidth = (font.fontMetrics().ascent() * 2 / 3 + 1) / 2 + 2;
1145 break; 1159 break;
1146 case ListStyleCategory::Language: 1160 case ListStyleCategory::Language:
1147 if (m_text.isEmpty()) { 1161 logicalWidth = getWidthOfTextWithSuffix();
1148 logicalWidth = 0;
1149 } else {
1150 LayoutUnit itemWidth = font.width(m_text);
1151 UChar suffixSpace[2] = { listMarkerSuffix(style()->listStyleType(), m_listItem->value()), ' ' };
1152 LayoutUnit suffixSpaceWidth = font.width(constructTextRun(font, suff ixSpace, 2, styleRef(), style()->direction()));
1153 logicalWidth = itemWidth + suffixSpaceWidth;
1154 }
1155 break; 1162 break;
1156 } 1163 }
1157 1164
1158 m_minPreferredLogicalWidth = logicalWidth; 1165 m_minPreferredLogicalWidth = logicalWidth;
1159 m_maxPreferredLogicalWidth = logicalWidth; 1166 m_maxPreferredLogicalWidth = logicalWidth;
1160 1167
1161 clearPreferredLogicalWidthsDirty(); 1168 clearPreferredLogicalWidthsDirty();
1162 1169
1163 updateMargins(); 1170 updateMargins();
1164 } 1171 }
(...skipping 18 matching lines...) Expand all
1183 break; 1190 break;
1184 } 1191 }
1185 } 1192 }
1186 } else { 1193 } else {
1187 if (style()->isLeftToRightDirection()) { 1194 if (style()->isLeftToRightDirection()) {
1188 if (isImage()) { 1195 if (isImage()) {
1189 marginStart = -minPreferredLogicalWidth() - cMarkerPadding; 1196 marginStart = -minPreferredLogicalWidth() - cMarkerPadding;
1190 } else { 1197 } else {
1191 int offset = fontMetrics.ascent() * 2 / 3; 1198 int offset = fontMetrics.ascent() * 2 / 3;
1192 switch (listStyleCategory()) { 1199 switch (listStyleCategory()) {
1200 case ListStyleCategory::None:
1201 break;
1193 case ListStyleCategory::Symbol: 1202 case ListStyleCategory::Symbol:
1194 marginStart = -offset - cMarkerPadding - 1; 1203 marginStart = -offset - cMarkerPadding - 1;
1195 break; 1204 break;
1196 case ListStyleCategory::None:
1197 break;
1198 default: 1205 default:
1199 marginStart = m_text.isEmpty() ? LayoutUnit() : -minPreferre dLogicalWidth() - offset / 2; 1206 marginStart = m_text.isEmpty() ? LayoutUnit() : -minPreferre dLogicalWidth();
1200 } 1207 }
1201 } 1208 }
1202 marginEnd = -marginStart - minPreferredLogicalWidth(); 1209 marginEnd = -marginStart - minPreferredLogicalWidth();
1203 } else { 1210 } else {
1204 if (isImage()) { 1211 if (isImage()) {
1205 marginEnd = cMarkerPadding; 1212 marginEnd = cMarkerPadding;
1206 } else { 1213 } else {
1207 int offset = fontMetrics.ascent() * 2 / 3; 1214 int offset = fontMetrics.ascent() * 2 / 3;
1208 switch (listStyleCategory()) { 1215 switch (listStyleCategory()) {
1216 case ListStyleCategory::None:
1217 break;
1209 case ListStyleCategory::Symbol: 1218 case ListStyleCategory::Symbol:
1210 marginEnd = offset + cMarkerPadding + 1 - minPreferredLogica lWidth(); 1219 marginEnd = offset + cMarkerPadding + 1 - minPreferredLogica lWidth();
1211 break; 1220 break;
1212 case ListStyleCategory::None:
1213 break;
1214 default: 1221 default:
1215 marginEnd = m_text.isEmpty() ? 0 : offset / 2; 1222 marginEnd = 0;
1216 } 1223 }
1217 } 1224 }
1218 marginStart = -marginEnd - minPreferredLogicalWidth(); 1225 marginStart = -marginEnd - minPreferredLogicalWidth();
1219 } 1226 }
1220 1227
1221 } 1228 }
1222 1229
1223 mutableStyleRef().setMarginStart(Length(marginStart, Fixed)); 1230 mutableStyleRef().setMarginStart(Length(marginStart, Fixed));
1224 mutableStyleRef().setMarginEnd(Length(marginEnd, Fixed)); 1231 mutableStyleRef().setMarginEnd(Length(marginEnd, Fixed));
1225 } 1232 }
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1321 switch (listStyleCategory()) { 1328 switch (listStyleCategory()) {
1322 case ListStyleCategory::None: 1329 case ListStyleCategory::None:
1323 return IntRect(); 1330 return IntRect();
1324 case ListStyleCategory::Symbol: { 1331 case ListStyleCategory::Symbol: {
1325 // TODO(wkorman): Review and clean up/document the calculations below. 1332 // TODO(wkorman): Review and clean up/document the calculations below.
1326 // http://crbug.com/543193 1333 // http://crbug.com/543193
1327 const FontMetrics& fontMetrics = style()->fontMetrics(); 1334 const FontMetrics& fontMetrics = style()->fontMetrics();
1328 int ascent = fontMetrics.ascent(); 1335 int ascent = fontMetrics.ascent();
1329 int bulletWidth = (ascent * 2 / 3 + 1) / 2; 1336 int bulletWidth = (ascent * 2 / 3 + 1) / 2;
1330 relativeRect = IntRect(1, 3 * (ascent - ascent * 2 / 3) / 2, bulletWidth , bulletWidth); 1337 relativeRect = IntRect(1, 3 * (ascent - ascent * 2 / 3) / 2, bulletWidth , bulletWidth);
1338 }
1331 break; 1339 break;
1332 }
1333 case ListStyleCategory::Language: 1340 case ListStyleCategory::Language:
1334 if (m_text.isEmpty()) 1341 relativeRect = IntRect(0, 0, getWidthOfTextWithSuffix(), style()->font() .fontMetrics().height());
1335 return IntRect(); 1342 break;
1336 const Font& font = style()->font();
1337 int itemWidth = font.width(m_text);
1338 UChar suffixSpace[2] = { listMarkerSuffix(style()->listStyleType(), m_li stItem->value()), ' ' };
1339 int suffixSpaceWidth = font.width(constructTextRun(font, suffixSpace, 2, styleRef(), style()->direction()));
1340 relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.fontMetr ics().height());
1341 } 1343 }
1342 1344
1343 if (!style()->isHorizontalWritingMode()) { 1345 if (!style()->isHorizontalWritingMode()) {
1344 relativeRect = relativeRect.transposedRect(); 1346 relativeRect = relativeRect.transposedRect();
1345 relativeRect.setX(size().width() - relativeRect.x() - relativeRect.width ()); 1347 relativeRect.setX(size().width() - relativeRect.x() - relativeRect.width ());
1346 } 1348 }
1347 1349
1348 return relativeRect; 1350 return relativeRect;
1349 } 1351 }
1350 1352
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 if (style()) { 1384 if (style()) {
1383 // Reuse the current margins. Otherwise resetting the margins to initial values 1385 // Reuse the current margins. Otherwise resetting the margins to initial values
1384 // would trigger unnecessary layout. 1386 // would trigger unnecessary layout.
1385 newStyle->setMarginStart(style()->marginStart()); 1387 newStyle->setMarginStart(style()->marginStart());
1386 newStyle->setMarginEnd(style()->marginRight()); 1388 newStyle->setMarginEnd(style()->marginRight());
1387 } 1389 }
1388 setStyle(newStyle.release()); 1390 setStyle(newStyle.release());
1389 } 1391 }
1390 1392
1391 } // namespace blink 1393 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutListMarker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698