| OLD | NEW |
| 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. | 4 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. |
| 5 * All rights reserved. | 5 * All rights reserved. |
| 6 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) | 6 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) |
| 7 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com) | 7 * Copyright (C) 2010 Daniel Bates (dbates@intudata.com) |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 } | 56 } |
| 57 | 57 |
| 58 LayoutListMarker* LayoutListMarker::createAnonymous(LayoutListItem* item) { | 58 LayoutListMarker* LayoutListMarker::createAnonymous(LayoutListItem* item) { |
| 59 Document& document = item->document(); | 59 Document& document = item->document(); |
| 60 LayoutListMarker* layoutObject = new LayoutListMarker(item); | 60 LayoutListMarker* layoutObject = new LayoutListMarker(item); |
| 61 layoutObject->setDocumentForAnonymous(&document); | 61 layoutObject->setDocumentForAnonymous(&document); |
| 62 return layoutObject; | 62 return layoutObject; |
| 63 } | 63 } |
| 64 | 64 |
| 65 LayoutSize LayoutListMarker::imageBulletSize() const { | 65 LayoutSize LayoutListMarker::imageBulletSize() const { |
| 66 ASSERT(isImage()); | 66 DCHECK(isImage()); |
| 67 const SimpleFontData* fontData = style()->font().primaryFont(); | 67 const SimpleFontData* fontData = style()->font().primaryFont(); |
| 68 DCHECK(fontData); | 68 DCHECK(fontData); |
| 69 if (!fontData) | 69 if (!fontData) |
| 70 return LayoutSize(); | 70 return LayoutSize(); |
| 71 | 71 |
| 72 // FIXME: This is a somewhat arbitrary default width. Generated images for | 72 // FIXME: This is a somewhat arbitrary default width. Generated images for |
| 73 // markers really won't become particularly useful until we support the CSS3 | 73 // markers really won't become particularly useful until we support the CSS3 |
| 74 // marker pseudoclass to allow control over the width and height of the | 74 // marker pseudoclass to allow control over the width and height of the |
| 75 // marker box. | 75 // marker box. |
| 76 LayoutUnit bulletWidth = fontData->getFontMetrics().ascent() / LayoutUnit(2); | 76 LayoutUnit bulletWidth = fontData->getFontMetrics().ascent() / LayoutUnit(2); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 : LayoutRect(newLogicalTop, LayoutUnit(), root.selectionHeight(), | 128 : LayoutRect(newLogicalTop, LayoutUnit(), root.selectionHeight(), |
| 129 size().height()); | 129 size().height()); |
| 130 } | 130 } |
| 131 | 131 |
| 132 void LayoutListMarker::paint(const PaintInfo& paintInfo, | 132 void LayoutListMarker::paint(const PaintInfo& paintInfo, |
| 133 const LayoutPoint& paintOffset) const { | 133 const LayoutPoint& paintOffset) const { |
| 134 ListMarkerPainter(*this).paint(paintInfo, paintOffset); | 134 ListMarkerPainter(*this).paint(paintInfo, paintOffset); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void LayoutListMarker::layout() { | 137 void LayoutListMarker::layout() { |
| 138 ASSERT(needsLayout()); | 138 DCHECK(needsLayout()); |
| 139 LayoutAnalyzer::Scope analyzer(*this); | 139 LayoutAnalyzer::Scope analyzer(*this); |
| 140 | 140 |
| 141 LayoutUnit blockOffset; | 141 LayoutUnit blockOffset; |
| 142 for (LayoutBox* o = parentBox(); o && o != listItem(); o = o->parentBox()) { | 142 for (LayoutBox* o = parentBox(); o && o != listItem(); o = o->parentBox()) { |
| 143 blockOffset += o->logicalTop(); | 143 blockOffset += o->logicalTop(); |
| 144 } | 144 } |
| 145 if (listItem()->style()->isLeftToRightDirection()) { | 145 if (listItem()->style()->isLeftToRightDirection()) { |
| 146 m_lineOffset = listItem()->logicalLeftOffsetForLine( | 146 m_lineOffset = listItem()->logicalLeftOffsetForLine( |
| 147 blockOffset, DoNotIndentText, LayoutUnit()); | 147 blockOffset, DoNotIndentText, LayoutUnit()); |
| 148 } else { | 148 } else { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 UChar suffix[2] = { | 230 UChar suffix[2] = { |
| 231 ListMarkerText::suffix(style()->listStyleType(), m_listItem->value()), | 231 ListMarkerText::suffix(style()->listStyleType(), m_listItem->value()), |
| 232 ' '}; | 232 ' '}; |
| 233 TextRun run = | 233 TextRun run = |
| 234 constructTextRun(font, suffix, 2, styleRef(), style()->direction()); | 234 constructTextRun(font, suffix, 2, styleRef(), style()->direction()); |
| 235 LayoutUnit suffixSpaceWidth = LayoutUnit(font.width(run)); | 235 LayoutUnit suffixSpaceWidth = LayoutUnit(font.width(run)); |
| 236 return itemWidth + suffixSpaceWidth; | 236 return itemWidth + suffixSpaceWidth; |
| 237 } | 237 } |
| 238 | 238 |
| 239 void LayoutListMarker::computePreferredLogicalWidths() { | 239 void LayoutListMarker::computePreferredLogicalWidths() { |
| 240 ASSERT(preferredLogicalWidthsDirty()); | 240 DCHECK(preferredLogicalWidthsDirty()); |
| 241 updateContent(); | 241 updateContent(); |
| 242 | 242 |
| 243 if (isImage()) { | 243 if (isImage()) { |
| 244 LayoutSize imageSize(imageBulletSize()); | 244 LayoutSize imageSize(imageBulletSize()); |
| 245 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = | 245 m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth = |
| 246 style()->isHorizontalWritingMode() ? imageSize.width() | 246 style()->isHorizontalWritingMode() ? imageSize.width() |
| 247 : imageSize.height(); | 247 : imageSize.height(); |
| 248 clearPreferredLogicalWidthsDirty(); | 248 clearPreferredLogicalWidthsDirty(); |
| 249 updateMargins(); | 249 updateMargins(); |
| 250 return; | 250 return; |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 return m_listItem->lineHeight(firstLine, direction, | 351 return m_listItem->lineHeight(firstLine, direction, |
| 352 PositionOfInteriorLineBoxes); | 352 PositionOfInteriorLineBoxes); |
| 353 return LayoutBox::lineHeight(firstLine, direction, linePositionMode); | 353 return LayoutBox::lineHeight(firstLine, direction, linePositionMode); |
| 354 } | 354 } |
| 355 | 355 |
| 356 int LayoutListMarker::baselinePosition( | 356 int LayoutListMarker::baselinePosition( |
| 357 FontBaseline baselineType, | 357 FontBaseline baselineType, |
| 358 bool firstLine, | 358 bool firstLine, |
| 359 LineDirectionMode direction, | 359 LineDirectionMode direction, |
| 360 LinePositionMode linePositionMode) const { | 360 LinePositionMode linePositionMode) const { |
| 361 ASSERT(linePositionMode == PositionOnContainingLine); | 361 DCHECK_EQ(linePositionMode, PositionOnContainingLine); |
| 362 if (!isImage()) | 362 if (!isImage()) |
| 363 return m_listItem->baselinePosition(baselineType, firstLine, direction, | 363 return m_listItem->baselinePosition(baselineType, firstLine, direction, |
| 364 PositionOfInteriorLineBoxes); | 364 PositionOfInteriorLineBoxes); |
| 365 return LayoutBox::baselinePosition(baselineType, firstLine, direction, | 365 return LayoutBox::baselinePosition(baselineType, firstLine, direction, |
| 366 linePositionMode); | 366 linePositionMode); |
| 367 } | 367 } |
| 368 | 368 |
| 369 LayoutListMarker::ListStyleCategory LayoutListMarker::getListStyleCategory() | 369 LayoutListMarker::ListStyleCategory LayoutListMarker::getListStyleCategory() |
| 370 const { | 370 const { |
| 371 switch (style()->listStyleType()) { | 371 switch (style()->listStyleType()) { |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 if (style()) { | 495 if (style()) { |
| 496 // Reuse the current margins. Otherwise resetting the margins to initial | 496 // Reuse the current margins. Otherwise resetting the margins to initial |
| 497 // values would trigger unnecessary layout. | 497 // values would trigger unnecessary layout. |
| 498 newStyle->setMarginStart(style()->marginStart()); | 498 newStyle->setMarginStart(style()->marginStart()); |
| 499 newStyle->setMarginEnd(style()->marginRight()); | 499 newStyle->setMarginEnd(style()->marginRight()); |
| 500 } | 500 } |
| 501 setStyle(std::move(newStyle)); | 501 setStyle(std::move(newStyle)); |
| 502 } | 502 } |
| 503 | 503 |
| 504 } // namespace blink | 504 } // namespace blink |
| OLD | NEW |