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

Unified Diff: Source/core/paint/InlineTextBoxPainter.cpp

Issue 1325563002: Avoid style clobbering in setCompositionFromExistingText. (2nd land) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix end to refer to endPosition Created 5 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/paint/InlineTextBoxPainter.cpp
diff --git a/Source/core/paint/InlineTextBoxPainter.cpp b/Source/core/paint/InlineTextBoxPainter.cpp
index eccefdcefdec29dc46ad70ed2bf67e374c7e8197..f7fb0127994de4f2793c770951120572e0758604 100644
--- a/Source/core/paint/InlineTextBoxPainter.cpp
+++ b/Source/core/paint/InlineTextBoxPainter.cpp
@@ -79,8 +79,8 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint&
}
// Determine whether or not we have composition underlines to draw.
- bool containsComposition = m_inlineTextBox.layoutObject().node() && m_inlineTextBox.layoutObject().frame()->inputMethodController().compositionNode() == m_inlineTextBox.layoutObject().node();
- bool useCustomUnderlines = containsComposition && m_inlineTextBox.layoutObject().frame()->inputMethodController().compositionUsesCustomUnderlines();
+ bool containsComposition = m_inlineTextBox.layoutObject().node() && m_inlineTextBox.layoutObject().frame()->inputMethodController().isCompositionNode(m_inlineTextBox.layoutObject().node());
yosin_UTC9 2015/08/31 01:35:40 Note: |isCompositionNode(Node*)| should be fast, s
+ bool useCustomUnderlines = containsComposition && m_inlineTextBox.layoutObject().frame()->inputMethodController().customCompositionUnderlines(m_inlineTextBox.layoutObject().node());
// The text clip phase already has a DrawingRecorder. Text clips are initiated only in BoxPainter::paintLayerExtended, which is already
// within a DrawingRecorder.
@@ -247,12 +247,13 @@ void InlineTextBoxPainter::paint(const PaintInfo& paintInfo, const LayoutPoint&
// Paint custom underlines for compositions.
if (useCustomUnderlines) {
- const Vector<CompositionUnderline>& underlines = m_inlineTextBox.layoutObject().frame()->inputMethodController().customCompositionUnderlines();
- CompositionUnderlineRangeFilter filter(underlines, m_inlineTextBox.start(), m_inlineTextBox.end());
- for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begin(); it != filter.end(); ++it) {
- if (it->color == Color::transparent)
- continue;
- paintCompositionUnderline(context, boxOrigin, *it);
+ if (const Vector<CompositionUnderline>* underlines = m_inlineTextBox.layoutObject().frame()->inputMethodController().customCompositionUnderlines(m_inlineTextBox.layoutObject().node())) {
+ CompositionUnderlineRangeFilter filter(*underlines, m_inlineTextBox.start(), m_inlineTextBox.end());
+ for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begin(); it != filter.end(); ++it) {
+ if (it->color == Color::transparent)
+ continue;
+ paintCompositionUnderline(context, boxOrigin, *it);
+ }
}
}
}
@@ -278,14 +279,14 @@ void InlineTextBoxPainter::paintCompositionBackgrounds(GraphicsContext* pt, cons
{
if (useCustomUnderlines) {
// Paint custom background highlights for compositions.
- const Vector<CompositionUnderline>& underlines = m_inlineTextBox.layoutObject().frame()->inputMethodController().customCompositionUnderlines();
- CompositionUnderlineRangeFilter filter(underlines, m_inlineTextBox.start(), m_inlineTextBox.end());
- for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begin(); it != filter.end(); ++it) {
- if (it->backgroundColor == Color::transparent)
- continue;
- paintSingleCompositionBackgroundRun(pt, boxOrigin, style, font, it->backgroundColor, underlinePaintStart(*it), underlinePaintEnd(*it));
+ if (const Vector<CompositionUnderline>* underlines = m_inlineTextBox.layoutObject().frame()->inputMethodController().customCompositionUnderlines(m_inlineTextBox.layoutObject().node())) {
+ CompositionUnderlineRangeFilter filter(*underlines, m_inlineTextBox.start(), m_inlineTextBox.end());
+ for (CompositionUnderlineRangeFilter::ConstIterator it = filter.begin(); it != filter.end(); ++it) {
+ if (it->backgroundColor == Color::transparent)
+ continue;
+ paintSingleCompositionBackgroundRun(pt, boxOrigin, style, font, it->backgroundColor, underlinePaintStart(*it), underlinePaintEnd(*it));
+ }
}
-
} else {
paintSingleCompositionBackgroundRun(pt, boxOrigin, style, font, LayoutTheme::theme().platformDefaultCompositionBackgroundColor(),
m_inlineTextBox.layoutObject().frame()->inputMethodController().compositionStart(),

Powered by Google App Engine
This is Rietveld 408576698