コード例 #1
0
sk_sp<SkImageFilter> FEImage::createImageFilter()
{
    if (auto* layoutObject = referencedLayoutObject())
        return createImageFilterForLayoutObject(*layoutObject);

    sk_sp<SkImage> image = m_image ? toSkSp(m_image->imageForCurrentFrame()) : nullptr;
    if (!image) {
        // "A href reference that is an empty image (zero width or zero height), that fails
        // to download, is non-existent, or that cannot be displayed (e.g. because it is
        // not in a supported image format) fills the filter primitive subregion with
        // transparent black."
        return createTransparentBlack();
    }

    FloatRect srcRect = FloatRect(FloatPoint(), FloatSize(m_image->size()));
    FloatRect dstRect = filterPrimitiveSubregion();

    m_preserveAspectRatio->transformRect(dstRect, srcRect);

    return SkImageSource::Make(std::move(image), srcRect, dstRect, kHigh_SkFilterQuality);
}
コード例 #2
0
ファイル: SVGFEImage.cpp プロジェクト: dstockwell/blink
PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* builder)
{
    if (auto* layoutObject = referencedLayoutObject())
        return createImageFilterForLayoutObject(*layoutObject, builder);

    FloatRect dstRect = filterPrimitiveSubregion();

    RefPtr<SkImage> image = m_image ? m_image->imageForCurrentFrame() : nullptr;
    if (!image) {
        // "A href reference that is an empty image (zero width or zero height), that fails
        // to download, is non-existent, or that cannot be displayed (e.g. because it is
        // not in a supported image format) fills the filter primitive subregion with
        // transparent black."
        return adoptRef(SkPictureImageFilter::Create(nullptr, dstRect));
    }

    FloatRect srcRect = FloatRect(FloatPoint(), m_image->size());

    m_preserveAspectRatio->transformRect(dstRect, srcRect);

    return adoptRef(SkImageSource::Create(image.get(), srcRect, dstRect, kHigh_SkFilterQuality));
}