summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictoria Lease <violets@google.com>2012-05-17 08:46:36 -0700
committerVictoria Lease <violets@google.com>2012-05-18 09:46:38 -0700
commit05c44efdceb09e0a5066c1f2ae06a5f19fd7fc6c (patch)
tree8395d57a2e783b3de40fe03f26badad289e3eb45
parent7b17ee7dc951f404d93a458a61884d5c1bf6e40f (diff)
downloadexternal_webkit-05c44efdceb09e0a5066c1f2ae06a5f19fd7fc6c.zip
external_webkit-05c44efdceb09e0a5066c1f2ae06a5f19fd7fc6c.tar.gz
external_webkit-05c44efdceb09e0a5066c1f2ae06a5f19fd7fc6c.tar.bz2
Cherrypick WebKit r94543.
http://trac.webkit.org/changeset/94543 isBeforeOrAfterContent() was already pulled in from r94543 as a part of I02da7a9f891a6eec394398529f64b0992cbfce70, but we needed the rest of the patch to address our ruby text alignment issues. Bug: 6105670 Change-Id: Iad4d6308ab053488abd118eee83058cfc81e22e8
-rw-r--r--Source/WebCore/rendering/RenderObject.cpp17
-rw-r--r--Source/WebCore/rendering/RenderObject.h2
-rw-r--r--Source/WebCore/rendering/RenderRuby.cpp12
-rw-r--r--Source/WebCore/rendering/RenderRuby.h6
-rw-r--r--Source/WebCore/rendering/RenderTable.cpp1
-rw-r--r--Source/WebCore/rendering/RenderTableRow.cpp6
-rw-r--r--Source/WebCore/rendering/RenderTableSection.cpp10
-rw-r--r--Source/WebCore/rendering/RenderTableSection.h3
8 files changed, 52 insertions, 5 deletions
diff --git a/Source/WebCore/rendering/RenderObject.cpp b/Source/WebCore/rendering/RenderObject.cpp
index f37753e..012427c 100644
--- a/Source/WebCore/rendering/RenderObject.cpp
+++ b/Source/WebCore/rendering/RenderObject.cpp
@@ -1787,6 +1787,23 @@ void RenderObject::styleDidChange(StyleDifference diff, const RenderStyle* oldSt
}
}
+void RenderObject::propagateStyleToAnonymousChildren()
+{
+ for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
+ if (child->isAnonymous() && !child->isBeforeOrAfterContent()) {
+ RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
+ if (style()->specifiesColumns()) {
+ if (child->style()->specifiesColumns())
+ newStyle->inheritColumnPropertiesFrom(style());
+ if (child->style()->columnSpan())
+ newStyle->setColumnSpan(true);
+ }
+ newStyle->setDisplay(child->style()->display());
+ child->setStyle(newStyle.release());
+ }
+ }
+}
+
void RenderObject::updateFillImages(const FillLayer* oldLayers, const FillLayer* newLayers)
{
// Optimize the common case
diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h
index f5fe562..18086c9 100644
--- a/Source/WebCore/rendering/RenderObject.h
+++ b/Source/WebCore/rendering/RenderObject.h
@@ -315,6 +315,7 @@ public:
inline bool isBeforeOrAfterContent() const;
static inline bool isBeforeContent(const RenderObject* obj) { return obj && obj->isBeforeContent(); }
static inline bool isAfterContent(const RenderObject* obj) { return obj && obj->isAfterContent(); }
+ static inline bool isBeforeOrAfterContent(const RenderObject* obj) { return obj && obj->isBeforeOrAfterContent(); }
bool childrenInline() const { return m_childrenInline; }
void setChildrenInline(bool b = true) { m_childrenInline = b; }
@@ -777,6 +778,7 @@ protected:
virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle);
// Overrides should call the superclass at the start
virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+ void propagateStyleToAnonymousChildren();
void drawLineForBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, BoxSide,
Color, EBorderStyle, int adjbw1, int adjbw2, bool antialias = false);
diff --git a/Source/WebCore/rendering/RenderRuby.cpp b/Source/WebCore/rendering/RenderRuby.cpp
index e0137de..41604d6 100644
--- a/Source/WebCore/rendering/RenderRuby.cpp
+++ b/Source/WebCore/rendering/RenderRuby.cpp
@@ -119,6 +119,12 @@ RenderRubyAsInline::~RenderRubyAsInline()
{
}
+void RenderRubyAsInline::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ RenderInline::styleDidChange(diff, oldStyle);
+ propagateStyleToAnonymousChildren();
+}
+
void RenderRubyAsInline::addChild(RenderObject* child, RenderObject* beforeChild)
{
// Insert :before and :after content before/after the RenderRubyRun(s)
@@ -220,6 +226,12 @@ RenderRubyAsBlock::~RenderRubyAsBlock()
{
}
+void RenderRubyAsBlock::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ RenderBlock::styleDidChange(diff, oldStyle);
+ propagateStyleToAnonymousChildren();
+}
+
void RenderRubyAsBlock::addChild(RenderObject* child, RenderObject* beforeChild)
{
// Insert :before and :after content before/after the RenderRubyRun(s)
diff --git a/Source/WebCore/rendering/RenderRuby.h b/Source/WebCore/rendering/RenderRuby.h
index 24ac0db..2ab964c 100644
--- a/Source/WebCore/rendering/RenderRuby.h
+++ b/Source/WebCore/rendering/RenderRuby.h
@@ -59,6 +59,9 @@ public:
virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
virtual void removeChild(RenderObject* child);
+protected:
+ virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+
private:
virtual bool isRuby() const { return true; }
virtual const char* renderName() const { return "RenderRuby (inline)"; }
@@ -75,6 +78,9 @@ public:
virtual void addChild(RenderObject* child, RenderObject* beforeChild = 0);
virtual void removeChild(RenderObject* child);
+protected:
+ virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+
private:
virtual bool isRuby() const { return true; }
virtual const char* renderName() const { return "RenderRuby (block)"; }
diff --git a/Source/WebCore/rendering/RenderTable.cpp b/Source/WebCore/rendering/RenderTable.cpp
index e9db5ad..072519e 100644
--- a/Source/WebCore/rendering/RenderTable.cpp
+++ b/Source/WebCore/rendering/RenderTable.cpp
@@ -79,6 +79,7 @@ RenderTable::~RenderTable()
void RenderTable::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderBlock::styleDidChange(diff, oldStyle);
+ propagateStyleToAnonymousChildren();
ETableLayout oldTableLayout = oldStyle ? oldStyle->tableLayout() : TAUTO;
diff --git a/Source/WebCore/rendering/RenderTableRow.cpp b/Source/WebCore/rendering/RenderTableRow.cpp
index 2edcfc4..686bc3a 100644
--- a/Source/WebCore/rendering/RenderTableRow.cpp
+++ b/Source/WebCore/rendering/RenderTableRow.cpp
@@ -74,10 +74,10 @@ void RenderTableRow::updateBeforeAndAfterContent()
void RenderTableRow::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderBox::styleDidChange(diff, oldStyle);
+ propagateStyleToAnonymousChildren();
if (parent())
updateBeforeAndAfterContent();
-
}
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild)
@@ -90,7 +90,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild)
RenderObject* last = beforeChild;
if (!last)
last = lastChild();
- if (last && last->isAnonymous() && last->isTableCell()) {
+ if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) {
if (beforeChild == last)
beforeChild = last->firstChild();
last->addChild(child, beforeChild);
@@ -98,7 +98,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild)
}
// If beforeChild is inside an anonymous cell, insert into the cell.
- if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous()) {
+ if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) {
last->parent()->addChild(child, beforeChild);
return;
}
diff --git a/Source/WebCore/rendering/RenderTableSection.cpp b/Source/WebCore/rendering/RenderTableSection.cpp
index 06d326f..daa0a92 100644
--- a/Source/WebCore/rendering/RenderTableSection.cpp
+++ b/Source/WebCore/rendering/RenderTableSection.cpp
@@ -78,6 +78,12 @@ RenderTableSection::~RenderTableSection()
clearGrid();
}
+void RenderTableSection::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
+{
+ RenderBox::styleDidChange(diff, oldStyle);
+ propagateStyleToAnonymousChildren();
+}
+
void RenderTableSection::destroy()
{
RenderTable* recalcTable = table();
@@ -100,7 +106,7 @@ void RenderTableSection::addChild(RenderObject* child, RenderObject* beforeChild
RenderObject* last = beforeChild;
if (!last)
last = lastChild();
- if (last && last->isAnonymous()) {
+ if (last && last->isAnonymous() && !last->isBeforeOrAfterContent()) {
if (beforeChild == last)
beforeChild = last->firstChild();
last->addChild(child, beforeChild);
@@ -112,7 +118,7 @@ void RenderTableSection::addChild(RenderObject* child, RenderObject* beforeChild
RenderObject* lastBox = last;
while (lastBox && lastBox->parent()->isAnonymous() && !lastBox->isTableRow())
lastBox = lastBox->parent();
- if (lastBox && lastBox->isAnonymous()) {
+ if (lastBox && lastBox->isAnonymous() && !lastBox->isBeforeOrAfterContent()) {
lastBox->addChild(child, beforeChild);
return;
}
diff --git a/Source/WebCore/rendering/RenderTableSection.h b/Source/WebCore/rendering/RenderTableSection.h
index cc969e8..db6edc2 100644
--- a/Source/WebCore/rendering/RenderTableSection.h
+++ b/Source/WebCore/rendering/RenderTableSection.h
@@ -118,6 +118,9 @@ public:
int getBaseline(int row) { return m_grid[row].baseline; }
+protected:
+ virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
+
private:
virtual RenderObjectChildList* virtualChildren() { return children(); }
virtual const RenderObjectChildList* virtualChildren() const { return children(); }