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

Unified Diff: Source/core/layout/LayoutRuby.cpp

Issue 1124313004: Remove special handling of ::before and ::after on RUBY elements. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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/virtual/slimmingpaint/fast/ruby/ruby-inline-style-not-updated-with-before-after-content-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/layout/LayoutRuby.cpp
diff --git a/Source/core/layout/LayoutRuby.cpp b/Source/core/layout/LayoutRuby.cpp
index 17ae3fe6152021bb7b315b49445a728f0d45cd30..d7dc6f40a58efc1e57194e5ba92571021b5187ab 100644
--- a/Source/core/layout/LayoutRuby.cpp
+++ b/Source/core/layout/LayoutRuby.cpp
@@ -34,70 +34,16 @@
#include "core/frame/UseCounter.h"
#include "core/layout/LayoutRubyRun.h"
-#include "core/style/ComputedStyle.h"
-#include "wtf/RefPtr.h"
namespace blink {
// === generic helper functions to avoid excessive code duplication ===
-static inline bool isAnonymousRubyInlineBlock(const LayoutObject* object)
-{
- ASSERT(!object
- || !object->parent()->isRuby()
- || object->isRubyRun()
- || (object->isInline() && (object->isBeforeContent() || object->isAfterContent()))
- || (object->isAnonymous() && object->isLayoutBlock() && object->style()->display() == INLINE_BLOCK));
-
- return object
- && object->parent()->isRuby()
- && object->isLayoutBlock()
- && !object->isRubyRun();
-}
-
-static inline bool isRubyBeforeBlock(const LayoutObject* object)
-{
- return isAnonymousRubyInlineBlock(object)
- && !object->previousSibling()
- && toLayoutBlock(object)->firstChild()
- && toLayoutBlock(object)->firstChild()->style()->styleType() == BEFORE;
-}
-
-static inline bool isRubyAfterBlock(const LayoutObject* object)
-{
- return isAnonymousRubyInlineBlock(object)
- && !object->nextSibling()
- && toLayoutBlock(object)->firstChild()
- && toLayoutBlock(object)->firstChild()->style()->styleType() == AFTER;
-}
-
-static inline LayoutBlock* rubyBeforeBlock(const LayoutObject* ruby)
-{
- LayoutObject* child = ruby->slowFirstChild();
- return isRubyBeforeBlock(child) ? toLayoutBlock(child) : 0;
-}
-
-static inline LayoutBlock* rubyAfterBlock(const LayoutObject* ruby)
-{
- LayoutObject* child = ruby->slowLastChild();
- return isRubyAfterBlock(child) ? toLayoutBlock(child) : 0;
-}
-
-static LayoutBlockFlow* createAnonymousRubyInlineBlock(LayoutObject* ruby)
-{
- RefPtr<ComputedStyle> newStyle = ComputedStyle::createAnonymousStyleWithDisplay(ruby->styleRef(), INLINE_BLOCK);
- LayoutBlockFlow* newBlock = LayoutBlockFlow::createAnonymous(&ruby->document());
- newBlock->setStyle(newStyle.release());
- return newBlock;
-}
-
static LayoutRubyRun* lastRubyRun(const LayoutObject* ruby)
{
LayoutObject* child = ruby->slowLastChild();
- if (child && !child->isRubyRun())
- child = child->previousSibling();
- ASSERT(!child || child->isRubyRun() || child->isBeforeContent() || child == rubyBeforeBlock(ruby));
- return child && child->isRubyRun() ? toLayoutRubyRun(child) : 0;
+ ASSERT(!child || child->isRubyRun());
+ return toLayoutRubyRun(child);
}
static inline LayoutRubyRun* findRubyRunParent(LayoutObject* child)
@@ -127,45 +73,13 @@ void LayoutRubyAsInline::styleDidChange(StyleDifference diff, const ComputedStyl
void LayoutRubyAsInline::addChild(LayoutObject* child, LayoutObject* beforeChild)
{
- // Insert :before and :after content before/after the LayoutRubyRun(s)
- if (child->isBeforeContent()) {
- if (child->isInline()) {
- // Add generated inline content normally
- LayoutInline::addChild(child, firstChild());
- } else {
- // Wrap non-inline content with an anonymous inline-block.
- LayoutBlock* beforeBlock = rubyBeforeBlock(this);
- if (!beforeBlock) {
- beforeBlock = createAnonymousRubyInlineBlock(this);
- LayoutInline::addChild(beforeBlock, firstChild());
- }
- beforeBlock->addChild(child);
- }
- return;
- }
- if (child->isAfterContent()) {
- if (child->isInline()) {
- // Add generated inline content normally
- LayoutInline::addChild(child);
- } else {
- // Wrap non-inline content with an anonymous inline-block.
- LayoutBlock* afterBlock = rubyAfterBlock(this);
- if (!afterBlock) {
- afterBlock = createAnonymousRubyInlineBlock(this);
- LayoutInline::addChild(afterBlock);
- }
- afterBlock->addChild(child);
- }
- return;
- }
-
// If the child is a ruby run, just add it normally.
if (child->isRubyRun()) {
LayoutInline::addChild(child, beforeChild);
return;
}
- if (beforeChild && !isAfterContent(beforeChild)) {
+ if (beforeChild) {
// insert child into run
LayoutObject* run = beforeChild;
while (run && !run->isRubyRun())
@@ -194,21 +108,12 @@ void LayoutRubyAsInline::addChild(LayoutObject* child, LayoutObject* beforeChild
void LayoutRubyAsInline::removeChild(LayoutObject* child)
{
- // If the child's parent is *this (must be a ruby run or generated content or anonymous block),
- // just use the normal remove method.
+ // If the child's parent is *this (must be a ruby run), just use the normal remove method.
if (child->parent() == this) {
- ASSERT(child->isRubyRun() || child->isBeforeContent() || child->isAfterContent() || isAnonymousRubyInlineBlock(child));
+ ASSERT(child->isRubyRun());
LayoutInline::removeChild(child);
return;
}
- // If the child's parent is an anoymous block (must be generated :before/:after content)
- // just use the block's remove method.
- if (isAnonymousRubyInlineBlock(child->parent())) {
- ASSERT(child->isBeforeContent() || child->isAfterContent());
- child->parent()->removeChild(child);
- removeChild(child->parent());
- return;
- }
// Otherwise find the containing run and remove it from there.
LayoutRubyRun* run = findRubyRunParent(child);
@@ -236,45 +141,13 @@ void LayoutRubyAsBlock::styleDidChange(StyleDifference diff, const ComputedStyle
void LayoutRubyAsBlock::addChild(LayoutObject* child, LayoutObject* beforeChild)
{
- // Insert :before and :after content before/after the LayoutRubyRun(s)
- if (child->isBeforeContent()) {
- if (child->isInline()) {
- // Add generated inline content normally
- LayoutBlockFlow::addChild(child, firstChild());
- } else {
- // Wrap non-inline content with an anonymous inline-block.
- LayoutBlock* beforeBlock = rubyBeforeBlock(this);
- if (!beforeBlock) {
- beforeBlock = createAnonymousRubyInlineBlock(this);
- LayoutBlockFlow::addChild(beforeBlock, firstChild());
- }
- beforeBlock->addChild(child);
- }
- return;
- }
- if (child->isAfterContent()) {
- if (child->isInline()) {
- // Add generated inline content normally
- LayoutBlockFlow::addChild(child);
- } else {
- // Wrap non-inline content with an anonymous inline-block.
- LayoutBlock* afterBlock = rubyAfterBlock(this);
- if (!afterBlock) {
- afterBlock = createAnonymousRubyInlineBlock(this);
- LayoutBlockFlow::addChild(afterBlock);
- }
- afterBlock->addChild(child);
- }
- return;
- }
-
// If the child is a ruby run, just add it normally.
if (child->isRubyRun()) {
LayoutBlockFlow::addChild(child, beforeChild);
return;
}
- if (beforeChild && !isAfterContent(beforeChild)) {
+ if (beforeChild) {
// insert child into run
LayoutObject* run = beforeChild;
while (run && !run->isRubyRun())
@@ -303,21 +176,12 @@ void LayoutRubyAsBlock::addChild(LayoutObject* child, LayoutObject* beforeChild)
void LayoutRubyAsBlock::removeChild(LayoutObject* child)
{
- // If the child's parent is *this (must be a ruby run or generated content or anonymous block),
- // just use the normal remove method.
+ // If the child's parent is *this (must be a ruby run), just use the normal remove method.
if (child->parent() == this) {
- ASSERT(child->isRubyRun() || child->isBeforeContent() || child->isAfterContent() || isAnonymousRubyInlineBlock(child));
+ ASSERT(child->isRubyRun());
LayoutBlockFlow::removeChild(child);
return;
}
- // If the child's parent is an anoymous block (must be generated :before/:after content)
- // just use the block's remove method.
- if (isAnonymousRubyInlineBlock(child->parent())) {
- ASSERT(child->isBeforeContent() || child->isAfterContent());
- child->parent()->removeChild(child);
- removeChild(child->parent());
- return;
- }
// Otherwise find the containing run and remove it from there.
LayoutRubyRun* run = findRubyRunParent(child);
« no previous file with comments | « LayoutTests/virtual/slimmingpaint/fast/ruby/ruby-inline-style-not-updated-with-before-after-content-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698