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. 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 11 matching lines...) Expand all Loading... |
22 * | 22 * |
23 */ | 23 */ |
24 | 24 |
25 #include "config.h" | 25 #include "config.h" |
26 #include "core/rendering/RenderListMarker.h" | 26 #include "core/rendering/RenderListMarker.h" |
27 | 27 |
28 #include "core/fetch/ImageResource.h" | 28 #include "core/fetch/ImageResource.h" |
29 #include "core/rendering/GraphicsContextAnnotator.h" | 29 #include "core/rendering/GraphicsContextAnnotator.h" |
30 #include "core/rendering/RenderLayer.h" | 30 #include "core/rendering/RenderLayer.h" |
31 #include "core/rendering/RenderListItem.h" | 31 #include "core/rendering/RenderListItem.h" |
32 #include "core/rendering/RenderView.h" | 32 #include "core/rendering/TextRunConstructor.h" |
33 #include "platform/fonts/Font.h" | 33 #include "platform/fonts/Font.h" |
34 #include "platform/graphics/GraphicsContextStateSaver.h" | 34 #include "platform/graphics/GraphicsContextStateSaver.h" |
35 #include "wtf/text/StringBuilder.h" | 35 #include "wtf/text/StringBuilder.h" |
36 #include "wtf/unicode/CharacterNames.h" | 36 #include "wtf/unicode/CharacterNames.h" |
37 | 37 |
38 using namespace WTF; | 38 using namespace WTF; |
39 using namespace Unicode; | 39 using namespace Unicode; |
40 | 40 |
41 namespace WebCore { | 41 namespace WebCore { |
42 | 42 |
(...skipping 1212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1255 case UpperRoman: | 1255 case UpperRoman: |
1256 case Urdu: | 1256 case Urdu: |
1257 case Asterisks: | 1257 case Asterisks: |
1258 case Footnotes: | 1258 case Footnotes: |
1259 break; | 1259 break; |
1260 } | 1260 } |
1261 if (m_text.isEmpty()) | 1261 if (m_text.isEmpty()) |
1262 return; | 1262 return; |
1263 | 1263 |
1264 const Font& font = style()->font(); | 1264 const Font& font = style()->font(); |
1265 TextRun textRun = RenderBlockFlow::constructTextRun(this, font, m_text, styl
e()); | 1265 TextRun textRun = constructTextRun(this, font, m_text, style()); |
1266 | 1266 |
1267 GraphicsContextStateSaver stateSaver(*context, false); | 1267 GraphicsContextStateSaver stateSaver(*context, false); |
1268 if (!style()->isHorizontalWritingMode()) { | 1268 if (!style()->isHorizontalWritingMode()) { |
1269 marker.moveBy(roundedIntPoint(-boxOrigin)); | 1269 marker.moveBy(roundedIntPoint(-boxOrigin)); |
1270 marker = marker.transposedRect(); | 1270 marker = marker.transposedRect(); |
1271 marker.moveBy(IntPoint(roundToInt(box.x()), roundToInt(box.y() - logical
Height()))); | 1271 marker.moveBy(IntPoint(roundToInt(box.x()), roundToInt(box.y() - logical
Height()))); |
1272 stateSaver.save(); | 1272 stateSaver.save(); |
1273 context->translate(marker.x(), marker.maxY()); | 1273 context->translate(marker.x(), marker.maxY()); |
1274 context->rotate(static_cast<float>(deg2rad(90.))); | 1274 context->rotate(static_cast<float>(deg2rad(90.))); |
1275 context->translate(-marker.x(), -marker.maxY()); | 1275 context->translate(-marker.x(), -marker.maxY()); |
(...skipping 18 matching lines...) Expand all Loading... |
1294 reversedText.append(m_text[i]); | 1294 reversedText.append(m_text[i]); |
1295 ASSERT(reversedText.length() == reversedText.capacity()); | 1295 ASSERT(reversedText.length() == reversedText.capacity()); |
1296 textRun.setText(reversedText.toString()); | 1296 textRun.setText(reversedText.toString()); |
1297 } | 1297 } |
1298 | 1298 |
1299 const UChar suffix = listMarkerSuffix(type, m_listItem->value()); | 1299 const UChar suffix = listMarkerSuffix(type, m_listItem->value()); |
1300 UChar suffixStr[2] = { | 1300 UChar suffixStr[2] = { |
1301 style()->isLeftToRightDirection() ? suffix : ' ', | 1301 style()->isLeftToRightDirection() ? suffix : ' ', |
1302 style()->isLeftToRightDirection() ? ' ' : suffix | 1302 style()->isLeftToRightDirection() ? ' ' : suffix |
1303 }; | 1303 }; |
1304 TextRun suffixRun = RenderBlockFlow::constructTextRun(this, font, suffix
Str, 2, style(), style()->direction()); | 1304 TextRun suffixRun = constructTextRun(this, font, suffixStr, 2, style(),
style()->direction()); |
1305 TextRunPaintInfo suffixRunInfo(suffixRun); | 1305 TextRunPaintInfo suffixRunInfo(suffixRun); |
1306 suffixRunInfo.bounds = marker; | 1306 suffixRunInfo.bounds = marker; |
1307 | 1307 |
1308 if (style()->isLeftToRightDirection()) { | 1308 if (style()->isLeftToRightDirection()) { |
1309 context->drawText(font, textRunPaintInfo, textOrigin); | 1309 context->drawText(font, textRunPaintInfo, textOrigin); |
1310 context->drawText(font, suffixRunInfo, textOrigin + IntSize(font.wid
th(textRun), 0)); | 1310 context->drawText(font, suffixRunInfo, textOrigin + IntSize(font.wid
th(textRun), 0)); |
1311 } else { | 1311 } else { |
1312 context->drawText(font, suffixRunInfo, textOrigin); | 1312 context->drawText(font, suffixRunInfo, textOrigin); |
1313 context->drawText(font, textRunPaintInfo, textOrigin + IntSize(font.
width(suffixRun), 0)); | 1313 context->drawText(font, textRunPaintInfo, textOrigin + IntSize(font.
width(suffixRun), 0)); |
1314 } | 1314 } |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1571 case UpperHexadecimal: | 1571 case UpperHexadecimal: |
1572 case UpperLatin: | 1572 case UpperLatin: |
1573 case UpperNorwegian: | 1573 case UpperNorwegian: |
1574 case UpperRoman: | 1574 case UpperRoman: |
1575 case Urdu: | 1575 case Urdu: |
1576 if (m_text.isEmpty()) | 1576 if (m_text.isEmpty()) |
1577 logicalWidth = 0; | 1577 logicalWidth = 0; |
1578 else { | 1578 else { |
1579 LayoutUnit itemWidth = font.width(m_text); | 1579 LayoutUnit itemWidth = font.width(m_text); |
1580 UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->valu
e()), ' ' }; | 1580 UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->valu
e()), ' ' }; |
1581 LayoutUnit suffixSpaceWidth = font.width(RenderBlockFlow::constr
uctTextRun(this, font, suffixSpace, 2, style(), style()->direction())); | 1581 LayoutUnit suffixSpaceWidth = font.width(constructTextRun(this,
font, suffixSpace, 2, style(), style()->direction())); |
1582 logicalWidth = itemWidth + suffixSpaceWidth; | 1582 logicalWidth = itemWidth + suffixSpaceWidth; |
1583 } | 1583 } |
1584 break; | 1584 break; |
1585 } | 1585 } |
1586 | 1586 |
1587 m_minPreferredLogicalWidth = logicalWidth; | 1587 m_minPreferredLogicalWidth = logicalWidth; |
1588 m_maxPreferredLogicalWidth = logicalWidth; | 1588 m_maxPreferredLogicalWidth = logicalWidth; |
1589 | 1589 |
1590 clearPreferredLogicalWidthsDirty(); | 1590 clearPreferredLogicalWidthsDirty(); |
1591 | 1591 |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1797 case UpperHexadecimal: | 1797 case UpperHexadecimal: |
1798 case UpperLatin: | 1798 case UpperLatin: |
1799 case UpperNorwegian: | 1799 case UpperNorwegian: |
1800 case UpperRoman: | 1800 case UpperRoman: |
1801 case Urdu: | 1801 case Urdu: |
1802 if (m_text.isEmpty()) | 1802 if (m_text.isEmpty()) |
1803 return IntRect(); | 1803 return IntRect(); |
1804 const Font& font = style()->font(); | 1804 const Font& font = style()->font(); |
1805 int itemWidth = font.width(m_text); | 1805 int itemWidth = font.width(m_text); |
1806 UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->value())
, ' ' }; | 1806 UChar suffixSpace[2] = { listMarkerSuffix(type, m_listItem->value())
, ' ' }; |
1807 int suffixSpaceWidth = font.width(RenderBlockFlow::constructTextRun(
this, font, suffixSpace, 2, style(), style()->direction())); | 1807 int suffixSpaceWidth = font.width(constructTextRun(this, font, suffi
xSpace, 2, style(), style()->direction())); |
1808 relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.font
Metrics().height()); | 1808 relativeRect = IntRect(0, 0, itemWidth + suffixSpaceWidth, font.font
Metrics().height()); |
1809 } | 1809 } |
1810 | 1810 |
1811 if (!style()->isHorizontalWritingMode()) { | 1811 if (!style()->isHorizontalWritingMode()) { |
1812 relativeRect = relativeRect.transposedRect(); | 1812 relativeRect = relativeRect.transposedRect(); |
1813 relativeRect.setX(width() - relativeRect.x() - relativeRect.width()); | 1813 relativeRect.setX(width() - relativeRect.x() - relativeRect.width()); |
1814 } | 1814 } |
1815 | 1815 |
1816 return relativeRect; | 1816 return relativeRect; |
1817 } | 1817 } |
(...skipping 19 matching lines...) Expand all Loading... |
1837 | 1837 |
1838 if (clipToVisibleContent) | 1838 if (clipToVisibleContent) |
1839 mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect); | 1839 mapRectToPaintInvalidationBacking(paintInvalidationContainer, rect); |
1840 else | 1840 else |
1841 rect = localToContainerQuad(FloatRect(rect), paintInvalidationContainer)
.enclosingBoundingBox(); | 1841 rect = localToContainerQuad(FloatRect(rect), paintInvalidationContainer)
.enclosingBoundingBox(); |
1842 | 1842 |
1843 return rect; | 1843 return rect; |
1844 } | 1844 } |
1845 | 1845 |
1846 } // namespace WebCore | 1846 } // namespace WebCore |
OLD | NEW |