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

Side by Side Diff: Source/core/rendering/shapes/ShapeOutsideInfo.cpp

Issue 635533003: Don't delete nodes in the float interval tree while traversing it. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Added square.png and another test Created 6 years, 2 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above 8 * 1. Redistributions of source code must retain the above
9 * copyright notice, this list of conditions and the following 9 * copyright notice, this list of conditions and the following
10 * disclaimer. 10 * disclaimer.
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 RefPtr<Image> image = styleImage->image(const_cast<RenderBox*>(&m_renderer), imageSize); 135 RefPtr<Image> image = styleImage->image(const_cast<RenderBox*>(&m_renderer), imageSize);
136 136
137 return Shape::createRasterShape(image.get(), shapeImageThreshold, imageRect, marginRect, writingMode, margin); 137 return Shape::createRasterShape(image.get(), shapeImageThreshold, imageRect, marginRect, writingMode, margin);
138 } 138 }
139 139
140 const Shape& ShapeOutsideInfo::computedShape() const 140 const Shape& ShapeOutsideInfo::computedShape() const
141 { 141 {
142 if (Shape* shape = m_shape.get()) 142 if (Shape* shape = m_shape.get())
143 return *shape; 143 return *shape;
144 144
145 m_computingShape = true;
Julien - ping for review 2014/10/08 18:13:27 TemporaryChange<bool> isInComputingShape(m_computi
145 const RenderStyle& style = *m_renderer.style(); 146 const RenderStyle& style = *m_renderer.style();
146 ASSERT(m_renderer.containingBlock()); 147 ASSERT(m_renderer.containingBlock());
147 const RenderStyle& containingBlockStyle = *m_renderer.containingBlock()->sty le(); 148 const RenderStyle& containingBlockStyle = *m_renderer.containingBlock()->sty le();
148 149
149 WritingMode writingMode = containingBlockStyle.writingMode(); 150 WritingMode writingMode = containingBlockStyle.writingMode();
150 LayoutUnit maximumValue = m_renderer.containingBlock() ? m_renderer.containi ngBlock()->contentWidth() : LayoutUnit(); 151 LayoutUnit maximumValue = m_renderer.containingBlock() ? m_renderer.containi ngBlock()->contentWidth() : LayoutUnit();
151 float margin = floatValueForLength(m_renderer.style()->shapeMargin(), maximu mValue.toFloat()); 152 float margin = floatValueForLength(m_renderer.style()->shapeMargin(), maximu mValue.toFloat());
152 153
153 float shapeImageThreshold = style.shapeImageThreshold(); 154 float shapeImageThreshold = style.shapeImageThreshold();
154 ASSERT(style.shapeOutside()); 155 ASSERT(style.shapeOutside());
155 const ShapeValue& shapeValue = *style.shapeOutside(); 156 const ShapeValue& shapeValue = *style.shapeOutside();
156 157
157 switch (shapeValue.type()) { 158 switch (shapeValue.type()) {
158 case ShapeValue::Shape: 159 case ShapeValue::Shape:
159 ASSERT(shapeValue.shape()); 160 ASSERT(shapeValue.shape());
160 m_shape = Shape::createShape(shapeValue.shape(), m_referenceBoxLogicalSi ze, writingMode, margin); 161 m_shape = Shape::createShape(shapeValue.shape(), m_referenceBoxLogicalSi ze, writingMode, margin);
161 break; 162 break;
162 case ShapeValue::Image: 163 case ShapeValue::Image:
163 ASSERT(shapeValue.isImageValid()); 164 ASSERT(shapeValue.isImageValid());
164 m_shape = createShapeForImage(shapeValue.image(), shapeImageThreshold, w ritingMode, margin); 165 m_shape = createShapeForImage(shapeValue.image(), shapeImageThreshold, w ritingMode, margin);
165 break; 166 break;
166 case ShapeValue::Box: { 167 case ShapeValue::Box: {
167 const RoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect(Layo utPoint(), m_referenceBoxLogicalSize), m_renderer.view()); 168 const RoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect(Layo utPoint(), m_referenceBoxLogicalSize), m_renderer.view());
168 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin); 169 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin);
169 break; 170 break;
170 } 171 }
171 } 172 }
172 173
174 m_computingShape = false;
173 ASSERT(m_shape); 175 ASSERT(m_shape);
174 return *m_shape; 176 return *m_shape;
175 } 177 }
176 178
177 inline LayoutUnit borderBeforeInWritingMode(const RenderBox& renderer, WritingMo de writingMode) 179 inline LayoutUnit borderBeforeInWritingMode(const RenderBox& renderer, WritingMo de writingMode)
178 { 180 {
179 switch (writingMode) { 181 switch (writingMode) {
180 case TopToBottomWritingMode: return renderer.borderTop(); 182 case TopToBottomWritingMode: return renderer.borderTop();
181 case BottomToTopWritingMode: return renderer.borderBottom(); 183 case BottomToTopWritingMode: return renderer.borderBottom();
182 case LeftToRightWritingMode: return renderer.borderLeft(); 184 case LeftToRightWritingMode: return renderer.borderLeft();
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 } 341 }
340 342
341 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const 343 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const
342 { 344 {
343 if (!m_renderer.style()->isHorizontalWritingMode()) 345 if (!m_renderer.style()->isHorizontalWritingMode())
344 return size.transposedSize(); 346 return size.transposedSize();
345 return size; 347 return size;
346 } 348 }
347 349
348 } // namespace blink 350 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698