Chromium Code Reviews| 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 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 } | 211 } |
| 212 | 212 |
| 213 // FIXME: This cache should probably ultimately be held somewhere else. | 213 // FIXME: This cache should probably ultimately be held somewhere else. |
| 214 // A hashmap is convenient to avoid a memory hit when the | 214 // A hashmap is convenient to avoid a memory hit when the |
| 215 // RuntimeEnabledFeature is off. | 215 // RuntimeEnabledFeature is off. |
| 216 bool textBlobIsCacheable = RuntimeEnabledFeatures::textBlobEnabled() && startOffset == 0 && endOffset == length; | 216 bool textBlobIsCacheable = RuntimeEnabledFeatures::textBlobEnabled() && startOffset == 0 && endOffset == length; |
| 217 TextBlobPtr* cachedTextBlob = 0; | 217 TextBlobPtr* cachedTextBlob = 0; |
| 218 if (textBlobIsCacheable) | 218 if (textBlobIsCacheable) |
| 219 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); | 219 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); |
| 220 textPainter.paint(startOffset, endOffset, length, textStyle, cachedTextB lob); | 220 textPainter.paint(startOffset, endOffset, length, textStyle, cachedTextB lob); |
| 221 | |
| 222 // Paint the text with color:transparent here in Find In Page Scenario. | |
| 223 if (styleToUse.visitedDependentColor(CSSPropertyColor) == Color::transpa rent) | |
| 224 paintTextMatchMarkerText(textPainter, length, styleToUse); | |
| 221 } | 225 } |
| 222 | 226 |
| 223 if ((paintSelectedTextOnly || paintSelectedTextSeparately) && selectionStart < selectionEnd) { | 227 if ((paintSelectedTextOnly || paintSelectedTextSeparately) && selectionStart < selectionEnd) { |
| 224 // paint only the text that is selected | 228 // paint only the text that is selected |
| 225 bool textBlobIsCacheable = RuntimeEnabledFeatures::textBlobEnabled() && selectionStart == 0 && selectionEnd == length; | 229 bool textBlobIsCacheable = RuntimeEnabledFeatures::textBlobEnabled() && selectionStart == 0 && selectionEnd == length; |
| 226 TextBlobPtr* cachedTextBlob = 0; | 230 TextBlobPtr* cachedTextBlob = 0; |
| 227 if (textBlobIsCacheable) | 231 if (textBlobIsCacheable) |
| 228 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); | 232 cachedTextBlob = addToTextBlobCache(m_inlineTextBox); |
| 229 textPainter.paint(selectionStart, selectionEnd, length, selectionStyle, cachedTextBlob); | 233 textPainter.paint(selectionStart, selectionEnd, length, selectionStyle, cachedTextBlob); |
| 230 } | 234 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 int ePos = std::min(endPos - static_cast<int>(m_inlineTextBox.start()), stat ic_cast<int>(m_inlineTextBox.len())); | 302 int ePos = std::min(endPos - static_cast<int>(m_inlineTextBox.start()), stat ic_cast<int>(m_inlineTextBox.len())); |
| 299 if (sPos >= ePos) | 303 if (sPos >= ePos) |
| 300 return; | 304 return; |
| 301 | 305 |
| 302 int deltaY = m_inlineTextBox.layoutObject().style()->isFlippedLinesWritingMo de() ? m_inlineTextBox.root().selectionBottom() - m_inlineTextBox.logicalBottom( ) : m_inlineTextBox.logicalTop() - m_inlineTextBox.root().selectionTop(); | 306 int deltaY = m_inlineTextBox.layoutObject().style()->isFlippedLinesWritingMo de() ? m_inlineTextBox.root().selectionBottom() - m_inlineTextBox.logicalBottom( ) : m_inlineTextBox.logicalTop() - m_inlineTextBox.root().selectionTop(); |
| 303 int selHeight = m_inlineTextBox.root().selectionHeight(); | 307 int selHeight = m_inlineTextBox.root().selectionHeight(); |
| 304 FloatPoint localOrigin(boxOrigin.x().toFloat(), boxOrigin.y().toFloat() - de ltaY); | 308 FloatPoint localOrigin(boxOrigin.x().toFloat(), boxOrigin.y().toFloat() - de ltaY); |
| 305 context->drawHighlightForText(font, m_inlineTextBox.constructTextRun(style, font), localOrigin, selHeight, backgroundColor, sPos, ePos); | 309 context->drawHighlightForText(font, m_inlineTextBox.constructTextRun(style, font), localOrigin, selHeight, backgroundColor, sPos, ePos); |
| 306 } | 310 } |
| 307 | 311 |
| 312 void InlineTextBoxPainter::paintTextMatchMarkerText(TextPainter textPainter, in t length, const ComputedStyle& style) | |
|
pdr.
2015/07/06 22:09:16
extra spaces around int length
Sk.kumar
2015/07/07 12:45:02
Done.
| |
| 313 { | |
| 314 if (!m_inlineTextBox.layoutObject().node()) | |
| 315 return; | |
| 316 | |
| 317 TextPainter::Style textStyle = TextPainter::textPaintingStyle(m_inlineTextBo x.layoutObject(), style, true, false); | |
|
pdr.
2015/07/06 22:09:16
We shouldn't add all of this code. Can you modify
Sk.kumar
2015/07/07 12:45:02
This is being done to maintain the flow of Paint.
| |
| 318 DocumentMarkerVector markers = m_inlineTextBox.layoutObject().document().mar kers().markersFor(m_inlineTextBox.layoutObject().node()); | |
| 319 DocumentMarkerVector::const_iterator markerIt = markers.begin(); | |
| 320 for ( ; markerIt != markers.end(); ++markerIt) { | |
| 321 DocumentMarker* marker = *markerIt; | |
| 322 if (marker->type() == DocumentMarker::TextMatch) { | |
| 323 int sPos = std::max(marker->startOffset() - m_inlineTextBox.start(), (unsigned)0); | |
| 324 int ePos = std::min(marker->endOffset() - m_inlineTextBox.start(), m _inlineTextBox.len()); | |
| 325 textPainter.paint(sPos, ePos, length, textStyle, 0); | |
| 326 } | |
| 327 } | |
| 328 } | |
| 329 | |
| 308 void InlineTextBoxPainter::paintDocumentMarkers(GraphicsContext* pt, const Layou tPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool background ) | 330 void InlineTextBoxPainter::paintDocumentMarkers(GraphicsContext* pt, const Layou tPoint& boxOrigin, const ComputedStyle& style, const Font& font, bool background ) |
| 309 { | 331 { |
| 310 if (!m_inlineTextBox.layoutObject().node()) | 332 if (!m_inlineTextBox.layoutObject().node()) |
| 311 return; | 333 return; |
| 312 | 334 |
| 313 DocumentMarkerVector markers = m_inlineTextBox.layoutObject().document().mar kers().markersFor(m_inlineTextBox.layoutObject().node()); | 335 DocumentMarkerVector markers = m_inlineTextBox.layoutObject().document().mar kers().markersFor(m_inlineTextBox.layoutObject().node()); |
| 314 DocumentMarkerVector::const_iterator markerIt = markers.begin(); | 336 DocumentMarkerVector::const_iterator markerIt = markers.begin(); |
| 315 | 337 |
| 316 // Give any document markers that touch this run a chance to draw before the text has been drawn. | 338 // Give any document markers that touch this run a chance to draw before the text has been drawn. |
| 317 // Note end() points at the last char, not one past it like endOffset and ra nges do. | 339 // Note end() points at the last char, not one past it like endOffset and ra nges do. |
| (...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 811 LayoutTheme::theme().platformActiveTextSearchHighlightColor() : | 833 LayoutTheme::theme().platformActiveTextSearchHighlightColor() : |
| 812 LayoutTheme::theme().platformInactiveTextSearchHighlightColor(); | 834 LayoutTheme::theme().platformInactiveTextSearchHighlightColor(); |
| 813 GraphicsContextStateSaver stateSaver(*pt); | 835 GraphicsContextStateSaver stateSaver(*pt); |
| 814 pt->clip(FloatRect(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toF loat(), m_inlineTextBox.logicalWidth().toFloat(), selHeight)); | 836 pt->clip(FloatRect(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toF loat(), m_inlineTextBox.logicalWidth().toFloat(), selHeight)); |
| 815 pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toFloat()), selHeight, color, sPos, ePos); | 837 pt->drawHighlightForText(font, run, FloatPoint(boxOrigin.x().toFloat(), (boxOrigin.y() - deltaY).toFloat()), selHeight, color, sPos, ePos); |
| 816 } | 838 } |
| 817 } | 839 } |
| 818 | 840 |
| 819 | 841 |
| 820 } // namespace blink | 842 } // namespace blink |
| OLD | NEW |