⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 113252 in webkit


Ignore:
Timestamp:
Apr 4, 2012, 3:41:56 PM (14 years ago)
Author:
inferno@chromium.org
Message:

Add helpers to create anonymous table parts.
https://bugs.webkit.org/show_bug.cgi?id=83116

Reviewed by Julien Chaffraix.

Source/WebCore:

The patch introduces helpers to create anonymous table parts by
introducing a new static function createAnonymousWithParentRenderer.
The function builds a new anonymous wrapper of the same type as the class,
inheriting style properties from parent and sets a display based on
argument/default values. Also we streamline the RenderBlock functions
to match this naming convention.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::createAnonymousBlockWithSameTypeAs):
(WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
(WebCore):
(WebCore::RenderBlock::createAnonymousColumnsWithParentRendererAndDisplay):
(WebCore::RenderBlock::createAnonymousColumnSpanWithParentRendererAndDisplay):

  • rendering/RenderBlock.h:

(RenderBlock):
(WebCore::RenderBlock::createAnonymousBlock):
(WebCore::RenderBlock::createAnonymousColumnsBlock):
(WebCore::RenderBlock::createAnonymousColumnSpanBlock):

  • rendering/RenderButton.cpp:

(WebCore::RenderButton::addChild):

  • rendering/RenderObject.cpp:

(WebCore::RenderObject::addChild):

  • rendering/RenderTable.cpp:

(WebCore::RenderTable::addChild):
(WebCore::RenderTable::createAnonymousWithParentRendererAndDisplay):
(WebCore):

  • rendering/RenderTable.h:

(RenderTable):

  • rendering/RenderTableCell.cpp:

(WebCore::RenderTableCell::createAnonymousWithParentRendererAndDisplay):
(WebCore):

  • rendering/RenderTableCell.h:

(RenderTableCell):

  • rendering/RenderTableRow.cpp:

(WebCore::RenderTableRow::addChild):
(WebCore::RenderTableRow::createAnonymousWithParentRendererAndDisplay):
(WebCore):

  • rendering/RenderTableRow.h:

(RenderTableRow):

  • rendering/RenderTableSection.cpp:

(WebCore::RenderTableSection::addChild):
(WebCore::RenderTableSection::createAnonymousWithParentRendererAndDisplay):
(WebCore):

  • rendering/RenderTableSection.h:

(RenderTableSection):

LayoutTests:

Rebaselining tests because we now correctly inherit the bidi override.

  • platform/chromium-mac/fast/css/bidi-override-in-anonymous-block-expected.txt:
  • platform/chromium-win/fast/css/bidi-override-in-anonymous-block-expected.txt:
Location:
trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r113251 r113252  
     12012-04-04  Abhishek Arya  <inferno@chromium.org>
     2
     3        Add helpers to create anonymous table parts.
     4        https://bugs.webkit.org/show_bug.cgi?id=83116
     5
     6        Reviewed by Julien Chaffraix.
     7
     8        Rebaselining tests because we now correctly inherit the bidi override.
     9
     10        * platform/chromium-mac/fast/css/bidi-override-in-anonymous-block-expected.txt:
     11        * platform/chromium-win/fast/css/bidi-override-in-anonymous-block-expected.txt:
     12
    1132012-04-04  Dimitri Glazkov  <dglazkov@chromium.org>
    214
  • trunk/LayoutTests/platform/chromium-mac/fast/css/bidi-override-in-anonymous-block-expected.txt

    r110189 r113252  
    226226              RenderTableCell (anonymous) at (0,0) size 24x18 [r=0 c=0 rs=1 cs=1]
    227227                RenderText {#text} at (2,0) size 22x18
    228                   text run at (2,0) width 22: "abc"
     228                  text run at (2,0) width 22 RTL override: "abc"
    229229            RenderTableRow (anonymous) at (0,18) size 24x18
    230230              RenderTableCell {DIV} at (0,18) size 24x18 [r=1 c=0 rs=1 cs=1]
     
    238238              RenderTableCell (anonymous) at (0,0) size 24x18 [r=0 c=0 rs=1 cs=1]
    239239                RenderText {#text} at (0,0) size 24x18
    240                   text run at (0,0) width 24: "opq"
     240                  text run at (0,0) width 24 RTL override: "opq"
  • trunk/LayoutTests/platform/chromium-win/fast/css/bidi-override-in-anonymous-block-expected.txt

    r103884 r113252  
    226226              RenderTableCell (anonymous) at (0,0) size 24x20 [r=0 c=0 rs=1 cs=1]
    227227                RenderText {#text} at (2,0) size 22x19
    228                   text run at (2,0) width 22: "abc"
     228                  text run at (2,0) width 22 RTL override: "abc"
    229229            RenderTableRow (anonymous) at (0,20) size 24x20
    230230              RenderTableCell {DIV} at (0,20) size 24x20 [r=1 c=0 rs=1 cs=1]
     
    238238              RenderTableCell (anonymous) at (0,0) size 24x20 [r=0 c=0 rs=1 cs=1]
    239239                RenderText {#text} at (0,0) size 24x19
    240                   text run at (0,0) width 24: "opq"
     240                  text run at (0,0) width 24 RTL override: "opq"
  • trunk/Source/WebCore/ChangeLog

    r113250 r113252  
     12012-04-04  Abhishek Arya  <inferno@chromium.org>
     2
     3        Add helpers to create anonymous table parts.
     4        https://bugs.webkit.org/show_bug.cgi?id=83116
     5
     6        Reviewed by Julien Chaffraix.
     7
     8        The patch introduces helpers to create anonymous table parts by
     9        introducing a new static function createAnonymousWithParentRenderer.
     10        The function builds a new anonymous wrapper of the same type as the class,
     11        inheriting style properties from parent and sets a display based on
     12        argument/default values. Also we streamline the RenderBlock functions
     13        to match this naming convention.
     14
     15        * rendering/RenderBlock.cpp:
     16        (WebCore::RenderBlock::createAnonymousBlockWithSameTypeAs):
     17        (WebCore::RenderBlock::createAnonymousWithParentRendererAndDisplay):
     18        (WebCore):
     19        (WebCore::RenderBlock::createAnonymousColumnsWithParentRendererAndDisplay):
     20        (WebCore::RenderBlock::createAnonymousColumnSpanWithParentRendererAndDisplay):
     21        * rendering/RenderBlock.h:
     22        (RenderBlock):
     23        (WebCore::RenderBlock::createAnonymousBlock):
     24        (WebCore::RenderBlock::createAnonymousColumnsBlock):
     25        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
     26        * rendering/RenderButton.cpp:
     27        (WebCore::RenderButton::addChild):
     28        * rendering/RenderObject.cpp:
     29        (WebCore::RenderObject::addChild):
     30        * rendering/RenderTable.cpp:
     31        (WebCore::RenderTable::addChild):
     32        (WebCore::RenderTable::createAnonymousWithParentRendererAndDisplay):
     33        (WebCore):
     34        * rendering/RenderTable.h:
     35        (RenderTable):
     36        * rendering/RenderTableCell.cpp:
     37        (WebCore::RenderTableCell::createAnonymousWithParentRendererAndDisplay):
     38        (WebCore):
     39        * rendering/RenderTableCell.h:
     40        (RenderTableCell):
     41        * rendering/RenderTableRow.cpp:
     42        (WebCore::RenderTableRow::addChild):
     43        (WebCore::RenderTableRow::createAnonymousWithParentRendererAndDisplay):
     44        (WebCore):
     45        * rendering/RenderTableRow.h:
     46        (RenderTableRow):
     47        * rendering/RenderTableSection.cpp:
     48        (WebCore::RenderTableSection::addChild):
     49        (WebCore::RenderTableSection::createAnonymousWithParentRendererAndDisplay):
     50        (WebCore):
     51        * rendering/RenderTableSection.h:
     52        (RenderTableSection):
     53
    1542012-04-04  Erik Arvidsson  <arv@chromium.org>
    255
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r112973 r113252  
    782782            // Create an anonymous table container next to our table container.
    783783            RenderBlock* parentBlock = toRenderBlock(table->parent());
    784             RenderTable* postTable = parentBlock->createAnonymousTable();
     784            RenderTable* postTable = RenderTable::createAnonymousWithParentRenderer(parentBlock);
    785785            parentBlock->children()->insertChildNode(parentBlock, postTable, table->nextSibling());
    786786           
     
    66766676}
    66776677
    6678 RenderBlock* RenderBlock::createAnonymousBlock(bool isFlexibleBox) const
    6679 {
    6680     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
    6681 
    6682     RenderBlock* newBox = 0;
    6683     if (isFlexibleBox) {
    6684         newStyle->setDisplay(BOX);
    6685         newBox = new (renderArena()) RenderDeprecatedFlexibleBox(document() /* anonymous box */);
    6686     } else {
    6687         newStyle->setDisplay(BLOCK);
    6688         newBox = new (renderArena()) RenderBlock(document() /* anonymous box */);
    6689     }
    6690 
    6691     newBox->setStyle(newStyle.release());
    6692     return newBox;
    6693 }
    6694 
    66956678RenderBlock* RenderBlock::createAnonymousBlockWithSameTypeAs(RenderBlock* otherAnonymousBlock) const
    66966679{
     
    66996682    if (otherAnonymousBlock->isAnonymousColumnSpanBlock())
    67006683        return createAnonymousColumnSpanBlock();
    6701     return createAnonymousBlock(otherAnonymousBlock->style()->display() == BOX);
    6702 }
    6703 
    6704 RenderBlock* RenderBlock::createAnonymousColumnsBlock() const
    6705 {
    6706     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
    6707     newStyle->inheritColumnPropertiesFrom(style());
    6708     newStyle->setDisplay(BLOCK);
    6709 
    6710     RenderBlock* newBox = new (renderArena()) RenderBlock(document() /* anonymous box */);
    6711     newBox->setStyle(newStyle.release());
    6712     return newBox;
    6713 }
    6714 
    6715 RenderBlock* RenderBlock::createAnonymousColumnSpanBlock() const
    6716 {
    6717     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
    6718     newStyle->setColumnSpan(ColumnSpanAll);
    6719     newStyle->setDisplay(BLOCK);
    6720 
    6721     RenderBlock* newBox = new (renderArena()) RenderBlock(document() /* anonymous box */);
    6722     newBox->setStyle(newStyle.release());
    6723     return newBox;
     6684    return createAnonymousBlock(otherAnonymousBlock->style()->display());
    67246685}
    67256686
     
    74547415}
    74557416
     7417RenderBlock* RenderBlock::createAnonymousWithParentRendererAndDisplay(const RenderObject* parent, EDisplay display)
     7418{
     7419    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     7420
     7421    // FIXME: Do we need to cover the new flex box here ?
     7422    // FIXME: Do we need to convert all our inline displays to block-type in the anonymous logic ?
     7423    RenderBlock* newBox = 0;
     7424    if (display == BOX || display == INLINE_BOX) {
     7425        newStyle->setDisplay(BOX);
     7426        newBox = new (parent->renderArena()) RenderDeprecatedFlexibleBox(parent->document() /* anonymous box */);
     7427    } else {
     7428        newStyle->setDisplay(BLOCK);
     7429        newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
     7430    }
     7431
     7432    newBox->setStyle(newStyle.release());
     7433    return newBox;
     7434}
     7435
     7436RenderBlock* RenderBlock::createAnonymousColumnsWithParentRenderer(const RenderObject* parent)
     7437{
     7438    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     7439    newStyle->inheritColumnPropertiesFrom(parent->style());
     7440    newStyle->setDisplay(BLOCK);
     7441
     7442    RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
     7443    newBox->setStyle(newStyle.release());
     7444    return newBox;
     7445}
     7446
     7447RenderBlock* RenderBlock::createAnonymousColumnSpanWithParentRenderer(const RenderObject* parent)
     7448{
     7449    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     7450    newStyle->setColumnSpan(ColumnSpanAll);
     7451    newStyle->setDisplay(BLOCK);
     7452
     7453    RenderBlock* newBox = new (parent->renderArena()) RenderBlock(parent->document() /* anonymous box */);
     7454    newBox->setStyle(newStyle.release());
     7455    return newBox;
     7456}
     7457
    74567458#ifndef NDEBUG
    74577459
  • trunk/Source/WebCore/rendering/RenderBlock.h

    r112566 r113252  
    234234    using RenderBoxModelObject::setContinuation;
    235235
    236     // This function is a convenience helper for creating an anonymous block that inherits its
    237     // style from this RenderBlock.
    238     RenderBlock* createAnonymousBlock(bool isFlexibleBox = false) const;
    239     RenderBlock* createAnonymousColumnsBlock() const;
    240     RenderBlock* createAnonymousColumnSpanBlock() const;
     236    static RenderBlock* createAnonymousWithParentRendererAndDisplay(const RenderObject*, EDisplay = BLOCK);
     237    static RenderBlock* createAnonymousColumnsWithParentRenderer(const RenderObject*);
     238    static RenderBlock* createAnonymousColumnSpanWithParentRenderer(const RenderObject*);
     239    RenderBlock* createAnonymousBlock(EDisplay display = BLOCK) const { return createAnonymousWithParentRendererAndDisplay(this, display); }
     240    RenderBlock* createAnonymousColumnsBlock() const { return createAnonymousColumnsWithParentRenderer(this); }
     241    RenderBlock* createAnonymousColumnSpanBlock() const { return createAnonymousColumnSpanWithParentRenderer(this); }
     242
    241243    RenderBlock* createAnonymousBlockWithSameTypeAs(RenderBlock* otherAnonymousBlock) const;
    242244   
  • trunk/Source/WebCore/rendering/RenderButton.cpp

    r109689 r113252  
    5050        // Create an anonymous block.
    5151        ASSERT(!firstChild());
    52         bool isFlexibleBox = style()->display() == BOX || style()->display() == INLINE_BOX;
    53         m_inner = createAnonymousBlock(isFlexibleBox);
     52        m_inner = createAnonymousBlock(style()->display());
    5453        setupInnerStyle(m_inner->style());
    5554        RenderDeprecatedFlexibleBox::addChild(m_inner);
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r112765 r113252  
    270270}
    271271
    272 RenderTable* RenderObject::createAnonymousTable() const
    273 {
    274     RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(style());
    275     newStyle->setDisplay(TABLE);
    276 
    277     RenderTable* table = new (renderArena()) RenderTable(document() /* is anonymous */);
    278     table->setStyle(newStyle.release());
    279     return table;
    280 }
    281 
    282272void RenderObject::addChild(RenderObject* newChild, RenderObject* beforeChild)
    283273{
     
    324314            table = toRenderTable(afterChild);
    325315        else {
    326             table = createAnonymousTable();
     316            table = RenderTable::createAnonymousWithParentRenderer(this);
    327317            addChild(table, beforeChild);
    328318        }
  • trunk/Source/WebCore/rendering/RenderObject.h

    r112453 r113252  
    226226    // normal flow object.
    227227    void handleDynamicFloatPositionChange();
    228    
    229     RenderTable* createAnonymousTable() const;
    230228   
    231229    // RenderObject tree manipulation
  • trunk/Source/WebCore/rendering/RenderTable.cpp

    r113222 r113252  
    193193    if (beforeChild && !beforeChild->isTableSection() && beforeChild->style()->display() != TABLE_CAPTION && beforeChild->style()->display() != TABLE_COLUMN_GROUP)
    194194        beforeChild = 0;
    195     RenderTableSection* section = new (renderArena()) RenderTableSection(document() /* anonymous */);
    196     RefPtr<RenderStyle> newStyle = RenderStyle::create();
    197     newStyle->inheritFrom(style());
    198     newStyle->setDisplay(TABLE_ROW_GROUP);
    199     section->setStyle(newStyle.release());
     195
     196    RenderTableSection* section = RenderTableSection::createAnonymousWithParentRenderer(this);
    200197    addChild(section, beforeChild);
    201198    section->addChild(child);
     
    12811278}
    12821279
    1283 }
     1280RenderTable* RenderTable::createAnonymousWithParentRenderer(const RenderObject* parent)
     1281{
     1282    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     1283    newStyle->setDisplay(TABLE);
     1284
     1285    RenderTable* newTable = new (parent->renderArena()) RenderTable(parent->document() /* is anonymous */);
     1286    newTable->setStyle(newStyle.release());
     1287    return newTable;
     1288}
     1289
     1290}
  • trunk/Source/WebCore/rendering/RenderTable.h

    r112752 r113252  
    212212    }
    213213
     214    static RenderTable* createAnonymousWithParentRenderer(const RenderObject*);
     215
    214216protected:
    215217    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
  • trunk/Source/WebCore/rendering/RenderTableCell.cpp

    r112752 r113252  
    11181118}
    11191119
     1120RenderTableCell* RenderTableCell::createAnonymousWithParentRenderer(const RenderObject* parent)
     1121{
     1122    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     1123    newStyle->setDisplay(TABLE_CELL);
     1124
     1125    RenderTableCell* newCell = new (parent->renderArena()) RenderTableCell(parent->document() /* is anonymous */);
     1126    newCell->setStyle(newStyle.release());
     1127    return newCell;
     1128}
     1129
    11201130} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderTableCell.h

    r109818 r113252  
    139139    void setCellWidthChanged(bool b = true) { m_cellWidthChanged = b; }
    140140
     141    static RenderTableCell* createAnonymousWithParentRenderer(const RenderObject*);
     142
    141143protected:
    142144    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
  • trunk/Source/WebCore/rendering/RenderTableRow.cpp

    r112425 r113252  
    114114        }
    115115
    116         RenderTableCell* cell = new (renderArena()) RenderTableCell(document() /* anonymous object */);
    117         RefPtr<RenderStyle> newStyle = RenderStyle::create();
    118         newStyle->inheritFrom(style());
    119         newStyle->setDisplay(TABLE_CELL);
    120         cell->setStyle(newStyle.release());
     116        RenderTableCell* cell = RenderTableCell::createAnonymousWithParentRenderer(this);
    121117        addChild(cell, beforeChild);
    122118        cell->addChild(child);
     
    250246}
    251247
     248RenderTableRow* RenderTableRow::createAnonymousWithParentRenderer(const RenderObject* parent)
     249{
     250    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     251    newStyle->setDisplay(TABLE_ROW);
     252
     253    RenderTableRow* newRow = new (parent->renderArena()) RenderTableRow(parent->document() /* is anonymous */);
     254    newRow->setStyle(newStyle.release());
     255    return newRow;
     256}
     257
    252258} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderTableRow.h

    r110732 r113252  
    4242    void updateBeforeAndAfterContent();
    4343    void paintOutlineForRowIfNeeded(PaintInfo&, const LayoutPoint&);
     44
     45    static RenderTableRow* createAnonymousWithParentRenderer(const RenderObject*);
    4446
    4547private:
  • trunk/Source/WebCore/rendering/RenderTableSection.cpp

    r113162 r113252  
    162162        }
    163163
    164         RenderObject* row = new (renderArena()) RenderTableRow(document() /* anonymous table row */);
    165         RefPtr<RenderStyle> newStyle = RenderStyle::create();
    166         newStyle->inheritFrom(style());
    167         newStyle->setDisplay(TABLE_ROW);
    168         row->setStyle(newStyle.release());
     164        RenderObject* row = RenderTableRow::createAnonymousWithParentRenderer(this);
    169165        addChild(row, beforeChild);
    170166        row->addChild(child);
     
    14181414}
    14191415
     1416RenderTableSection* RenderTableSection::createAnonymousWithParentRenderer(const RenderObject* parent)
     1417{
     1418    RefPtr<RenderStyle> newStyle = RenderStyle::createAnonymousStyle(parent->style());
     1419    newStyle->setDisplay(TABLE_ROW_GROUP);
     1420
     1421    RenderTableSection* newSection = new (parent->renderArena()) RenderTableSection(parent->document() /* is anonymous */);
     1422    newSection->setStyle(newStyle.release());
     1423    return newSection;
     1424}
     1425
    14201426} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderTableSection.h

    r113162 r113252  
    163163    int distributeExtraLogicalHeightToRows(int extraLogicalHeight);
    164164
     165    static RenderTableSection* createAnonymousWithParentRenderer(const RenderObject*);
     166
    165167protected:
    166168    virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle);
Note: See TracChangeset for help on using the changeset viewer.