OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "core/paint/InlineTextBoxPainter.h" | 6 #include "core/paint/InlineTextBoxPainter.h" |
7 | 7 |
8 #include "core/dom/DocumentMarkerController.h" | 8 #include "core/dom/DocumentMarkerController.h" |
9 #include "core/dom/RenderedDocumentMarker.h" | 9 #include "core/dom/RenderedDocumentMarker.h" |
10 #include "core/editing/CompositionUnderline.h" | 10 #include "core/editing/CompositionUnderline.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 adjustedPaintOffset.move(0, styleToUse->isHorizontalWritingMode() ? 0 : -m_i
nlineTextBox.logicalHeight()); | 102 adjustedPaintOffset.move(0, styleToUse->isHorizontalWritingMode() ? 0 : -m_i
nlineTextBox.logicalHeight()); |
103 | 103 |
104 FloatPoint boxOrigin = m_inlineTextBox.locationIncludingFlipping(); | 104 FloatPoint boxOrigin = m_inlineTextBox.locationIncludingFlipping(); |
105 boxOrigin.move(adjustedPaintOffset.x().toFloat(), adjustedPaintOffset.y().to
Float()); | 105 boxOrigin.move(adjustedPaintOffset.x().toFloat(), adjustedPaintOffset.y().to
Float()); |
106 FloatRect boxRect(boxOrigin, LayoutSize(m_inlineTextBox.logicalWidth(), m_in
lineTextBox.logicalHeight())); | 106 FloatRect boxRect(boxOrigin, LayoutSize(m_inlineTextBox.logicalWidth(), m_in
lineTextBox.logicalHeight())); |
107 | 107 |
108 RenderCombineText* combinedText = styleToUse->hasTextCombine() && m_inlineTe
xtBox.renderer().isCombineText() && toRenderCombineText(m_inlineTextBox.renderer
()).isCombined() ? &toRenderCombineText(m_inlineTextBox.renderer()) : 0; | 108 RenderCombineText* combinedText = styleToUse->hasTextCombine() && m_inlineTe
xtBox.renderer().isCombineText() && toRenderCombineText(m_inlineTextBox.renderer
()).isCombined() ? &toRenderCombineText(m_inlineTextBox.renderer()) : 0; |
109 | 109 |
110 bool shouldRotate = !m_inlineTextBox.isHorizontal() && !combinedText; | 110 bool shouldRotate = !m_inlineTextBox.isHorizontal() && !combinedText; |
111 if (shouldRotate) | 111 if (shouldRotate) |
112 context->concatCTM(InlineTextBox::rotation(boxRect, InlineTextBox::Clock
wise)); | 112 context->concatCTM(TextPainter::rotation(boxRect, TextPainter::Clockwise
)); |
113 | 113 |
114 // Determine whether or not we have composition underlines to draw. | 114 // Determine whether or not we have composition underlines to draw. |
115 bool containsComposition = m_inlineTextBox.renderer().node() && m_inlineText
Box.renderer().frame()->inputMethodController().compositionNode() == m_inlineTex
tBox.renderer().node(); | 115 bool containsComposition = m_inlineTextBox.renderer().node() && m_inlineText
Box.renderer().frame()->inputMethodController().compositionNode() == m_inlineTex
tBox.renderer().node(); |
116 bool useCustomUnderlines = containsComposition && m_inlineTextBox.renderer()
.frame()->inputMethodController().compositionUsesCustomUnderlines(); | 116 bool useCustomUnderlines = containsComposition && m_inlineTextBox.renderer()
.frame()->inputMethodController().compositionUsesCustomUnderlines(); |
117 | 117 |
118 // Determine text colors. | 118 // Determine text colors. |
119 TextPainter::Style textStyle = TextPainter::textPaintingStyle(m_inlineTextBo
x.renderer(), styleToUse, paintInfo.forceBlackText(), isPrinting); | 119 TextPainter::Style textStyle = TextPainter::textPaintingStyle(m_inlineTextBo
x.renderer(), styleToUse, paintInfo.forceBlackText(), isPrinting); |
120 TextPainter::Style selectionStyle = TextPainter::selectionPaintingStyle(m_in
lineTextBox.renderer(), haveSelection, paintInfo.forceBlackText(), isPrinting, t
extStyle); | 120 TextPainter::Style selectionStyle = TextPainter::selectionPaintingStyle(m_in
lineTextBox.renderer(), haveSelection, paintInfo.forceBlackText(), isPrinting, t
extStyle); |
121 bool paintSelectedTextOnly = (paintInfo.phase == PaintPhaseSelection); | 121 bool paintSelectedTextOnly = (paintInfo.phase == PaintPhaseSelection); |
122 bool paintSelectedTextSeparately = !paintSelectedTextOnly && textStyle != se
lectionStyle; | 122 bool paintSelectedTextSeparately = !paintSelectedTextOnly && textStyle != se
lectionStyle; |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); | 210 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); |
211 textPainter.paint(selectionStart, selectionEnd, length, selectionStyle,
cachedTextBlob); | 211 textPainter.paint(selectionStart, selectionEnd, length, selectionStyle,
cachedTextBlob); |
212 } | 212 } |
213 | 213 |
214 // Paint decorations | 214 // Paint decorations |
215 TextDecoration textDecorations = styleToUse->textDecorationsInEffect(); | 215 TextDecoration textDecorations = styleToUse->textDecorationsInEffect(); |
216 if (textDecorations != TextDecorationNone && !paintSelectedTextOnly) { | 216 if (textDecorations != TextDecorationNone && !paintSelectedTextOnly) { |
217 GraphicsContextStateSaver stateSaver(*context, false); | 217 GraphicsContextStateSaver stateSaver(*context, false); |
218 TextPainter::updateGraphicsContext(context, textStyle, m_inlineTextBox.i
sHorizontal(), stateSaver); | 218 TextPainter::updateGraphicsContext(context, textStyle, m_inlineTextBox.i
sHorizontal(), stateSaver); |
219 if (combinedText) | 219 if (combinedText) |
220 | 220 context->concatCTM(TextPainter::rotation(boxRect, TextPainter::Clock
wise)); |
221 context->concatCTM(InlineTextBox::rotation(boxRect, InlineTextBox::C
lockwise)); | |
222 paintDecoration(context, boxOrigin, textDecorations); | 221 paintDecoration(context, boxOrigin, textDecorations); |
223 if (combinedText) | 222 if (combinedText) |
224 context->concatCTM(InlineTextBox::rotation(boxRect, InlineTextBox::C
ounterclockwise)); | 223 context->concatCTM(TextPainter::rotation(boxRect, TextPainter::Count
erclockwise)); |
225 } | 224 } |
226 | 225 |
227 if (paintInfo.phase == PaintPhaseForeground) { | 226 if (paintInfo.phase == PaintPhaseForeground) { |
228 paintDocumentMarkers(context, boxOrigin, styleToUse, font, false); | 227 paintDocumentMarkers(context, boxOrigin, styleToUse, font, false); |
229 | 228 |
230 // Paint custom underlines for compositions. | 229 // Paint custom underlines for compositions. |
231 if (useCustomUnderlines) { | 230 if (useCustomUnderlines) { |
232 const Vector<CompositionUnderline>& underlines = m_inlineTextBox.ren
derer().frame()->inputMethodController().customCompositionUnderlines(); | 231 const Vector<CompositionUnderline>& underlines = m_inlineTextBox.ren
derer().frame()->inputMethodController().customCompositionUnderlines(); |
233 CompositionUnderlineRangeFilter filter(underlines, m_inlineTextBox.s
tart(), m_inlineTextBox.end()); | 232 CompositionUnderlineRangeFilter filter(underlines, m_inlineTextBox.s
tart(), m_inlineTextBox.end()); |
234 for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begi
n(); it != filter.end(); ++it) { | 233 for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begi
n(); it != filter.end(); ++it) { |
235 if (it->color == Color::transparent) | 234 if (it->color == Color::transparent) |
236 continue; | 235 continue; |
237 paintCompositionUnderline(context, boxOrigin, *it); | 236 paintCompositionUnderline(context, boxOrigin, *it); |
238 } | 237 } |
239 } | 238 } |
240 } | 239 } |
241 | 240 |
242 if (shouldRotate) | 241 if (shouldRotate) |
243 context->concatCTM(InlineTextBox::rotation(boxRect, InlineTextBox::Count
erclockwise)); | 242 context->concatCTM(TextPainter::rotation(boxRect, TextPainter::Countercl
ockwise)); |
244 } | 243 } |
245 | 244 |
246 unsigned InlineTextBoxPainter::underlinePaintStart(const CompositionUnderline& u
nderline) | 245 unsigned InlineTextBoxPainter::underlinePaintStart(const CompositionUnderline& u
nderline) |
247 { | 246 { |
248 return std::max(static_cast<unsigned>(m_inlineTextBox.start()), underline.st
artOffset); | 247 return std::max(static_cast<unsigned>(m_inlineTextBox.start()), underline.st
artOffset); |
249 } | 248 } |
250 | 249 |
251 unsigned InlineTextBoxPainter::underlinePaintEnd(const CompositionUnderline& und
erline) | 250 unsigned InlineTextBoxPainter::underlinePaintEnd(const CompositionUnderline& und
erline) |
252 { | 251 { |
253 unsigned paintEnd = std::min(m_inlineTextBox.end() + 1, underline.endOffset)
; // end() points at the last char, not past it. | 252 unsigned paintEnd = std::min(m_inlineTextBox.end() + 1, underline.endOffset)
; // end() points at the last char, not past it. |
(...skipping 540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 RenderTheme::theme().platformActiveTextSearchHighlightColor() : | 793 RenderTheme::theme().platformActiveTextSearchHighlightColor() : |
795 RenderTheme::theme().platformInactiveTextSearchHighlightColor(); | 794 RenderTheme::theme().platformInactiveTextSearchHighlightColor(); |
796 GraphicsContextStateSaver stateSaver(*pt); | 795 GraphicsContextStateSaver stateSaver(*pt); |
797 pt->clip(FloatRect(boxOrigin.x(), boxOrigin.y() - deltaY, m_inlineTextBo
x.logicalWidth(), selHeight)); | 796 pt->clip(FloatRect(boxOrigin.x(), boxOrigin.y() - deltaY, m_inlineTextBo
x.logicalWidth(), selHeight)); |
798 pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x(), boxOrigin.
y() - deltaY), selHeight, color, sPos, ePos); | 797 pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x(), boxOrigin.
y() - deltaY), selHeight, color, sPos, ePos); |
799 } | 798 } |
800 } | 799 } |
801 | 800 |
802 | 801 |
803 } // namespace blink | 802 } // namespace blink |
OLD | NEW |