| OLD | NEW |
| 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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 if (imageResource.isAccessAllowed(document.securityOrigin())) | 90 if (imageResource.isAccessAllowed(document.securityOrigin())) |
| 91 return true; | 91 return true; |
| 92 | 92 |
| 93 const KURL& url = imageResource.url(); | 93 const KURL& url = imageResource.url(); |
| 94 String urlString = url.isNull() ? "''" : url.elidedString(); | 94 String urlString = url.isNull() ? "''" : url.elidedString(); |
| 95 document.addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Unsafe
attempt to load URL " + urlString + "."); | 95 document.addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Unsafe
attempt to load URL " + urlString + "."); |
| 96 | 96 |
| 97 return false; | 97 return false; |
| 98 } | 98 } |
| 99 | 99 |
| 100 static void getShapeImageAndRect(const ShapeValue& shapeValue, const RenderBox&
renderBox, const LayoutSize& referenceBoxSize, Image*& image, LayoutRect& rect) | |
| 101 { | |
| 102 ASSERT(shapeValue.isImageValid()); | |
| 103 StyleImage* styleImage = shapeValue.image(); | |
| 104 | |
| 105 const IntSize& imageSize = renderBox.calculateImageIntrinsicDimensions(style
Image, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom); | |
| 106 styleImage->setContainerSizeForRenderer(&renderBox, imageSize, renderBox.sty
le()->effectiveZoom()); | |
| 107 | |
| 108 image = 0; | |
| 109 if (styleImage->isImageResource() || styleImage->isImageResourceSet()) | |
| 110 image = styleImage->cachedImage()->imageForRenderer(&renderBox); | |
| 111 else if (styleImage->isGeneratedImage()) | |
| 112 image = styleImage->image(const_cast<RenderBox*>(&renderBox), imageSize)
.get(); | |
| 113 | |
| 114 if (renderBox.isRenderImage()) | |
| 115 rect = toRenderImage(&renderBox)->replacedContentRect(); | |
| 116 else | |
| 117 rect = LayoutRect(LayoutPoint(), imageSize); | |
| 118 } | |
| 119 | |
| 120 static LayoutRect getShapeImageMarginRect(const RenderBox& renderBox, const Layo
utSize& referenceBoxLogicalSize) | 100 static LayoutRect getShapeImageMarginRect(const RenderBox& renderBox, const Layo
utSize& referenceBoxLogicalSize) |
| 121 { | 101 { |
| 122 LayoutPoint marginBoxOrigin(-renderBox.marginLogicalLeft() - renderBox.borde
rAndPaddingLogicalLeft(), -renderBox.marginBefore() - renderBox.borderBefore() -
renderBox.paddingBefore()); | 102 LayoutPoint marginBoxOrigin(-renderBox.marginLogicalLeft() - renderBox.borde
rAndPaddingLogicalLeft(), -renderBox.marginBefore() - renderBox.borderBefore() -
renderBox.paddingBefore()); |
| 123 LayoutSize marginBoxSizeDelta(renderBox.marginLogicalWidth() + renderBox.bor
derAndPaddingLogicalWidth(), renderBox.marginLogicalHeight() + renderBox.borderA
ndPaddingLogicalHeight()); | 103 LayoutSize marginBoxSizeDelta(renderBox.marginLogicalWidth() + renderBox.bor
derAndPaddingLogicalWidth(), renderBox.marginLogicalHeight() + renderBox.borderA
ndPaddingLogicalHeight()); |
| 124 return LayoutRect(marginBoxOrigin, referenceBoxLogicalSize + marginBoxSizeDe
lta); | 104 return LayoutRect(marginBoxOrigin, referenceBoxLogicalSize + marginBoxSizeDe
lta); |
| 125 } | 105 } |
| 126 | 106 |
| 107 PassOwnPtr<Shape> ShapeOutsideInfo::createShapeForImage(StyleImage* styleImage,
float shapeImageThreshold, WritingMode writingMode, float margin) const |
| 108 { |
| 109 const IntSize& imageSize = m_renderer.calculateImageIntrinsicDimensions(styl
eImage, roundedIntSize(m_referenceBoxLogicalSize), RenderImage::ScaleByEffective
Zoom); |
| 110 styleImage->setContainerSizeForRenderer(&m_renderer, imageSize, m_renderer.s
tyle()->effectiveZoom()); |
| 111 |
| 112 const LayoutRect& marginRect = getShapeImageMarginRect(m_renderer, m_referen
ceBoxLogicalSize); |
| 113 const LayoutRect& imageRect = (m_renderer.isRenderImage()) |
| 114 ? toRenderImage(&m_renderer)->replacedContentRect() |
| 115 : LayoutRect(LayoutPoint(), imageSize); |
| 116 |
| 117 Image* image = 0; |
| 118 RefPtr<Image> generatedImage; |
| 119 |
| 120 if (styleImage->isImageResource() || styleImage->isImageResourceSet()) { |
| 121 image = styleImage->cachedImage()->imageForRenderer(&m_renderer); |
| 122 } else if (styleImage->isGeneratedImage()) { |
| 123 generatedImage = styleImage->image(const_cast<RenderBox*>(&m_renderer),
imageSize); |
| 124 image = generatedImage.get(); |
| 125 } |
| 126 |
| 127 return Shape::createRasterShape(image, shapeImageThreshold, imageRect, margi
nRect, writingMode, margin); |
| 128 } |
| 129 |
| 127 const Shape& ShapeOutsideInfo::computedShape() const | 130 const Shape& ShapeOutsideInfo::computedShape() const |
| 128 { | 131 { |
| 129 if (Shape* shape = m_shape.get()) | 132 if (Shape* shape = m_shape.get()) |
| 130 return *shape; | 133 return *shape; |
| 131 | 134 |
| 132 const RenderStyle& style = *m_renderer.style(); | 135 const RenderStyle& style = *m_renderer.style(); |
| 133 ASSERT(m_renderer.containingBlock()); | 136 ASSERT(m_renderer.containingBlock()); |
| 134 const RenderStyle& containingBlockStyle = *m_renderer.containingBlock()->sty
le(); | 137 const RenderStyle& containingBlockStyle = *m_renderer.containingBlock()->sty
le(); |
| 135 | 138 |
| 136 WritingMode writingMode = containingBlockStyle.writingMode(); | 139 WritingMode writingMode = containingBlockStyle.writingMode(); |
| 137 LayoutUnit maximumValue = m_renderer.containingBlock() ? m_renderer.containi
ngBlock()->contentWidth() : LayoutUnit(); | 140 LayoutUnit maximumValue = m_renderer.containingBlock() ? m_renderer.containi
ngBlock()->contentWidth() : LayoutUnit(); |
| 138 float margin = floatValueForLength(m_renderer.style()->shapeMargin(), maximu
mValue.toFloat()); | 141 float margin = floatValueForLength(m_renderer.style()->shapeMargin(), maximu
mValue.toFloat()); |
| 139 | 142 |
| 140 float shapeImageThreshold = style.shapeImageThreshold(); | 143 float shapeImageThreshold = style.shapeImageThreshold(); |
| 141 ASSERT(style.shapeOutside()); | 144 ASSERT(style.shapeOutside()); |
| 142 const ShapeValue& shapeValue = *style.shapeOutside(); | 145 const ShapeValue& shapeValue = *style.shapeOutside(); |
| 143 | 146 |
| 144 switch (shapeValue.type()) { | 147 switch (shapeValue.type()) { |
| 145 case ShapeValue::Shape: | 148 case ShapeValue::Shape: |
| 146 ASSERT(shapeValue.shape()); | 149 ASSERT(shapeValue.shape()); |
| 147 m_shape = Shape::createShape(shapeValue.shape(), m_referenceBoxLogicalSi
ze, writingMode, margin); | 150 m_shape = Shape::createShape(shapeValue.shape(), m_referenceBoxLogicalSi
ze, writingMode, margin); |
| 148 break; | 151 break; |
| 149 case ShapeValue::Image: { | 152 case ShapeValue::Image: |
| 150 Image* image; | 153 ASSERT(shapeValue.isImageValid()); |
| 151 LayoutRect imageRect; | 154 m_shape = createShapeForImage(shapeValue.image(), shapeImageThreshold, w
ritingMode, margin); |
| 152 getShapeImageAndRect(shapeValue, m_renderer, m_referenceBoxLogicalSize,
image, imageRect); | |
| 153 const LayoutRect& marginRect = getShapeImageMarginRect(m_renderer, m_ref
erenceBoxLogicalSize); | |
| 154 m_shape = Shape::createRasterShape(image, shapeImageThreshold, imageRect
, marginRect, writingMode, margin); | |
| 155 break; | 155 break; |
| 156 } | |
| 157 case ShapeValue::Box: { | 156 case ShapeValue::Box: { |
| 158 const RoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect(Layo
utPoint(), m_referenceBoxLogicalSize), m_renderer.view()); | 157 const RoundedRect& shapeRect = style.getRoundedBorderFor(LayoutRect(Layo
utPoint(), m_referenceBoxLogicalSize), m_renderer.view()); |
| 159 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin); | 158 m_shape = Shape::createLayoutBoxShape(shapeRect, writingMode, margin); |
| 160 break; | 159 break; |
| 161 } | 160 } |
| 162 } | 161 } |
| 163 | 162 |
| 164 ASSERT(m_shape); | 163 ASSERT(m_shape); |
| 165 return *m_shape; | 164 return *m_shape; |
| 166 } | 165 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 } | 345 } |
| 347 | 346 |
| 348 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const | 347 FloatSize ShapeOutsideInfo::shapeToRendererSize(FloatSize size) const |
| 349 { | 348 { |
| 350 if (!m_renderer.style()->isHorizontalWritingMode()) | 349 if (!m_renderer.style()->isHorizontalWritingMode()) |
| 351 return size.transposedSize(); | 350 return size.transposedSize(); |
| 352 return size; | 351 return size; |
| 353 } | 352 } |
| 354 | 353 |
| 355 } | 354 } |
| OLD | NEW |