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

Unified Diff: Source/core/editing/TextIterator.cpp

Issue 639863006: Revert of Convert first letter into a pseudo element. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 2 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
« no previous file with comments | « Source/core/dom/RenderTreeBuilder.cpp ('k') | Source/core/inspector/InspectorCSSAgent.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/TextIterator.cpp
diff --git a/Source/core/editing/TextIterator.cpp b/Source/core/editing/TextIterator.cpp
index ff95f367e7ddc020aa33be2921325c7d91a975d0..068ad9a665e6ab79510a6f6a5e662f656a2efa0c 100644
--- a/Source/core/editing/TextIterator.cpp
+++ b/Source/core/editing/TextIterator.cpp
@@ -30,7 +30,6 @@
#include "bindings/core/v8/ExceptionStatePlaceholder.h"
#include "core/HTMLNames.h"
#include "core/dom/Document.h"
-#include "core/dom/FirstLetterPseudoElement.h"
#include "core/dom/NodeTraversal.h"
#include "core/dom/shadow/ShadowRoot.h"
#include "core/editing/VisiblePosition.h"
@@ -762,28 +761,34 @@ void TextIterator::handleTextBox()
}
}
-void TextIterator::handleTextNodeFirstLetter(RenderTextFragment* renderer)
+static inline RenderText* firstRenderTextInFirstLetter(RenderBoxModelObject* firstLetter)
{
- m_handledFirstLetter = true;
-
- if (!renderer->isRemainingTextRenderer())
- return;
-
- FirstLetterPseudoElement* firstLetterElement = renderer->firstLetterPseudoElement();
- if (!firstLetterElement)
- return;
-
- RenderObject* pseudoRenderer = firstLetterElement->renderer();
- if (pseudoRenderer->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility)
- return;
+ if (!firstLetter)
+ return 0;
- RenderObject* firstLetter = pseudoRenderer->slowFirstChild();
- ASSERT(firstLetter);
+ // FIXME: Should this check descendent objects?
+ for (RenderObject* current = firstLetter->slowFirstChild(); current; current = current->nextSibling()) {
+ if (current->isText())
+ return toRenderText(current);
+ }
+ return 0;
+}
- m_remainingTextBox = m_textBox;
- m_textBox = toRenderText(firstLetter)->firstTextBox();
- m_sortedTextBoxes.clear();
- m_firstLetterText = toRenderText(firstLetter);
+void TextIterator::handleTextNodeFirstLetter(RenderTextFragment* renderer)
+{
+ if (renderer->firstLetter()) {
+ RenderBoxModelObject* r = renderer->firstLetter();
+ if (r->style()->visibility() != VISIBLE && !m_ignoresStyleVisibility)
+ return;
+ if (RenderText* firstLetter = firstRenderTextInFirstLetter(r)) {
+ m_handledFirstLetter = true;
+ m_remainingTextBox = m_textBox;
+ m_textBox = firstLetter->firstTextBox();
+ m_sortedTextBoxes.clear();
+ m_firstLetterText = firstLetter;
+ }
+ }
+ m_handledFirstLetter = true;
}
bool TextIterator::handleReplacedElement()
@@ -845,18 +850,11 @@ bool TextIterator::hasVisibleTextNode(RenderText* renderer)
{
if (renderer->style()->visibility() == VISIBLE)
return true;
-
- if (!renderer->isTextFragment())
- return false;
-
- RenderTextFragment* fragment = toRenderTextFragment(renderer);
- if (!fragment->isRemainingTextRenderer())
- return false;
-
- RenderObject* pseudoElementRenderer = fragment->firstLetterPseudoElement()->renderer();
- if (pseudoElementRenderer && pseudoElementRenderer->style()->visibility() == VISIBLE)
- return true;
-
+ if (renderer->isTextFragment()) {
+ RenderTextFragment* fragment = toRenderTextFragment(renderer);
+ if (fragment->firstLetter() && fragment->firstLetter()->style()->visibility() == VISIBLE)
+ return true;
+ }
return false;
}
@@ -1530,14 +1528,7 @@ RenderText* SimplifiedBackwardsTextIterator::handleFirstLetter(int& startOffset,
m_shouldHandleFirstLetter = false;
offsetInNode = 0;
-
- ASSERT(fragment->isRemainingTextRenderer());
- ASSERT(fragment->firstLetterPseudoElement());
-
- RenderObject* pseudoElementRenderer = fragment->firstLetterPseudoElement()->renderer();
- ASSERT(pseudoElementRenderer);
- ASSERT(pseudoElementRenderer->slowFirstChild());
- RenderText* firstLetterRenderer = toRenderText(pseudoElementRenderer->slowFirstChild());
+ RenderText* firstLetterRenderer = firstRenderTextInFirstLetter(fragment->firstLetter());
m_offset = firstLetterRenderer->caretMaxOffset();
m_offset += collapsedSpaceLength(firstLetterRenderer, m_offset);
« no previous file with comments | « Source/core/dom/RenderTreeBuilder.cpp ('k') | Source/core/inspector/InspectorCSSAgent.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698