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

Unified Diff: Source/core/rendering/RenderListMarker.cpp

Issue 590413005: Move paint code from RenderListMarker/RenderListItem to ListMarkerPainter/ListItemPainter. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderListMarker.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderListMarker.cpp
diff --git a/Source/core/rendering/RenderListMarker.cpp b/Source/core/rendering/RenderListMarker.cpp
index f6bfffd467afce52a408b1abf06cfe6e8ab153b8..db3d58dfbe150de23c1d450db7898b45c1b2baa3 100644
--- a/Source/core/rendering/RenderListMarker.cpp
+++ b/Source/core/rendering/RenderListMarker.cpp
@@ -26,17 +26,12 @@
#include "core/rendering/RenderListMarker.h"
#include "core/fetch/ImageResource.h"
-#include "core/rendering/GraphicsContextAnnotator.h"
+#include "core/paint/ListMarkerPainter.h"
#include "core/rendering/RenderLayer.h"
#include "core/rendering/RenderListItem.h"
#include "core/rendering/TextRunConstructor.h"
#include "platform/fonts/Font.h"
-#include "platform/graphics/GraphicsContextStateSaver.h"
#include "wtf/text/StringBuilder.h"
-#include "wtf/unicode/CharacterNames.h"
-
-using namespace WTF;
-using namespace Unicode;
namespace blink {
@@ -502,7 +497,7 @@ static EListStyleType effectiveListMarkerType(EListStyleType type, int value)
return type;
}
-static UChar listMarkerSuffix(EListStyleType type, int value)
+UChar RenderListMarker::listMarkerSuffix(EListStyleType type, int value)
{
// If the list-style-type cannot represent |value| because it's outside its
// ordinal range then we fall back to some list style that can represent |value|.
@@ -1133,197 +1128,7 @@ LayoutRect RenderListMarker::localSelectionRect()
void RenderListMarker::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
{
- ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this);
-
- if (paintInfo.phase != PaintPhaseForeground)
- return;
-
- if (style()->visibility() != VISIBLE)
- return;
-
- LayoutPoint boxOrigin(paintOffset + location());
- LayoutRect overflowRect(visualOverflowRect());
- overflowRect.moveBy(boxOrigin);
-
- if (!paintInfo.rect.intersects(pixelSnappedIntRect(overflowRect)))
- return;
-
- LayoutRect box(boxOrigin, size());
-
- IntRect marker = getRelativeMarkerRect();
- marker.moveBy(roundedIntPoint(boxOrigin));
-
- GraphicsContext* context = paintInfo.context;
-
- if (isImage()) {
- context->drawImage(m_image->image(this, marker.size()).get(), marker);
- if (selectionState() != SelectionNone) {
- LayoutRect selRect = localSelectionRect();
- selRect.moveBy(boxOrigin);
- context->fillRect(pixelSnappedIntRect(selRect), selectionBackgroundColor());
- }
- return;
- }
-
- if (selectionState() != SelectionNone) {
- LayoutRect selRect = localSelectionRect();
- selRect.moveBy(boxOrigin);
- context->fillRect(pixelSnappedIntRect(selRect), selectionBackgroundColor());
- }
-
- const Color color(resolveColor(CSSPropertyColor));
- context->setStrokeColor(color);
- context->setStrokeStyle(SolidStroke);
- context->setStrokeThickness(1.0f);
- context->setFillColor(color);
-
- EListStyleType type = style()->listStyleType();
- switch (type) {
- case Disc:
- context->fillEllipse(marker);
- return;
- case Circle:
- context->strokeEllipse(marker);
- return;
- case Square:
- context->fillRect(marker);
- return;
- case NoneListStyle:
- return;
- case Afar:
- case Amharic:
- case AmharicAbegede:
- case ArabicIndic:
- case Armenian:
- case BinaryListStyle:
- case Bengali:
- case Cambodian:
- case CJKIdeographic:
- case CjkEarthlyBranch:
- case CjkHeavenlyStem:
- case DecimalLeadingZero:
- case DecimalListStyle:
- case Devanagari:
- case Ethiopic:
- case EthiopicAbegede:
- case EthiopicAbegedeAmEt:
- case EthiopicAbegedeGez:
- case EthiopicAbegedeTiEr:
- case EthiopicAbegedeTiEt:
- case EthiopicHalehameAaEr:
- case EthiopicHalehameAaEt:
- case EthiopicHalehameAmEt:
- case EthiopicHalehameGez:
- case EthiopicHalehameOmEt:
- case EthiopicHalehameSidEt:
- case EthiopicHalehameSoEt:
- case EthiopicHalehameTiEr:
- case EthiopicHalehameTiEt:
- case EthiopicHalehameTig:
- case Georgian:
- case Gujarati:
- case Gurmukhi:
- case Hangul:
- case HangulConsonant:
- case Hebrew:
- case Hiragana:
- case HiraganaIroha:
- case Kannada:
- case Katakana:
- case KatakanaIroha:
- case Khmer:
- case Lao:
- case LowerAlpha:
- case LowerArmenian:
- case LowerGreek:
- case LowerHexadecimal:
- case LowerLatin:
- case LowerNorwegian:
- case LowerRoman:
- case Malayalam:
- case Mongolian:
- case Myanmar:
- case Octal:
- case Oriya:
- case Oromo:
- case Persian:
- case Sidama:
- case Somali:
- case Telugu:
- case Thai:
- case Tibetan:
- case Tigre:
- case TigrinyaEr:
- case TigrinyaErAbegede:
- case TigrinyaEt:
- case TigrinyaEtAbegede:
- case UpperAlpha:
- case UpperArmenian:
- case UpperGreek:
- case UpperHexadecimal:
- case UpperLatin:
- case UpperNorwegian:
- case UpperRoman:
- case Urdu:
- case Asterisks:
- case Footnotes:
- break;
- }
- if (m_text.isEmpty())
- return;
-
- const Font& font = style()->font();
- TextRun textRun = constructTextRun(this, font, m_text, style());
-
- GraphicsContextStateSaver stateSaver(*context, false);
- if (!style()->isHorizontalWritingMode()) {
- marker.moveBy(roundedIntPoint(-boxOrigin));
- marker = marker.transposedRect();
- marker.moveBy(IntPoint(roundToInt(box.x()), roundToInt(box.y() - logicalHeight())));
- stateSaver.save();
- context->translate(marker.x(), marker.maxY());
- context->rotate(static_cast<float>(deg2rad(90.)));
- context->translate(-marker.x(), -marker.maxY());
- }
-
- TextRunPaintInfo textRunPaintInfo(textRun);
- textRunPaintInfo.bounds = marker;
- IntPoint textOrigin = IntPoint(marker.x(), marker.y() + style()->fontMetrics().ascent());
-
- if (type == Asterisks || type == Footnotes) {
- context->drawText(font, textRunPaintInfo, textOrigin);
- }
- else {
- // Text is not arbitrary. We can judge whether it's RTL from the first character,
- // and we only need to handle the direction RightToLeft for now.
- bool textNeedsReversing = direction(m_text[0]) == RightToLeft;
- StringBuilder reversedText;
- if (textNeedsReversing) {
- int length = m_text.length();
- reversedText.reserveCapacity(length);
- for (int i = length - 1; i >= 0; --i)
- reversedText.append(m_text[i]);
- ASSERT(reversedText.length() == reversedText.capacity());
- textRun.setText(reversedText.toString());
- }
-
- const UChar suffix = listMarkerSuffix(type, m_listItem->value());
- UChar suffixStr[2] = {
- style()->isLeftToRightDirection() ? suffix : ' ',
- style()->isLeftToRightDirection() ? ' ' : suffix
- };
- TextRun suffixRun = constructTextRun(this, font, suffixStr, 2, style(), style()->direction());
- TextRunPaintInfo suffixRunInfo(suffixRun);
- suffixRunInfo.bounds = marker;
-
- if (style()->isLeftToRightDirection()) {
- context->drawText(font, textRunPaintInfo, textOrigin);
- context->drawText(font, suffixRunInfo, textOrigin + IntSize(font.width(textRun), 0));
- } else {
- context->drawText(font, suffixRunInfo, textOrigin);
- context->drawText(font, textRunPaintInfo, textOrigin + IntSize(font.width(suffixRun), 0));
- }
- }
+ ListMarkerPainter(*this).paint(paintInfo, paintOffset);
}
void RenderListMarker::layout()
« no previous file with comments | « Source/core/rendering/RenderListMarker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698