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

Side by Side Diff: Source/WebCore/rendering/RenderBlock.cpp

Issue 10155016: Merge 112973 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1025/
Patch Set: Created 8 years, 8 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 unified diff | Download patch
« no previous file with comments | « LayoutTests/fast/runin/select-runin-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2007 David Smith (catfish.man@gmail.com) 4 * (C) 2007 David Smith (catfish.man@gmail.com)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
6 * Copyright (C) Research In Motion Limited 2010. All rights reserved. 6 * Copyright (C) Research In Motion Limited 2010. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 1758 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 return false; 1769 return false;
1770 } 1770 }
1771 1771
1772 bool RenderBlock::handleRunInChild(RenderBox* child) 1772 bool RenderBlock::handleRunInChild(RenderBox* child)
1773 { 1773 {
1774 // See if we have a run-in element with inline children. If the 1774 // See if we have a run-in element with inline children. If the
1775 // children aren't inline, then just treat the run-in as a normal 1775 // children aren't inline, then just treat the run-in as a normal
1776 // block. 1776 // block.
1777 if (!child->isRunIn() || !child->childrenInline()) 1777 if (!child->isRunIn() || !child->childrenInline())
1778 return false; 1778 return false;
1779
1779 // FIXME: We don't handle non-block elements with run-in for now. 1780 // FIXME: We don't handle non-block elements with run-in for now.
1780 if (!child->isRenderBlock()) 1781 if (!child->isRenderBlock())
1781 return false; 1782 return false;
1783
1782 // Run-in child shouldn't intrude into the sibling block if it is part of a 1784 // Run-in child shouldn't intrude into the sibling block if it is part of a
1783 // continuation chain. In that case, treat it as a normal block. 1785 // continuation chain. In that case, treat it as a normal block.
1784 if (child->isElementContinuation() || child->virtualContinuation()) 1786 if (child->isElementContinuation() || child->virtualContinuation())
1785 return false; 1787 return false;
1786 1788
1789 // Check if this node is allowed to run-in. E.g. <select> expects its render er to
1790 // be a RenderListBox or RenderMenuList, and hence cannot be a RenderInline run-in.
1791 Node* runInNode = child->node();
1792 if (runInNode && runInNode->hasTagName(selectTag))
1793 return false;
1794
1787 RenderBlock* blockRunIn = toRenderBlock(child); 1795 RenderBlock* blockRunIn = toRenderBlock(child);
1788 RenderObject* curr = blockRunIn->nextSibling(); 1796 RenderObject* curr = blockRunIn->nextSibling();
1789 if (!curr || !curr->isRenderBlock() || !curr->childrenInline() || curr->isRu nIn() || curr->isAnonymous() || curr->isFloatingOrPositioned()) 1797 if (!curr || !curr->isRenderBlock() || !curr->childrenInline() || curr->isRu nIn() || curr->isAnonymous() || curr->isFloatingOrPositioned())
1790 return false; 1798 return false;
1791 1799
1792 RenderBlock* currBlock = toRenderBlock(curr); 1800 RenderBlock* currBlock = toRenderBlock(curr);
1793 1801
1794 // First we destroy any :before/:after content. It will be regenerated by th e new inline. 1802 // First we destroy any :before/:after content. It will be regenerated by th e new inline.
1795 // Exception is if the run-in itself is generated. 1803 // Exception is if the run-in itself is generated.
1796 if (child->style()->styleType() != BEFORE && child->style()->styleType() != AFTER) { 1804 if (child->style()->styleType() != BEFORE && child->style()->styleType() != AFTER) {
1797 RenderObject* generatedContent; 1805 RenderObject* generatedContent;
1798 if (child->getCachedPseudoStyle(BEFORE) && (generatedContent = child->be forePseudoElementRenderer())) 1806 if (child->getCachedPseudoStyle(BEFORE) && (generatedContent = child->be forePseudoElementRenderer()))
1799 generatedContent->destroy(); 1807 generatedContent->destroy();
1800 if (child->getCachedPseudoStyle(AFTER) && (generatedContent = child->aft erPseudoElementRenderer())) 1808 if (child->getCachedPseudoStyle(AFTER) && (generatedContent = child->aft erPseudoElementRenderer()))
1801 generatedContent->destroy(); 1809 generatedContent->destroy();
1802 } 1810 }
1803 1811
1804 // Remove the old child. 1812 // Remove the old child.
1805 children()->removeChildNode(this, blockRunIn); 1813 children()->removeChildNode(this, blockRunIn);
1806 1814
1807 // Create an inline. 1815 // Create an inline.
1808 Node* runInNode = blockRunIn->node();
1809 RenderInline* inlineRunIn = new (renderArena()) RenderInline(runInNode ? run InNode : document()); 1816 RenderInline* inlineRunIn = new (renderArena()) RenderInline(runInNode ? run InNode : document());
1810 inlineRunIn->setStyle(blockRunIn->style()); 1817 inlineRunIn->setStyle(blockRunIn->style());
1811 1818
1812 // Move the nodes from the old child to the new child 1819 // Move the nodes from the old child to the new child
1813 for (RenderObject* runInChild = blockRunIn->firstChild(); runInChild;) { 1820 for (RenderObject* runInChild = blockRunIn->firstChild(); runInChild;) {
1814 RenderObject* nextSibling = runInChild->nextSibling(); 1821 RenderObject* nextSibling = runInChild->nextSibling();
1815 blockRunIn->children()->removeChildNode(blockRunIn, runInChild); 1822 blockRunIn->children()->removeChildNode(blockRunIn, runInChild);
1816 inlineRunIn->addChild(runInChild); // Use addChild instead of appendChil dNode since it handles correct placement of the children relative to :after-gene rated content. 1823 inlineRunIn->addChild(runInChild); // Use addChild instead of appendChil dNode since it handles correct placement of the children relative to :after-gene rated content.
1817 runInChild = nextSibling; 1824 runInChild = nextSibling;
1818 } 1825 }
(...skipping 5446 matching lines...) Expand 10 before | Expand all | Expand 10 after
7265 } 7272 }
7266 7273
7267 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject) 7274 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject)
7268 { 7275 {
7269 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); 7276 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY());
7270 } 7277 }
7271 7278
7272 #endif 7279 #endif
7273 7280
7274 } // namespace WebCore 7281 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/runin/select-runin-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698