PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* builder) { RenderObject* renderer = referencedRenderer(); if (!m_image && !renderer) return adoptRef(SkBitmapSource::Create(SkBitmap())); setOperatingColorSpace(ColorSpaceDeviceRGB); if (renderer) return createImageFilterForRenderer(renderer, builder); FloatRect srcRect = FloatRect(FloatPoint(), m_image->size()); FloatRect dstRect = filterPrimitiveSubregion(); // FIXME: CSS image filters currently do not seem to set filter primitive // subregion correctly if unspecified. So default to srcRect size if so. if (dstRect.isEmpty()) dstRect = srcRect; m_preserveAspectRatio->transformRect(dstRect, srcRect); if (!m_image->nativeImageForCurrentFrame()) return adoptRef(SkBitmapSource::Create(SkBitmap())); RefPtr<SkImageFilter> result = adoptRef(SkBitmapSource::Create(m_image->nativeImageForCurrentFrame()->bitmap(), srcRect, dstRect)); return result.release(); }
SourceGraphic::SourceGraphic(Filter* filter) : FilterEffect(filter) { setOperatingColorSpace(ColorSpaceDeviceRGB); }
SourceAlpha::SourceAlpha(FilterEffect* sourceEffect) : FilterEffect(sourceEffect->filter()) { setOperatingColorSpace(sourceEffect->operatingColorSpace()); inputEffects().append(sourceEffect); }