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

Side by Side Diff: third_party/WebKit/Source/core/paint/InlineTextBoxPainter.cpp

Issue 2650113004: [WIP] Add support for Android SuggestionSpans when editing text (Closed)
Patch Set: Created 3 years, 11 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 unified diff | Download patch
OLDNEW
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 "core/paint/InlineTextBoxPainter.h" 5 #include "core/paint/InlineTextBoxPainter.h"
6 6
7 #include "core/editing/CompositionUnderline.h" 7 #include "core/editing/CompositionUnderline.h"
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/frame/LocalFrame.h" 10 #include "core/frame/LocalFrame.h"
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 bool InlineTextBoxPainter::paintsMarkerHighlights( 422 bool InlineTextBoxPainter::paintsMarkerHighlights(
423 const LayoutObject& layoutObject) { 423 const LayoutObject& layoutObject) {
424 return layoutObject.node() && 424 return layoutObject.node() &&
425 layoutObject.document().markers().hasMarkers(layoutObject.node()); 425 layoutObject.document().markers().hasMarkers(layoutObject.node());
426 } 426 }
427 427
428 static bool paintsCompositionMarkers(const LayoutObject& layoutObject) { 428 static bool paintsCompositionMarkers(const LayoutObject& layoutObject) {
429 return layoutObject.node() && 429 return layoutObject.node() &&
430 layoutObject.document() 430 layoutObject.document()
431 .markers() 431 .markers()
432 .markersFor(layoutObject.node(), DocumentMarker::Composition) 432 .markersFor(layoutObject.node(),
433 DocumentMarker::Composition |
434 DocumentMarker::Suggestion |
435 DocumentMarker::SuggestionBackgroundHighlight)
433 .size() > 0; 436 .size() > 0;
434 } 437 }
435 438
436 void InlineTextBoxPainter::paint(const PaintInfo& paintInfo, 439 void InlineTextBoxPainter::paint(const PaintInfo& paintInfo,
437 const LayoutPoint& paintOffset) { 440 const LayoutPoint& paintOffset) {
438 if (!shouldPaintTextBox(paintInfo)) 441 if (!shouldPaintTextBox(paintInfo))
439 return; 442 return;
440 443
441 DCHECK(!shouldPaintSelfOutline(paintInfo.phase) && 444 DCHECK(!shouldPaintSelfOutline(paintInfo.phase) &&
442 !shouldPaintDescendantOutlines(paintInfo.phase)); 445 !shouldPaintDescendantOutlines(paintInfo.phase));
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 // Paint either the background markers or the foreground markers, but not 806 // Paint either the background markers or the foreground markers, but not
804 // both. 807 // both.
805 switch (marker.type()) { 808 switch (marker.type()) {
806 case DocumentMarker::Grammar: 809 case DocumentMarker::Grammar:
807 case DocumentMarker::Spelling: 810 case DocumentMarker::Spelling:
808 if (markerPaintPhase == DocumentMarkerPaintPhase::Background) 811 if (markerPaintPhase == DocumentMarkerPaintPhase::Background)
809 continue; 812 continue;
810 break; 813 break;
811 case DocumentMarker::TextMatch: 814 case DocumentMarker::TextMatch:
812 case DocumentMarker::Composition: 815 case DocumentMarker::Composition:
816 case DocumentMarker::Suggestion:
817 case DocumentMarker::SuggestionBackgroundHighlight:
813 break; 818 break;
814 default: 819 default:
815 continue; 820 continue;
816 } 821 }
817 822
818 if (marker.endOffset() <= m_inlineTextBox.start()) { 823 if (marker.endOffset() <= m_inlineTextBox.start()) {
819 // marker is completely before this run. This might be a marker that sits 824 // marker is completely before this run. This might be a marker that sits
820 // before the first run we draw, or markers that were within runs we 825 // before the first run we draw, or markers that were within runs we
821 // skipped due to truncation. 826 // skipped due to truncation.
822 continue; 827 continue;
(...skipping 14 matching lines...) Expand all
837 marker, style, font, true); 842 marker, style, font, true);
838 break; 843 break;
839 case DocumentMarker::TextMatch: 844 case DocumentMarker::TextMatch:
840 if (markerPaintPhase == DocumentMarkerPaintPhase::Background) 845 if (markerPaintPhase == DocumentMarkerPaintPhase::Background)
841 m_inlineTextBox.paintTextMatchMarkerBackground(paintInfo, boxOrigin, 846 m_inlineTextBox.paintTextMatchMarkerBackground(paintInfo, boxOrigin,
842 marker, style, font); 847 marker, style, font);
843 else 848 else
844 m_inlineTextBox.paintTextMatchMarkerForeground(paintInfo, boxOrigin, 849 m_inlineTextBox.paintTextMatchMarkerForeground(paintInfo, boxOrigin,
845 marker, style, font); 850 marker, style, font);
846 break; 851 break;
847 case DocumentMarker::Composition: { 852 case DocumentMarker::Composition:
853 case DocumentMarker::Suggestion:
854 case DocumentMarker::SuggestionBackgroundHighlight: {
848 CompositionUnderline underline(marker.startOffset(), marker.endOffset(), 855 CompositionUnderline underline(marker.startOffset(), marker.endOffset(),
849 marker.underlineColor(), marker.thick(), 856 marker.underlineColor(), marker.thick(),
850 marker.backgroundColor()); 857 marker.backgroundColor());
851 if (markerPaintPhase == DocumentMarkerPaintPhase::Background) 858 if (markerPaintPhase == DocumentMarkerPaintPhase::Background)
852 paintSingleCompositionBackgroundRun( 859 paintSingleCompositionBackgroundRun(
853 paintInfo.context, boxOrigin, style, font, 860 paintInfo.context, boxOrigin, style, font,
854 underline.backgroundColor(), underlinePaintStart(underline), 861 underline.backgroundColor(), underlinePaintStart(underline),
855 underlinePaintEnd(underline)); 862 underlinePaintEnd(underline));
856 else 863 else
857 paintCompositionUnderline(paintInfo.context, boxOrigin, underline); 864 paintCompositionUnderline(paintInfo.context, boxOrigin, underline);
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 if (underline.color() == Color::transparent) 1194 if (underline.color() == Color::transparent)
1188 return; 1195 return;
1189 1196
1190 if (m_inlineTextBox.truncation() == cFullTruncation) 1197 if (m_inlineTextBox.truncation() == cFullTruncation)
1191 return; 1198 return;
1192 1199
1193 unsigned paintStart = underlinePaintStart(underline); 1200 unsigned paintStart = underlinePaintStart(underline);
1194 unsigned paintEnd = underlinePaintEnd(underline); 1201 unsigned paintEnd = underlinePaintEnd(underline);
1195 DCHECK_LT(paintStart, paintEnd); 1202 DCHECK_LT(paintStart, paintEnd);
1196 1203
1204 LOG(INFO) << "painting composition underline from " << paintStart << " to "
1205 << paintEnd;
1206
1197 // start of line to draw 1207 // start of line to draw
1198 float start = 1208 float start =
1199 paintStart == m_inlineTextBox.start() 1209 paintStart == m_inlineTextBox.start()
1200 ? 0 1210 ? 0
1201 : m_inlineTextBox.getLineLayoutItem().width( 1211 : m_inlineTextBox.getLineLayoutItem().width(
1202 m_inlineTextBox.start(), paintStart - m_inlineTextBox.start(), 1212 m_inlineTextBox.start(), paintStart - m_inlineTextBox.start(),
1203 m_inlineTextBox.textPos(), 1213 m_inlineTextBox.textPos(),
1204 m_inlineTextBox.isLeftToRightDirection() ? TextDirection::kLtr 1214 m_inlineTextBox.isLeftToRightDirection() ? TextDirection::kLtr
1205 : TextDirection::kRtl, 1215 : TextDirection::kRtl,
1206 m_inlineTextBox.isFirstLineStyle()); 1216 m_inlineTextBox.isFirstLineStyle());
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1323 1333
1324 LayoutRect boxRect(boxOrigin, LayoutSize(m_inlineTextBox.logicalWidth(), 1334 LayoutRect boxRect(boxOrigin, LayoutSize(m_inlineTextBox.logicalWidth(),
1325 m_inlineTextBox.logicalHeight())); 1335 m_inlineTextBox.logicalHeight()));
1326 context.clip(FloatRect(boxRect)); 1336 context.clip(FloatRect(boxRect));
1327 context.drawHighlightForText(font, run, FloatPoint(boxOrigin), 1337 context.drawHighlightForText(font, run, FloatPoint(boxOrigin),
1328 boxRect.height().toInt(), color, 1338 boxRect.height().toInt(), color,
1329 paintOffsets.first, paintOffsets.second); 1339 paintOffsets.first, paintOffsets.second);
1330 } 1340 }
1331 1341
1332 } // namespace blink 1342 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698