bool ShapeOutsideInfo::isEnabledFor(const LayoutBox& box) { ShapeValue* shapeValue = box.style()->shapeOutside(); if (!box.isFloating() || !shapeValue) return false; switch (shapeValue->type()) { case ShapeValue::Shape: return shapeValue->shape(); case ShapeValue::Image: return shapeValue->isImageValid() && checkShapeImageOrigin(box.document(), *(shapeValue->image())); case ShapeValue::Box: return true; } return false; }
bool ShapeInsideInfo::isEnabledFor(const RenderBlock* renderer) { ShapeValue* shapeValue = renderer->style()->resolvedShapeInside(); if (!shapeValue) return false; switch (shapeValue->type()) { case ShapeValue::Shape: return shapeValue->shape() && shapeValue->shape()->type() != BasicShape::BasicShapeInsetRectangleType && shapeValue->shape()->type() != BasicShape::BasicShapeInsetType; case ShapeValue::Image: return shapeValue->isImageValid() && checkShapeImageOrigin(renderer->document(), *(shapeValue->image()->cachedImage())); case ShapeValue::Box: return true; case ShapeValue::Outside: return false; } return false; }
static void getShapeImageAndRect(const ShapeValue& shapeValue, const RenderBox& renderBox, const LayoutSize& referenceBoxSize, Image*& image, LayoutRect& rect) { ASSERT(shapeValue.isImageValid()); StyleImage* styleImage = shapeValue.image(); const LayoutSize& imageSize = renderBox.calculateImageIntrinsicDimensions(styleImage, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom); styleImage->setContainerSizeForRenderer(&renderBox, imageSize, renderBox.style().effectiveZoom()); image = nullptr; if (styleImage->isCachedImage() || styleImage->isCachedImageSet()) image = styleImage->cachedImage()->imageForRenderer(&renderBox); else if (styleImage->isGeneratedImage()) image = styleImage->image(const_cast<RenderBox*>(&renderBox), imageSize).get(); if (renderBox.isRenderImage()) rect = toRenderImage(&renderBox)->replacedContentRect(renderBox.intrinsicSize()); else rect = LayoutRect(LayoutPoint(), imageSize); }
bool ShapeInsideInfo::isEnabledFor(const RenderBlock& renderer) { ShapeValue* shapeValue = renderer.style().resolvedShapeInside(); if (!shapeValue) return false; switch (shapeValue->type()) { case ShapeValue::Shape: return shapeValue->shape() && shapeValue->shape()->type() != BasicShape::BasicShapeInsetRectangleType && shapeValue->shape()->type() != BasicShape::BasicShapeInsetType; case ShapeValue::Image: return shapeValue->isImageValid() && checkShapeImageOrigin(renderer.document(), *(shapeValue->image()->cachedImage())); case ShapeValue::Box: return false; case ShapeValue::Outside: // Outside value must already be resolved break; } ASSERT_NOT_REACHED(); return false; }