Index: Source/core/rendering/TextPainter.cpp |
diff --git a/Source/core/rendering/TextPainter.cpp b/Source/core/rendering/TextPainter.cpp |
deleted file mode 100644 |
index b2c2ac7e0ca425744c5d47d9de0a6ace55d90947..0000000000000000000000000000000000000000 |
--- a/Source/core/rendering/TextPainter.cpp |
+++ /dev/null |
@@ -1,218 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "config.h" |
-#include "core/rendering/TextPainter.h" |
- |
-#include "core/CSSPropertyNames.h" |
-#include "core/frame/Settings.h" |
-#include "core/rendering/InlineTextBox.h" |
-#include "core/rendering/RenderCombineText.h" |
-#include "core/rendering/RenderObject.h" |
-#include "core/rendering/style/RenderStyle.h" |
-#include "core/rendering/style/ShadowList.h" |
-#include "platform/fonts/Font.h" |
-#include "platform/graphics/GraphicsContext.h" |
-#include "platform/graphics/GraphicsContextStateSaver.h" |
-#include "platform/text/TextRun.h" |
-#include "wtf/Assertions.h" |
-#include "wtf/unicode/CharacterNames.h" |
- |
-namespace blink { |
- |
-TextPainter::TextPainter(GraphicsContext* context, const Font& font, const TextRun& run, const FloatPoint& textOrigin, const FloatRect& textBounds, bool horizontal) |
- : m_graphicsContext(context) |
- , m_font(font) |
- , m_run(run) |
- , m_textOrigin(textOrigin) |
- , m_textBounds(textBounds) |
- , m_horizontal(horizontal) |
- , m_emphasisMarkOffset(0) |
- , m_combinedText(0) |
-{ |
-} |
- |
-TextPainter::~TextPainter() |
-{ |
-} |
- |
-void TextPainter::setEmphasisMark(const AtomicString& emphasisMark, TextEmphasisPosition position) |
-{ |
- m_emphasisMark = emphasisMark; |
- |
- if (emphasisMark.isNull()) { |
- m_emphasisMarkOffset = 0; |
- } else if (position == TextEmphasisPositionOver) { |
- m_emphasisMarkOffset = -m_font.fontMetrics().ascent() - m_font.emphasisMarkDescent(emphasisMark); |
- } else { |
- ASSERT(position == TextEmphasisPositionUnder); |
- m_emphasisMarkOffset = m_font.fontMetrics().descent() + m_font.emphasisMarkAscent(emphasisMark); |
- } |
-} |
- |
-void TextPainter::paint(int startOffset, int endOffset, int length, const Style& textStyle, TextBlobPtr* cachedTextBlob) |
-{ |
- GraphicsContextStateSaver stateSaver(*m_graphicsContext, false); |
- updateGraphicsContext(textStyle, stateSaver); |
- paintInternal<PaintText>(startOffset, endOffset, length, cachedTextBlob); |
- |
- if (!m_emphasisMark.isEmpty()) { |
- if (textStyle.emphasisMarkColor != textStyle.fillColor) |
- m_graphicsContext->setFillColor(textStyle.emphasisMarkColor); |
- |
- if (m_combinedText) |
- paintEmphasisMarkForCombinedText(); |
- else |
- paintInternal<PaintEmphasisMark>(startOffset, endOffset, length); |
- } |
-} |
- |
-// static |
-void TextPainter::updateGraphicsContext(GraphicsContext* context, const Style& textStyle, bool horizontal, GraphicsContextStateSaver& stateSaver) |
-{ |
- TextDrawingModeFlags mode = context->textDrawingMode(); |
- if (textStyle.strokeWidth > 0) { |
- TextDrawingModeFlags newMode = mode | TextModeStroke; |
- if (mode != newMode) { |
- if (!stateSaver.saved()) |
- stateSaver.save(); |
- context->setTextDrawingMode(newMode); |
- mode = newMode; |
- } |
- } |
- |
- if (mode & TextModeFill && textStyle.fillColor != context->fillColor()) |
- context->setFillColor(textStyle.fillColor); |
- |
- if (mode & TextModeStroke) { |
- if (textStyle.strokeColor != context->strokeColor()) |
- context->setStrokeColor(textStyle.strokeColor); |
- if (textStyle.strokeWidth != context->strokeThickness()) |
- context->setStrokeThickness(textStyle.strokeWidth); |
- } |
- |
- // Text shadows are disabled when printing. http://crbug.com/258321 |
- if (textStyle.shadow && !context->printing()) { |
- if (!stateSaver.saved()) |
- stateSaver.save(); |
- context->setDrawLooper(textStyle.shadow->createDrawLooper(DrawLooperBuilder::ShadowIgnoresAlpha, horizontal)); |
- } |
-} |
- |
-static Color textColorForWhiteBackground(Color textColor) |
-{ |
- int distanceFromWhite = differenceSquared(textColor, Color::white); |
- // semi-arbitrarily chose 65025 (255^2) value here after a few tests; |
- return distanceFromWhite > 65025 ? textColor : textColor.dark(); |
-} |
- |
-// static |
-TextPainter::Style TextPainter::textPaintingStyle(RenderObject& renderer, RenderStyle* style, bool forceBlackText, bool isPrinting) |
-{ |
- TextPainter::Style textStyle; |
- |
- if (forceBlackText) { |
- textStyle.fillColor = Color::black; |
- textStyle.strokeColor = Color::black; |
- textStyle.emphasisMarkColor = Color::black; |
- textStyle.strokeWidth = style->textStrokeWidth(); |
- textStyle.shadow = 0; |
- } else { |
- textStyle.fillColor = renderer.resolveColor(style, CSSPropertyWebkitTextFillColor); |
- textStyle.strokeColor = renderer.resolveColor(style, CSSPropertyWebkitTextStrokeColor); |
- textStyle.emphasisMarkColor = renderer.resolveColor(style, CSSPropertyWebkitTextEmphasisColor); |
- textStyle.strokeWidth = style->textStrokeWidth(); |
- textStyle.shadow = style->textShadow(); |
- |
- // Adjust text color when printing with a white background. |
- bool forceBackgroundToWhite = false; |
- if (isPrinting) { |
- if (style->printColorAdjust() == PrintColorAdjustEconomy) |
- forceBackgroundToWhite = true; |
- if (renderer.document().settings() && renderer.document().settings()->shouldPrintBackgrounds()) |
- forceBackgroundToWhite = false; |
- } |
- if (forceBackgroundToWhite) { |
- textStyle.fillColor = textColorForWhiteBackground(textStyle.fillColor); |
- textStyle.strokeColor = textColorForWhiteBackground(textStyle.strokeColor); |
- textStyle.emphasisMarkColor = textColorForWhiteBackground(textStyle.emphasisMarkColor); |
- } |
- |
- // Text shadows are disabled when printing. http://crbug.com/258321 |
- if (isPrinting) |
- textStyle.shadow = 0; |
- } |
- |
- return textStyle; |
-} |
- |
-TextPainter::Style TextPainter::selectionPaintingStyle(RenderObject& renderer, bool haveSelection, bool forceBlackText, bool isPrinting, const TextPainter::Style& textStyle) |
-{ |
- TextPainter::Style selectionStyle = textStyle; |
- |
- if (haveSelection) { |
- if (!forceBlackText) { |
- selectionStyle.fillColor = renderer.selectionForegroundColor(); |
- selectionStyle.emphasisMarkColor = renderer.selectionEmphasisMarkColor(); |
- } |
- |
- if (RenderStyle* pseudoStyle = renderer.getCachedPseudoStyle(SELECTION)) { |
- selectionStyle.strokeColor = forceBlackText ? Color::black : renderer.resolveColor(pseudoStyle, CSSPropertyWebkitTextStrokeColor); |
- selectionStyle.strokeWidth = pseudoStyle->textStrokeWidth(); |
- selectionStyle.shadow = forceBlackText ? 0 : pseudoStyle->textShadow(); |
- } |
- |
- // Text shadows are disabled when printing. http://crbug.com/258321 |
- if (isPrinting) |
- selectionStyle.shadow = 0; |
- } |
- |
- return selectionStyle; |
-} |
- |
-template <TextPainter::PaintInternalStep step> |
-void TextPainter::paintInternalRun(TextRunPaintInfo& textRunPaintInfo, int from, int to) |
-{ |
- textRunPaintInfo.from = from; |
- textRunPaintInfo.to = to; |
- |
- if (step == PaintEmphasisMark) { |
- m_graphicsContext->drawEmphasisMarks(m_font, textRunPaintInfo, m_emphasisMark, |
- m_textOrigin + IntSize(0, m_emphasisMarkOffset)); |
- } else { |
- ASSERT(step == PaintText); |
- m_graphicsContext->drawText(m_font, textRunPaintInfo, m_textOrigin); |
- } |
-} |
- |
-template <TextPainter::PaintInternalStep Step> |
-void TextPainter::paintInternal(int startOffset, int endOffset, int truncationPoint, TextBlobPtr* cachedTextBlob) |
-{ |
- TextRunPaintInfo textRunPaintInfo(m_run); |
- textRunPaintInfo.bounds = m_textBounds; |
- if (startOffset <= endOffset) { |
- // FIXME: We should be able to use cachedTextBlob in more cases. |
- textRunPaintInfo.cachedTextBlob = cachedTextBlob; |
- paintInternalRun<Step>(textRunPaintInfo, startOffset, endOffset); |
- } else { |
- if (endOffset > 0) |
- paintInternalRun<Step>(textRunPaintInfo, 0, endOffset); |
- if (startOffset < truncationPoint) |
- paintInternalRun<Step>(textRunPaintInfo, startOffset, truncationPoint); |
- } |
-} |
- |
-void TextPainter::paintEmphasisMarkForCombinedText() |
-{ |
- ASSERT(m_combinedText); |
- DEFINE_STATIC_LOCAL(TextRun, placeholderTextRun, (&ideographicFullStop, 1)); |
- FloatPoint emphasisMarkTextOrigin(m_textBounds.x(), m_textBounds.y() + m_font.fontMetrics().ascent() + m_emphasisMarkOffset); |
- TextRunPaintInfo textRunPaintInfo(placeholderTextRun); |
- textRunPaintInfo.bounds = m_textBounds; |
- m_graphicsContext->concatCTM(InlineTextBox::rotation(m_textBounds, InlineTextBox::Clockwise)); |
- m_graphicsContext->drawEmphasisMarks(m_combinedText->originalFont(), textRunPaintInfo, m_emphasisMark, emphasisMarkTextOrigin); |
- m_graphicsContext->concatCTM(InlineTextBox::rotation(m_textBounds, InlineTextBox::Counterclockwise)); |
-} |
- |
-} // namespace blink |