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

Unified Diff: Source/core/rendering/RenderBlock.cpp

Issue 14113040: Update the first letter when the first line is changed by adding a new text at its start. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@first-letter-rendering-issue
Patch Set: Add first-letter-block-change.html to TestExpectations for rebaseline Created 7 years, 3 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 | « LayoutTests/fast/css/first-letter-block-change-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderBlock.cpp
diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp
index eadd43ce350a0cf81b5fbf6582321e6a29f18f12..4824d0052c9385786ffb024c6389f29ac7d107b5 100644
--- a/Source/core/rendering/RenderBlock.cpp
+++ b/Source/core/rendering/RenderBlock.cpp
@@ -28,6 +28,7 @@
#include "core/accessibility/AXObjectCache.h"
#include "core/dom/Document.h"
#include "core/dom/Element.h"
+#include "core/dom/Text.h"
#include "core/events/OverflowEvent.h"
#include "core/dom/shadow/ShadowRoot.h"
#include "core/editing/Editor.h"
@@ -5813,8 +5814,6 @@ void RenderBlock::updateFirstLetter()
if (style()->styleType() == FIRST_LETTER)
return;
- // FIXME: We need to destroy the first-letter object if it is no longer the first child. Need to find
- // an efficient way to check for that situation though before implementing anything.
RenderObject* firstLetterBlock = findFirstLetterBlock(this);
if (!firstLetterBlock)
return;
@@ -5845,9 +5844,24 @@ void RenderBlock::updateFirstLetter()
if (!currChild)
return;
- // If the child already has style, then it has already been created, so we just want
- // to update it.
if (currChild->parent()->style()->styleType() == FIRST_LETTER) {
+ // Destroy the first-letter object if it is no longer the first child.
+ RenderObject* remainingText = currChild->parent()->nextSibling();
+ if (remainingText && currChild->node() != remainingText->node()) {
+ if (!remainingText->isText() || remainingText->isBR())
+ return;
+
+ LayoutStateDisabler layoutStateDisabler(view());
+
+ if (RenderObject* oldRemainingText = toRenderBoxModelObject(currChild->parent())->firstLetterRemainingText())
+ toRenderText(oldRemainingText)->setText(toText(oldRemainingText->node())->data().impl());
+
+ createFirstLetterRenderer(firstLetterBlock, remainingText);
+ return;
+ }
+
+ // If the child already has style, then it has already been created, so we just want
+ // to update it.
updateFirstLetterStyle(firstLetterBlock, currChild);
return;
}
« no previous file with comments | « LayoutTests/fast/css/first-letter-block-change-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698