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

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

Issue 926193003: Move rendering/RenderBox to layout/LayoutBox. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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 14 matching lines...) Expand all
25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE. 27 * SUCH DAMAGE.
28 */ 28 */
29 29
30 #include "config.h" 30 #include "config.h"
31 #include "core/layout/shapes/ShapeOutsideInfo.h" 31 #include "core/layout/shapes/ShapeOutsideInfo.h"
32 32
33 #include "core/inspector/ConsoleMessage.h" 33 #include "core/inspector/ConsoleMessage.h"
34 #include "core/layout/FloatingObjects.h" 34 #include "core/layout/FloatingObjects.h"
35 #include "core/layout/LayoutBox.h"
35 #include "core/layout/LayoutImage.h" 36 #include "core/layout/LayoutImage.h"
36 #include "core/rendering/RenderBlockFlow.h" 37 #include "core/rendering/RenderBlockFlow.h"
37 #include "core/rendering/RenderBox.h"
38 #include "platform/LengthFunctions.h" 38 #include "platform/LengthFunctions.h"
39 #include "public/platform/Platform.h" 39 #include "public/platform/Platform.h"
40 40
41 namespace blink { 41 namespace blink {
42 42
43 CSSBoxType referenceBox(const ShapeValue& shapeValue) 43 CSSBoxType referenceBox(const ShapeValue& shapeValue)
44 { 44 {
45 if (shapeValue.cssBox() == BoxMissing) 45 if (shapeValue.cssBox() == BoxMissing)
46 return MarginBox; 46 return MarginBox;
47 return shapeValue.cssBox(); 47 return shapeValue.cssBox();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 if (imageResource.isAccessAllowed(&document, document.securityOrigin())) 92 if (imageResource.isAccessAllowed(&document, document.securityOrigin()))
93 return true; 93 return true;
94 94
95 const KURL& url = imageResource.url(); 95 const KURL& url = imageResource.url();
96 String urlString = url.isNull() ? "''" : url.elidedString(); 96 String urlString = url.isNull() ? "''" : url.elidedString();
97 document.addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, Err orMessageLevel, "Unsafe attempt to load URL " + urlString + ".")); 97 document.addConsoleMessage(ConsoleMessage::create(SecurityMessageSource, Err orMessageLevel, "Unsafe attempt to load URL " + urlString + "."));
98 98
99 return false; 99 return false;
100 } 100 }
101 101
102 static LayoutRect getShapeImageMarginRect(const RenderBox& renderBox, const Layo utSize& referenceBoxLogicalSize) 102 static LayoutRect getShapeImageMarginRect(const LayoutBox& layoutBox, const Layo utSize& referenceBoxLogicalSize)
103 { 103 {
104 LayoutPoint marginBoxOrigin(-renderBox.marginLogicalLeft() - renderBox.borde rAndPaddingLogicalLeft(), -renderBox.marginBefore() - renderBox.borderBefore() - renderBox.paddingBefore()); 104 LayoutPoint marginBoxOrigin(-layoutBox.marginLogicalLeft() - layoutBox.borde rAndPaddingLogicalLeft(), -layoutBox.marginBefore() - layoutBox.borderBefore() - layoutBox.paddingBefore());
105 LayoutSize marginBoxSizeDelta(renderBox.marginLogicalWidth() + renderBox.bor derAndPaddingLogicalWidth(), renderBox.marginLogicalHeight() + renderBox.borderA ndPaddingLogicalHeight()); 105 LayoutSize marginBoxSizeDelta(layoutBox.marginLogicalWidth() + layoutBox.bor derAndPaddingLogicalWidth(), layoutBox.marginLogicalHeight() + layoutBox.borderA ndPaddingLogicalHeight());
106 LayoutSize marginRectSize(referenceBoxLogicalSize + marginBoxSizeDelta); 106 LayoutSize marginRectSize(referenceBoxLogicalSize + marginBoxSizeDelta);
107 marginRectSize.clampNegativeToZero(); 107 marginRectSize.clampNegativeToZero();
108 return LayoutRect(marginBoxOrigin, marginRectSize); 108 return LayoutRect(marginBoxOrigin, marginRectSize);
109 } 109 }
110 110
111 static bool isValidRasterShapeRect(const LayoutRect& rect) 111 static bool isValidRasterShapeRect(const LayoutRect& rect)
112 { 112 {
113 static double maxImageSizeBytes = 0; 113 static double maxImageSizeBytes = 0;
114 if (!maxImageSizeBytes) { 114 if (!maxImageSizeBytes) {
115 size_t size32MaxBytes = 0xFFFFFFFF / 4; // Some platforms don't limit m axDecodedImageBytes. 115 size_t size32MaxBytes = 0xFFFFFFFF / 4; // Some platforms don't limit m axDecodedImageBytes.
(...skipping 11 matching lines...) Expand all
127 const LayoutRect& imageRect = (m_renderer.isLayoutImage()) 127 const LayoutRect& imageRect = (m_renderer.isLayoutImage())
128 ? toLayoutImage(m_renderer).replacedContentRect() 128 ? toLayoutImage(m_renderer).replacedContentRect()
129 : LayoutRect(LayoutPoint(), LayoutSize(imageSize)); 129 : LayoutRect(LayoutPoint(), LayoutSize(imageSize));
130 130
131 if (!isValidRasterShapeRect(marginRect) || !isValidRasterShapeRect(imageRect )) { 131 if (!isValidRasterShapeRect(marginRect) || !isValidRasterShapeRect(imageRect )) {
132 m_renderer.document().addConsoleMessage(ConsoleMessage::create(Rendering MessageSource, ErrorMessageLevel, "The shape-outside image is too large.")); 132 m_renderer.document().addConsoleMessage(ConsoleMessage::create(Rendering MessageSource, ErrorMessageLevel, "The shape-outside image is too large."));
133 return Shape::createEmptyRasterShape(writingMode, margin); 133 return Shape::createEmptyRasterShape(writingMode, margin);
134 } 134 }
135 135
136 ASSERT(!styleImage->isPendingImage()); 136 ASSERT(!styleImage->isPendingImage());
137 RefPtr<Image> image = styleImage->image(const_cast<RenderBox*>(&m_renderer), imageSize); 137 RefPtr<Image> image = styleImage->image(const_cast<LayoutBox*>(&m_renderer), imageSize);
138 138
139 return Shape::createRasterShape(image.get(), shapeImageThreshold, imageRect, marginRect, writingMode, margin); 139 return Shape::createRasterShape(image.get(), shapeImageThreshold, imageRect, marginRect, writingMode, margin);
140 } 140 }
141 141
142 const Shape& ShapeOutsideInfo::computedShape() const 142 const Shape& ShapeOutsideInfo::computedShape() const
143 { 143 {
144 if (Shape* shape = m_shape.get()) 144 if (Shape* shape = m_shape.get())
145 return *shape; 145 return *shape;
146 146
147 TemporaryChange<bool> isInComputingShape(m_isComputingShape, true); 147 TemporaryChange<bool> isInComputingShape(m_isComputingShape, true);
(...skipping 23 matching lines...) Expand all
171 const FloatRoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect (LayoutPoint(), m_referenceBoxLogicalSize), m_renderer.view()); 171 const FloatRoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect (LayoutPoint(), m_referenceBoxLogicalSize), m_renderer.view());
172 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin); 172 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin);
173 break; 173 break;
174 } 174 }
175 } 175 }
176 176
177 ASSERT(m_shape); 177 ASSERT(m_shape);
178 return *m_shape; 178 return *m_shape;
179 } 179 }
180 180
181 inline LayoutUnit borderBeforeInWritingMode(const RenderBox& renderer, WritingMo de writingMode) 181 inline LayoutUnit borderBeforeInWritingMode(const LayoutBox& renderer, WritingMo de writingMode)
182 { 182 {
183 switch (writingMode) { 183 switch (writingMode) {
184 case TopToBottomWritingMode: return renderer.borderTop(); 184 case TopToBottomWritingMode: return renderer.borderTop();
185 case BottomToTopWritingMode: return renderer.borderBottom(); 185 case BottomToTopWritingMode: return renderer.borderBottom();
186 case LeftToRightWritingMode: return renderer.borderLeft(); 186 case LeftToRightWritingMode: return renderer.borderLeft();
187 case RightToLeftWritingMode: return renderer.borderRight(); 187 case RightToLeftWritingMode: return renderer.borderRight();
188 } 188 }
189 189
190 ASSERT_NOT_REACHED(); 190 ASSERT_NOT_REACHED();
191 return renderer.borderBefore(); 191 return renderer.borderBefore();
192 } 192 }
193 193
194 inline LayoutUnit borderAndPaddingBeforeInWritingMode(const RenderBox& renderer, WritingMode writingMode) 194 inline LayoutUnit borderAndPaddingBeforeInWritingMode(const LayoutBox& renderer, WritingMode writingMode)
195 { 195 {
196 switch (writingMode) { 196 switch (writingMode) {
197 case TopToBottomWritingMode: return renderer.borderTop() + renderer.paddingT op(); 197 case TopToBottomWritingMode: return renderer.borderTop() + renderer.paddingT op();
198 case BottomToTopWritingMode: return renderer.borderBottom() + renderer.paddi ngBottom(); 198 case BottomToTopWritingMode: return renderer.borderBottom() + renderer.paddi ngBottom();
199 case LeftToRightWritingMode: return renderer.borderLeft() + renderer.padding Left(); 199 case LeftToRightWritingMode: return renderer.borderLeft() + renderer.padding Left();
200 case RightToLeftWritingMode: return renderer.borderRight() + renderer.paddin gRight(); 200 case RightToLeftWritingMode: return renderer.borderRight() + renderer.paddin gRight();
201 } 201 }
202 202
203 ASSERT_NOT_REACHED(); 203 ASSERT_NOT_REACHED();
204 return renderer.borderAndPaddingBefore(); 204 return renderer.borderAndPaddingBefore();
205 } 205 }
206 206
207 LayoutUnit ShapeOutsideInfo::logicalTopOffset() const 207 LayoutUnit ShapeOutsideInfo::logicalTopOffset() const
208 { 208 {
209 switch (referenceBox(*m_renderer.style()->shapeOutside())) { 209 switch (referenceBox(*m_renderer.style()->shapeOutside())) {
210 case MarginBox: return -m_renderer.marginBefore(m_renderer.containingBlock() ->style()); 210 case MarginBox: return -m_renderer.marginBefore(m_renderer.containingBlock() ->style());
211 case BorderBox: return LayoutUnit(); 211 case BorderBox: return LayoutUnit();
212 case PaddingBox: return borderBeforeInWritingMode(m_renderer, m_renderer.con tainingBlock()->style()->writingMode()); 212 case PaddingBox: return borderBeforeInWritingMode(m_renderer, m_renderer.con tainingBlock()->style()->writingMode());
213 case ContentBox: return borderAndPaddingBeforeInWritingMode(m_renderer, m_re nderer.containingBlock()->style()->writingMode()); 213 case ContentBox: return borderAndPaddingBeforeInWritingMode(m_renderer, m_re nderer.containingBlock()->style()->writingMode());
214 case BoxMissing: break; 214 case BoxMissing: break;
215 } 215 }
216 216
217 ASSERT_NOT_REACHED(); 217 ASSERT_NOT_REACHED();
218 return LayoutUnit(); 218 return LayoutUnit();
219 } 219 }
220 220
221 inline LayoutUnit borderStartWithStyleForWritingMode(const RenderBox& renderer, const LayoutStyle* style) 221 inline LayoutUnit borderStartWithStyleForWritingMode(const LayoutBox& renderer, const LayoutStyle* style)
222 { 222 {
223 if (style->isHorizontalWritingMode()) { 223 if (style->isHorizontalWritingMode()) {
224 if (style->isLeftToRightDirection()) 224 if (style->isLeftToRightDirection())
225 return renderer.borderLeft(); 225 return renderer.borderLeft();
226 226
227 return renderer.borderRight(); 227 return renderer.borderRight();
228 } 228 }
229 if (style->isLeftToRightDirection()) 229 if (style->isLeftToRightDirection())
230 return renderer.borderTop(); 230 return renderer.borderTop();
231 231
232 return renderer.borderBottom(); 232 return renderer.borderBottom();
233 } 233 }
234 234
235 inline LayoutUnit borderAndPaddingStartWithStyleForWritingMode(const RenderBox& renderer, const LayoutStyle* style) 235 inline LayoutUnit borderAndPaddingStartWithStyleForWritingMode(const LayoutBox& renderer, const LayoutStyle* style)
236 { 236 {
237 if (style->isHorizontalWritingMode()) { 237 if (style->isHorizontalWritingMode()) {
238 if (style->isLeftToRightDirection()) 238 if (style->isLeftToRightDirection())
239 return renderer.borderLeft() + renderer.paddingLeft(); 239 return renderer.borderLeft() + renderer.paddingLeft();
240 240
241 return renderer.borderRight() + renderer.paddingRight(); 241 return renderer.borderRight() + renderer.paddingRight();
242 } 242 }
243 if (style->isLeftToRightDirection()) 243 if (style->isLeftToRightDirection())
244 return renderer.borderTop() + renderer.paddingTop(); 244 return renderer.borderTop() + renderer.paddingTop();
245 245
246 return renderer.borderBottom() + renderer.paddingBottom(); 246 return renderer.borderBottom() + renderer.paddingBottom();
247 } 247 }
248 248
249 LayoutUnit ShapeOutsideInfo::logicalLeftOffset() const 249 LayoutUnit ShapeOutsideInfo::logicalLeftOffset() const
250 { 250 {
251 switch (referenceBox(*m_renderer.style()->shapeOutside())) { 251 switch (referenceBox(*m_renderer.style()->shapeOutside())) {
252 case MarginBox: return -m_renderer.marginStart(m_renderer.containingBlock()- >style()); 252 case MarginBox: return -m_renderer.marginStart(m_renderer.containingBlock()- >style());
253 case BorderBox: return LayoutUnit(); 253 case BorderBox: return LayoutUnit();
254 case PaddingBox: return borderStartWithStyleForWritingMode(m_renderer, m_ren derer.containingBlock()->style()); 254 case PaddingBox: return borderStartWithStyleForWritingMode(m_renderer, m_ren derer.containingBlock()->style());
255 case ContentBox: return borderAndPaddingStartWithStyleForWritingMode(m_rende rer, m_renderer.containingBlock()->style()); 255 case ContentBox: return borderAndPaddingStartWithStyleForWritingMode(m_rende rer, m_renderer.containingBlock()->style());
256 case BoxMissing: break; 256 case BoxMissing: break;
257 } 257 }
258 258
259 ASSERT_NOT_REACHED(); 259 ASSERT_NOT_REACHED();
260 return LayoutUnit(); 260 return LayoutUnit();
261 } 261 }
262 262
263 263
264 bool ShapeOutsideInfo::isEnabledFor(const RenderBox& box) 264 bool ShapeOutsideInfo::isEnabledFor(const LayoutBox& box)
265 { 265 {
266 ShapeValue* shapeValue = box.style()->shapeOutside(); 266 ShapeValue* shapeValue = box.style()->shapeOutside();
267 if (!box.isFloating() || !shapeValue) 267 if (!box.isFloating() || !shapeValue)
268 return false; 268 return false;
269 269
270 switch (shapeValue->type()) { 270 switch (shapeValue->type()) {
271 case ShapeValue::Shape: 271 case ShapeValue::Shape:
272 return shapeValue->shape(); 272 return shapeValue->shape();
273 case ShapeValue::Image: 273 case ShapeValue::Image:
274 return shapeValue->isImageValid() && checkShapeImageOrigin(box.document( ), *(shapeValue->image())); 274 return shapeValue->isImageValid() && checkShapeImageOrigin(box.document( ), *(shapeValue->image()));
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } 343 }
344 344
345 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const 345 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const
346 { 346 {
347 if (!m_renderer.style()->isHorizontalWritingMode()) 347 if (!m_renderer.style()->isHorizontalWritingMode())
348 return size.transposedSize(); 348 return size.transposedSize();
349 return size; 349 return size;
350 } 350 }
351 351
352 } // namespace blink 352 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/shapes/ShapeOutsideInfo.h ('k') | Source/core/layout/style/GridResolvedPosition.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698