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

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

Issue 10170019: Merge 112935 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1084/
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/block/float/intruding-float-not-removed-from-descendant-crash-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 4110 matching lines...) Expand 10 before | Expand all | Expand 10 after
4121 } 4121 }
4122 4122
4123 void RenderBlock::clearFloats(BlockLayoutPass layoutPass) 4123 void RenderBlock::clearFloats(BlockLayoutPass layoutPass)
4124 { 4124 {
4125 if (m_floatingObjects) 4125 if (m_floatingObjects)
4126 m_floatingObjects->setHorizontalWritingMode(isHorizontalWritingMode()); 4126 m_floatingObjects->setHorizontalWritingMode(isHorizontalWritingMode());
4127 4127
4128 // Clear our positioned floats boolean. 4128 // Clear our positioned floats boolean.
4129 m_hasPositionedFloats = false; 4129 m_hasPositionedFloats = false;
4130 4130
4131 HashSet<RenderBox*> oldIntrudingFloatSet;
4132 if (!childrenInline() && m_floatingObjects) {
4133 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
4134 FloatingObjectSetIterator end = floatingObjectSet.end();
4135 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end ; ++it) {
4136 FloatingObject* floatingObject = *it;
4137 if (!floatingObject->isDescendant())
Hironori Bono 2012/04/23 00:29:15 It seems the M19 branch does not have RenderBlock:
4138 oldIntrudingFloatSet.add(floatingObject->m_renderer);
4139 }
4140 }
4141
4131 // Inline blocks are covered by the isReplaced() check in the avoidFloats me thod. 4142 // Inline blocks are covered by the isReplaced() check in the avoidFloats me thod.
4132 if (avoidsFloats() || isRoot() || isRenderView() || isFloatingOrPositioned() || isTableCell()) { 4143 if (avoidsFloats() || isRoot() || isRenderView() || isFloatingOrPositioned() || isTableCell()) {
4133 if (m_floatingObjects) { 4144 if (m_floatingObjects) {
4134 deleteAllValues(m_floatingObjects->set()); 4145 deleteAllValues(m_floatingObjects->set());
4135 m_floatingObjects->clear(); 4146 m_floatingObjects->clear();
4136 } 4147 }
4137 if (layoutPass == PositionedFloatLayoutPass) 4148 if (layoutPass == PositionedFloatLayoutPass)
4138 addPositionedFloats(); 4149 addPositionedFloats();
4150 if (!oldIntrudingFloatSet.isEmpty())
4151 markAllDescendantsWithFloatsForLayout();
4139 return; 4152 return;
4140 } 4153 }
4141 4154
4142 typedef HashMap<RenderObject*, FloatingObject*> RendererToFloatInfoMap; 4155 typedef HashMap<RenderObject*, FloatingObject*> RendererToFloatInfoMap;
4143 RendererToFloatInfoMap floatMap; 4156 RendererToFloatInfoMap floatMap;
4144 4157
4145 if (m_floatingObjects) { 4158 if (m_floatingObjects) {
4146 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); 4159 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
4147 if (childrenInline()) { 4160 if (childrenInline()) {
4148 FloatingObjectSetIterator end = floatingObjectSet.end(); 4161 FloatingObjectSetIterator end = floatingObjectSet.end();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
4239 for (RendererToFloatInfoMap::iterator it = floatMap.begin(); it != end; ++it) { 4252 for (RendererToFloatInfoMap::iterator it = floatMap.begin(); it != end; ++it) {
4240 FloatingObject* floatingObject = (*it).second; 4253 FloatingObject* floatingObject = (*it).second;
4241 if (!floatingObject->m_isDescendant) { 4254 if (!floatingObject->m_isDescendant) {
4242 changeLogicalTop = 0; 4255 changeLogicalTop = 0;
4243 changeLogicalBottom = max(changeLogicalBottom, logicalBottomForF loat(floatingObject)); 4256 changeLogicalBottom = max(changeLogicalBottom, logicalBottomForF loat(floatingObject));
4244 } 4257 }
4245 } 4258 }
4246 deleteAllValues(floatMap); 4259 deleteAllValues(floatMap);
4247 4260
4248 markLinesDirtyInBlockRange(changeLogicalTop, changeLogicalBottom); 4261 markLinesDirtyInBlockRange(changeLogicalTop, changeLogicalBottom);
4262 } else if (!oldIntrudingFloatSet.isEmpty()) {
4263 // If there are previously intruding floats that no longer intrude, then children with floats
4264 // should also get layout because they might need their floating object lists cleared.
4265 const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
4266 FloatingObjectSetIterator end = floatingObjectSet.end();
4267 for (FloatingObjectSetIterator it = floatingObjectSet.begin(); it != end ; ++it)
4268 oldIntrudingFloatSet.remove((*it)->m_renderer);
4269 if (!oldIntrudingFloatSet.isEmpty())
4270 markAllDescendantsWithFloatsForLayout();
4249 } 4271 }
4250 } 4272 }
4251 4273
4252 LayoutUnit RenderBlock::addOverhangingFloats(RenderBlock* child, bool makeChildP aintOtherFloats) 4274 LayoutUnit RenderBlock::addOverhangingFloats(RenderBlock* child, bool makeChildP aintOtherFloats)
4253 { 4275 {
4254 // Prevent floats from being added to the canvas by the root element, e.g., <html>. 4276 // Prevent floats from being added to the canvas by the root element, e.g., <html>.
4255 if (child->hasOverflowClip() || !child->containsFloats() || child->isRoot() || child->hasColumns() || child->isWritingModeRoot()) 4277 if (child->hasOverflowClip() || !child->containsFloats() || child->isRoot() || child->hasColumns() || child->isWritingModeRoot())
4256 return 0; 4278 return 0;
4257 4279
4258 LayoutUnit childLogicalTop = child->logicalTop(); 4280 LayoutUnit childLogicalTop = child->logicalTop();
(...skipping 3155 matching lines...) Expand 10 before | Expand all | Expand 10 after
7414 } 7436 }
7415 7437
7416 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject) 7438 String ValueToString<RenderBlock::FloatingObject*>::string(const RenderBlock::Fl oatingObject* floatingObject)
7417 { 7439 {
7418 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY()); 7440 return String::format("%p (%dx%d %dx%d)", floatingObject, floatingObject->x( ), floatingObject->y(), floatingObject->maxX(), floatingObject->maxY());
7419 } 7441 }
7420 7442
7421 #endif 7443 #endif
7422 7444
7423 } // namespace WebCore 7445 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/block/float/intruding-float-not-removed-from-descendant-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698