| 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/SVGInlineTextBoxPainter.h" | 6 #include "core/paint/SVGInlineTextBoxPainter.h" |
| 7 | 7 |
| 8 #include "core/editing/Editor.h" | 8 #include "core/editing/Editor.h" |
| 9 #include "core/editing/markers/DocumentMarkerController.h" | 9 #include "core/editing/markers/DocumentMarkerController.h" |
| 10 #include "core/editing/markers/RenderedDocumentMarker.h" | 10 #include "core/editing/markers/RenderedDocumentMarker.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 // If we ever need that for SVG, it's very easy to refactor and reuse the co
de. | 51 // If we ever need that for SVG, it's very easy to refactor and reuse the co
de. |
| 52 | 52 |
| 53 if (paintInfo.phase == PaintPhaseSelection && !shouldPaintSelection(paintInf
o)) | 53 if (paintInfo.phase == PaintPhaseSelection && !shouldPaintSelection(paintInf
o)) |
| 54 return; | 54 return; |
| 55 | 55 |
| 56 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); | 56 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); |
| 57 if (!textShouldBePainted(textLayoutObject)) | 57 if (!textShouldBePainted(textLayoutObject)) |
| 58 return; | 58 return; |
| 59 | 59 |
| 60 DisplayItem::Type displayItemType = DisplayItem::paintPhaseToDrawingType(pai
ntInfo.phase); | 60 DisplayItem::Type displayItemType = DisplayItem::paintPhaseToDrawingType(pai
ntInfo.phase); |
| 61 if (!DrawingRecorder::useCachedDrawingIfPossible(*paintInfo.context, m_svgIn
lineTextBox, displayItemType)) { | 61 if (!DrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_svgInl
ineTextBox, displayItemType)) { |
| 62 LayoutObject& parentLayoutObject = *LineLayoutPaintShim::layoutObjectFro
m(m_svgInlineTextBox.parent()->lineLayoutItem()); | 62 LayoutObject& parentLayoutObject = *LineLayoutPaintShim::layoutObjectFro
m(m_svgInlineTextBox.parent()->lineLayoutItem()); |
| 63 const ComputedStyle& style = parentLayoutObject.styleRef(); | 63 const ComputedStyle& style = parentLayoutObject.styleRef(); |
| 64 | 64 |
| 65 // TODO(chrishtr): passing the cull rect is incorrect. | 65 // TODO(chrishtr): passing the cull rect is incorrect. |
| 66 DrawingRecorder recorder(*paintInfo.context, m_svgInlineTextBox, display
ItemType, FloatRect(paintInfo.cullRect().m_rect)); | 66 DrawingRecorder recorder(paintInfo.context, m_svgInlineTextBox, displayI
temType, FloatRect(paintInfo.cullRect().m_rect)); |
| 67 InlineTextBoxPainter(m_svgInlineTextBox).paintDocumentMarkers( | 67 InlineTextBoxPainter(m_svgInlineTextBox).paintDocumentMarkers( |
| 68 paintInfo.context, paintOffset, style, | 68 paintInfo.context, paintOffset, style, |
| 69 textLayoutObject.scaledFont(), true); | 69 textLayoutObject.scaledFont(), true); |
| 70 | 70 |
| 71 if (!m_svgInlineTextBox.textFragments().isEmpty()) | 71 if (!m_svgInlineTextBox.textFragments().isEmpty()) |
| 72 paintTextFragments(paintInfo, parentLayoutObject); | 72 paintTextFragments(paintInfo, parentLayoutObject); |
| 73 } | 73 } |
| 74 } | 74 } |
| 75 | 75 |
| 76 void SVGInlineTextBoxPainter::paintTextFragments(const PaintInfo& paintInfo, Lay
outObject& parentLayoutObject) | 76 void SVGInlineTextBoxPainter::paintTextFragments(const PaintInfo& paintInfo, Lay
outObject& parentLayoutObject) |
| (...skipping 23 matching lines...) Expand all Loading... |
| 100 if (paintInfo.isRenderingClipPathAsMaskImage()) { | 100 if (paintInfo.isRenderingClipPathAsMaskImage()) { |
| 101 hasFill = true; | 101 hasFill = true; |
| 102 hasVisibleStroke = false; | 102 hasVisibleStroke = false; |
| 103 } | 103 } |
| 104 | 104 |
| 105 AffineTransform fragmentTransform; | 105 AffineTransform fragmentTransform; |
| 106 unsigned textFragmentsSize = m_svgInlineTextBox.textFragments().size(); | 106 unsigned textFragmentsSize = m_svgInlineTextBox.textFragments().size(); |
| 107 for (unsigned i = 0; i < textFragmentsSize; ++i) { | 107 for (unsigned i = 0; i < textFragmentsSize; ++i) { |
| 108 const SVGTextFragment& fragment = m_svgInlineTextBox.textFragments().at(
i); | 108 const SVGTextFragment& fragment = m_svgInlineTextBox.textFragments().at(
i); |
| 109 | 109 |
| 110 GraphicsContextStateSaver stateSaver(*paintInfo.context, false); | 110 GraphicsContextStateSaver stateSaver(paintInfo.context, false); |
| 111 fragment.buildFragmentTransform(fragmentTransform); | 111 fragment.buildFragmentTransform(fragmentTransform); |
| 112 if (!fragmentTransform.isIdentity()) { | 112 if (!fragmentTransform.isIdentity()) { |
| 113 stateSaver.save(); | 113 stateSaver.save(); |
| 114 paintInfo.context->concatCTM(fragmentTransform); | 114 paintInfo.context.concatCTM(fragmentTransform); |
| 115 } | 115 } |
| 116 | 116 |
| 117 // Spec: All text decorations except line-through should be drawn before
the text is filled and stroked; thus, the text is rendered on top of these deco
rations. | 117 // Spec: All text decorations except line-through should be drawn before
the text is filled and stroked; thus, the text is rendered on top of these deco
rations. |
| 118 unsigned decorations = style.textDecorationsInEffect(); | 118 unsigned decorations = style.textDecorationsInEffect(); |
| 119 if (decorations & TextDecorationUnderline) | 119 if (decorations & TextDecorationUnderline) |
| 120 paintDecoration(paintInfo, TextDecorationUnderline, fragment); | 120 paintDecoration(paintInfo, TextDecorationUnderline, fragment); |
| 121 if (decorations & TextDecorationOverline) | 121 if (decorations & TextDecorationOverline) |
| 122 paintDecoration(paintInfo, TextDecorationOverline, fragment); | 122 paintDecoration(paintInfo, TextDecorationOverline, fragment); |
| 123 | 123 |
| 124 for (int i = 0; i < 3; i++) { | 124 for (int i = 0; i < 3; i++) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 AffineTransform fragmentTransform; | 174 AffineTransform fragmentTransform; |
| 175 unsigned textFragmentsSize = m_svgInlineTextBox.textFragments().size(); | 175 unsigned textFragmentsSize = m_svgInlineTextBox.textFragments().size(); |
| 176 for (unsigned i = 0; i < textFragmentsSize; ++i) { | 176 for (unsigned i = 0; i < textFragmentsSize; ++i) { |
| 177 const SVGTextFragment& fragment = m_svgInlineTextBox.textFragments().at(
i); | 177 const SVGTextFragment& fragment = m_svgInlineTextBox.textFragments().at(
i); |
| 178 | 178 |
| 179 fragmentStartPosition = startPosition; | 179 fragmentStartPosition = startPosition; |
| 180 fragmentEndPosition = endPosition; | 180 fragmentEndPosition = endPosition; |
| 181 if (!m_svgInlineTextBox.mapStartEndPositionsIntoFragmentCoordinates(frag
ment, fragmentStartPosition, fragmentEndPosition)) | 181 if (!m_svgInlineTextBox.mapStartEndPositionsIntoFragmentCoordinates(frag
ment, fragmentStartPosition, fragmentEndPosition)) |
| 182 continue; | 182 continue; |
| 183 | 183 |
| 184 GraphicsContextStateSaver stateSaver(*paintInfo.context); | 184 GraphicsContextStateSaver stateSaver(paintInfo.context); |
| 185 fragment.buildFragmentTransform(fragmentTransform); | 185 fragment.buildFragmentTransform(fragmentTransform); |
| 186 if (!fragmentTransform.isIdentity()) | 186 if (!fragmentTransform.isIdentity()) |
| 187 paintInfo.context->concatCTM(fragmentTransform); | 187 paintInfo.context.concatCTM(fragmentTransform); |
| 188 | 188 |
| 189 paintInfo.context->setFillColor(backgroundColor); | 189 paintInfo.context.setFillColor(backgroundColor); |
| 190 paintInfo.context->fillRect(m_svgInlineTextBox.selectionRectForTextFragm
ent(fragment, fragmentStartPosition, fragmentEndPosition, style), backgroundColo
r); | 190 paintInfo.context.fillRect(m_svgInlineTextBox.selectionRectForTextFragme
nt(fragment, fragmentStartPosition, fragmentEndPosition, style), backgroundColor
); |
| 191 } | 191 } |
| 192 } | 192 } |
| 193 | 193 |
| 194 static inline LayoutObject* findLayoutObjectDefininingTextDecoration(InlineFlowB
ox* parentBox) | 194 static inline LayoutObject* findLayoutObjectDefininingTextDecoration(InlineFlowB
ox* parentBox) |
| 195 { | 195 { |
| 196 // Lookup first layout object in parent hierarchy which has text-decoration
set. | 196 // Lookup first layout object in parent hierarchy which has text-decoration
set. |
| 197 LayoutObject* layoutObject = 0; | 197 LayoutObject* layoutObject = 0; |
| 198 while (parentBox) { | 198 while (parentBox) { |
| 199 layoutObject = LineLayoutPaintShim::layoutObjectFrom(parentBox->lineLayo
utItem()); | 199 layoutObject = LineLayoutPaintShim::layoutObjectFrom(parentBox->lineLayo
utItem()); |
| 200 | 200 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 const SVGComputedStyle& svgDecorationStyle = decorationStyle.svgStyle(); | 264 const SVGComputedStyle& svgDecorationStyle = decorationStyle.svgStyle(); |
| 265 | 265 |
| 266 for (int i = 0; i < 3; i++) { | 266 for (int i = 0; i < 3; i++) { |
| 267 switch (svgDecorationStyle.paintOrderType(i)) { | 267 switch (svgDecorationStyle.paintOrderType(i)) { |
| 268 case PT_FILL: | 268 case PT_FILL: |
| 269 if (svgDecorationStyle.hasFill()) { | 269 if (svgDecorationStyle.hasFill()) { |
| 270 SkPaint fillPaint; | 270 SkPaint fillPaint; |
| 271 if (!SVGPaintContext::paintForLayoutObject(paintInfo, decoration
Style, *decorationLayoutObject, ApplyToFillMode, fillPaint)) | 271 if (!SVGPaintContext::paintForLayoutObject(paintInfo, decoration
Style, *decorationLayoutObject, ApplyToFillMode, fillPaint)) |
| 272 break; | 272 break; |
| 273 fillPaint.setAntiAlias(true); | 273 fillPaint.setAntiAlias(true); |
| 274 paintInfo.context->drawPath(path.skPath(), fillPaint); | 274 paintInfo.context.drawPath(path.skPath(), fillPaint); |
| 275 } | 275 } |
| 276 break; | 276 break; |
| 277 case PT_STROKE: | 277 case PT_STROKE: |
| 278 if (svgDecorationStyle.hasVisibleStroke()) { | 278 if (svgDecorationStyle.hasVisibleStroke()) { |
| 279 SkPaint strokePaint; | 279 SkPaint strokePaint; |
| 280 if (!SVGPaintContext::paintForLayoutObject(paintInfo, decoration
Style, *decorationLayoutObject, ApplyToStrokeMode, strokePaint)) | 280 if (!SVGPaintContext::paintForLayoutObject(paintInfo, decoration
Style, *decorationLayoutObject, ApplyToStrokeMode, strokePaint)) |
| 281 break; | 281 break; |
| 282 strokePaint.setAntiAlias(true); | 282 strokePaint.setAntiAlias(true); |
| 283 StrokeData strokeData; | 283 StrokeData strokeData; |
| 284 SVGLayoutSupport::applyStrokeStyleToStrokeData(strokeData, decor
ationStyle, *decorationLayoutObject); | 284 SVGLayoutSupport::applyStrokeStyleToStrokeData(strokeData, decor
ationStyle, *decorationLayoutObject); |
| 285 if (svgDecorationStyle.vectorEffect() == VE_NON_SCALING_STROKE) | 285 if (svgDecorationStyle.vectorEffect() == VE_NON_SCALING_STROKE) |
| 286 strokeData.setThickness(strokeData.thickness() / scalingFact
or); | 286 strokeData.setThickness(strokeData.thickness() / scalingFact
or); |
| 287 strokeData.setupPaint(&strokePaint); | 287 strokeData.setupPaint(&strokePaint); |
| 288 paintInfo.context->drawPath(path.skPath(), strokePaint); | 288 paintInfo.context.drawPath(path.skPath(), strokePaint); |
| 289 } | 289 } |
| 290 break; | 290 break; |
| 291 case PT_MARKERS: | 291 case PT_MARKERS: |
| 292 break; | 292 break; |
| 293 default: | 293 default: |
| 294 ASSERT_NOT_REACHED(); | 294 ASSERT_NOT_REACHED(); |
| 295 } | 295 } |
| 296 } | 296 } |
| 297 } | 297 } |
| 298 | 298 |
| 299 void SVGInlineTextBoxPainter::paintTextWithShadows(const PaintInfo& paintInfo, c
onst ComputedStyle& style, | 299 void SVGInlineTextBoxPainter::paintTextWithShadows(const PaintInfo& paintInfo, c
onst ComputedStyle& style, |
| 300 TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int en
dPosition, | 300 TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int en
dPosition, |
| 301 LayoutSVGResourceMode resourceMode) | 301 LayoutSVGResourceMode resourceMode) |
| 302 { | 302 { |
| 303 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); | 303 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); |
| 304 | 304 |
| 305 float scalingFactor = textLayoutObject.scalingFactor(); | 305 float scalingFactor = textLayoutObject.scalingFactor(); |
| 306 ASSERT(scalingFactor); | 306 ASSERT(scalingFactor); |
| 307 | 307 |
| 308 const Font& scaledFont = textLayoutObject.scaledFont(); | 308 const Font& scaledFont = textLayoutObject.scaledFont(); |
| 309 const ShadowList* shadowList = style.textShadow(); | 309 const ShadowList* shadowList = style.textShadow(); |
| 310 GraphicsContext* context = paintInfo.context; | 310 GraphicsContext& context = paintInfo.context; |
| 311 | 311 |
| 312 // Text shadows are disabled when printing. http://crbug.com/258321 | 312 // Text shadows are disabled when printing. http://crbug.com/258321 |
| 313 bool hasShadow = shadowList && !paintInfo.isPrinting(); | 313 bool hasShadow = shadowList && !paintInfo.isPrinting(); |
| 314 | 314 |
| 315 FloatPoint textOrigin(fragment.x, fragment.y); | 315 FloatPoint textOrigin(fragment.x, fragment.y); |
| 316 FloatSize textSize(fragment.width, fragment.height); | 316 FloatSize textSize(fragment.width, fragment.height); |
| 317 AffineTransform paintServerTransform; | 317 AffineTransform paintServerTransform; |
| 318 const AffineTransform* additionalPaintServerTransform = 0; | 318 const AffineTransform* additionalPaintServerTransform = 0; |
| 319 | 319 |
| 320 GraphicsContextStateSaver stateSaver(*context, false); | 320 GraphicsContextStateSaver stateSaver(context, false); |
| 321 if (scalingFactor != 1) { | 321 if (scalingFactor != 1) { |
| 322 textOrigin.scale(scalingFactor, scalingFactor); | 322 textOrigin.scale(scalingFactor, scalingFactor); |
| 323 textSize.scale(scalingFactor); | 323 textSize.scale(scalingFactor); |
| 324 stateSaver.save(); | 324 stateSaver.save(); |
| 325 context->scale(1 / scalingFactor, 1 / scalingFactor); | 325 context.scale(1 / scalingFactor, 1 / scalingFactor); |
| 326 // Adjust the paint-server coordinate space. | 326 // Adjust the paint-server coordinate space. |
| 327 paintServerTransform.scale(scalingFactor); | 327 paintServerTransform.scale(scalingFactor); |
| 328 additionalPaintServerTransform = &paintServerTransform; | 328 additionalPaintServerTransform = &paintServerTransform; |
| 329 } | 329 } |
| 330 | 330 |
| 331 SkPaint paint; | 331 SkPaint paint; |
| 332 if (!SVGPaintContext::paintForLayoutObject(paintInfo, style, *LineLayoutPain
tShim::layoutObjectFrom(m_svgInlineTextBox.parent()->lineLayoutItem()), resource
Mode, paint, additionalPaintServerTransform)) | 332 if (!SVGPaintContext::paintForLayoutObject(paintInfo, style, *LineLayoutPain
tShim::layoutObjectFrom(m_svgInlineTextBox.parent()->lineLayoutItem()), resource
Mode, paint, additionalPaintServerTransform)) |
| 333 return; | 333 return; |
| 334 paint.setAntiAlias(true); | 334 paint.setAntiAlias(true); |
| 335 | 335 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 348 } | 348 } |
| 349 | 349 |
| 350 TextRunPaintInfo textRunPaintInfo(textRun); | 350 TextRunPaintInfo textRunPaintInfo(textRun); |
| 351 textRunPaintInfo.from = startPosition; | 351 textRunPaintInfo.from = startPosition; |
| 352 textRunPaintInfo.to = endPosition; | 352 textRunPaintInfo.to = endPosition; |
| 353 | 353 |
| 354 float baseline = scaledFont.fontMetrics().floatAscent(); | 354 float baseline = scaledFont.fontMetrics().floatAscent(); |
| 355 textRunPaintInfo.bounds = FloatRect(textOrigin.x(), textOrigin.y() - baselin
e, | 355 textRunPaintInfo.bounds = FloatRect(textOrigin.x(), textOrigin.y() - baselin
e, |
| 356 textSize.width(), textSize.height()); | 356 textSize.width(), textSize.height()); |
| 357 | 357 |
| 358 context->drawText(scaledFont, textRunPaintInfo, textOrigin, paint); | 358 context.drawText(scaledFont, textRunPaintInfo, textOrigin, paint); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, const Comput
edStyle& style, | 361 void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, const Comput
edStyle& style, |
| 362 const ComputedStyle& selectionStyle, const SVGTextFragment& fragment, | 362 const ComputedStyle& selectionStyle, const SVGTextFragment& fragment, |
| 363 LayoutSVGResourceMode resourceMode, bool shouldPaintSelection) | 363 LayoutSVGResourceMode resourceMode, bool shouldPaintSelection) |
| 364 { | 364 { |
| 365 int startPosition = 0; | 365 int startPosition = 0; |
| 366 int endPosition = 0; | 366 int endPosition = 0; |
| 367 if (shouldPaintSelection) { | 367 if (shouldPaintSelection) { |
| 368 m_svgInlineTextBox.selectionStartEnd(startPosition, endPosition); | 368 m_svgInlineTextBox.selectionStartEnd(startPosition, endPosition); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 394 StyleDifference diff; | 394 StyleDifference diff; |
| 395 diff.setNeedsPaintInvalidationObject(); | 395 diff.setNeedsPaintInvalidationObject(); |
| 396 SVGResourcesCache::clientStyleChanged(LineLayoutPaintShim::layoutObjectF
rom(m_svgInlineTextBox.parent()->lineLayoutItem()), diff, style); | 396 SVGResourcesCache::clientStyleChanged(LineLayoutPaintShim::layoutObjectF
rom(m_svgInlineTextBox.parent()->lineLayoutItem()), diff, style); |
| 397 } | 397 } |
| 398 | 398 |
| 399 // Eventually draw text using regular style from the end position of the sel
ection to the end of the current chunk part | 399 // Eventually draw text using regular style from the end position of the sel
ection to the end of the current chunk part |
| 400 if (endPosition < static_cast<int>(fragment.length) && !paintSelectedTextOnl
y) | 400 if (endPosition < static_cast<int>(fragment.length) && !paintSelectedTextOnl
y) |
| 401 paintTextWithShadows(paintInfo, style, textRun, fragment, endPosition, f
ragment.length, resourceMode); | 401 paintTextWithShadows(paintInfo, style, textRun, fragment, endPosition, f
ragment.length, resourceMode); |
| 402 } | 402 } |
| 403 | 403 |
| 404 void SVGInlineTextBoxPainter::paintTextMatchMarker(GraphicsContext* context, con
st LayoutPoint&, DocumentMarker* marker, const ComputedStyle& style, const Font&
font) | 404 void SVGInlineTextBoxPainter::paintTextMatchMarker(GraphicsContext& context, con
st LayoutPoint&, DocumentMarker* marker, const ComputedStyle& style, const Font&
font) |
| 405 { | 405 { |
| 406 // SVG is only interested in the TextMatch markers. | 406 // SVG is only interested in the TextMatch markers. |
| 407 if (marker->type() != DocumentMarker::TextMatch) | 407 if (marker->type() != DocumentMarker::TextMatch) |
| 408 return; | 408 return; |
| 409 | 409 |
| 410 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); | 410 LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPai
ntShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); |
| 411 | 411 |
| 412 AffineTransform fragmentTransform; | 412 AffineTransform fragmentTransform; |
| 413 for (InlineTextBox* box = textLayoutObject.firstTextBox(); box; box = box->n
extTextBox()) { | 413 for (InlineTextBox* box = textLayoutObject.firstTextBox(); box; box = box->n
extTextBox()) { |
| 414 if (!box->isSVGInlineTextBox()) | 414 if (!box->isSVGInlineTextBox()) |
| (...skipping 18 matching lines...) Expand all Loading... |
| 433 continue; | 433 continue; |
| 434 | 434 |
| 435 FloatRect fragmentRect = textBox->selectionRectForTextFragment(fragm
ent, fragmentStartPosition, fragmentEndPosition, style); | 435 FloatRect fragmentRect = textBox->selectionRectForTextFragment(fragm
ent, fragmentStartPosition, fragmentEndPosition, style); |
| 436 fragment.buildFragmentTransform(fragmentTransform); | 436 fragment.buildFragmentTransform(fragmentTransform); |
| 437 | 437 |
| 438 // Draw the marker highlight. | 438 // Draw the marker highlight. |
| 439 if (LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.lineLay
outItem())->frame()->editor().markedTextMatchesAreHighlighted()) { | 439 if (LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.lineLay
outItem())->frame()->editor().markedTextMatchesAreHighlighted()) { |
| 440 Color color = marker->activeMatch() ? | 440 Color color = marker->activeMatch() ? |
| 441 LayoutTheme::theme().platformActiveTextSearchHighlightColor(
) : | 441 LayoutTheme::theme().platformActiveTextSearchHighlightColor(
) : |
| 442 LayoutTheme::theme().platformInactiveTextSearchHighlightColo
r(); | 442 LayoutTheme::theme().platformInactiveTextSearchHighlightColo
r(); |
| 443 GraphicsContextStateSaver stateSaver(*context); | 443 GraphicsContextStateSaver stateSaver(context); |
| 444 if (!fragmentTransform.isIdentity()) | 444 if (!fragmentTransform.isIdentity()) |
| 445 context->concatCTM(fragmentTransform); | 445 context.concatCTM(fragmentTransform); |
| 446 context->setFillColor(color); | 446 context.setFillColor(color); |
| 447 context->fillRect(fragmentRect, color); | 447 context.fillRect(fragmentRect, color); |
| 448 } | 448 } |
| 449 } | 449 } |
| 450 } | 450 } |
| 451 } | 451 } |
| 452 | 452 |
| 453 } // namespace blink | 453 } // namespace blink |
| OLD | NEW |