| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> | 2 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org> |
| 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> | 3 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org> |
| 4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> | 4 * Copyright (C) 2005 Eric Seidel <eric@webkit.org> |
| 5 * Copyright (C) 2010 Dirk Schulze <krit@webkit.org> | 5 * Copyright (C) 2010 Dirk Schulze <krit@webkit.org> |
| 6 * Copyright (C) 2013 Google Inc. All rights reserved. | 6 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 148 else if (LayoutObject* layoutObject = referencedLayoutObject()) | 148 else if (LayoutObject* layoutObject = referencedLayoutObject()) |
| 149 imageSize = enclosingIntRect(getLayoutObjectRepaintRect(layoutObject)).s
ize(); | 149 imageSize = enclosingIntRect(getLayoutObjectRepaintRect(layoutObject)).s
ize(); |
| 150 writeIndent(ts, indent); | 150 writeIndent(ts, indent); |
| 151 ts << "[feImage"; | 151 ts << "[feImage"; |
| 152 FilterEffect::externalRepresentation(ts); | 152 FilterEffect::externalRepresentation(ts); |
| 153 ts << " image-size=\"" << imageSize.width() << "x" << imageSize.height() <<
"\"]\n"; | 153 ts << " image-size=\"" << imageSize.width() << "x" << imageSize.height() <<
"\"]\n"; |
| 154 // FIXME: should this dump also object returned by SVGFEImage::image() ? | 154 // FIXME: should this dump also object returned by SVGFEImage::image() ? |
| 155 return ts; | 155 return ts; |
| 156 } | 156 } |
| 157 | 157 |
| 158 PassRefPtr<SkImageFilter> FEImage::createImageFilterForLayoutObject(LayoutObject
& layoutObject, SkiaImageFilterBuilder* builder) | 158 PassRefPtr<SkImageFilter> FEImage::createImageFilterForLayoutObject(const Layout
Object& layoutObject) |
| 159 { | 159 { |
| 160 FloatRect dstRect = filterPrimitiveSubregion(); | 160 FloatRect dstRect = filterPrimitiveSubregion(); |
| 161 | 161 |
| 162 AffineTransform transform; | 162 AffineTransform transform; |
| 163 SVGElement* contextNode = toSVGElement(layoutObject.node()); | 163 SVGElement* contextNode = toSVGElement(layoutObject.node()); |
| 164 | 164 |
| 165 if (contextNode->hasRelativeLengths()) { | 165 if (contextNode->hasRelativeLengths()) { |
| 166 SVGLengthContext lengthContext(contextNode); | 166 SVGLengthContext lengthContext(contextNode); |
| 167 FloatSize viewportSize; | 167 FloatSize viewportSize; |
| 168 | 168 |
| 169 // If we're referencing an element with percentage units, eg. <rect with
="30%"> those values were resolved against the viewport. | 169 // If we're referencing an element with percentage units, eg. <rect with
="30%"> those values were resolved against the viewport. |
| 170 // Build up a transformation that maps from the viewport space to the fi
lter primitive subregion. | 170 // Build up a transformation that maps from the viewport space to the fi
lter primitive subregion. |
| 171 if (lengthContext.determineViewport(viewportSize)) | 171 if (lengthContext.determineViewport(viewportSize)) |
| 172 transform = makeMapBetweenRects(FloatRect(FloatPoint(), viewportSize
), dstRect); | 172 transform = makeMapBetweenRects(FloatRect(FloatPoint(), viewportSize
), dstRect); |
| 173 } else { | 173 } else { |
| 174 transform.translate(dstRect.x(), dstRect.y()); | 174 transform.translate(dstRect.x(), dstRect.y()); |
| 175 } | 175 } |
| 176 | 176 |
| 177 SkPictureBuilder filterPicture(dstRect); | 177 SkPictureBuilder filterPicture(dstRect); |
| 178 { | 178 { |
| 179 TransformRecorder transformRecorder(filterPicture.context(), layoutObjec
t, transform); | 179 TransformRecorder transformRecorder(filterPicture.context(), layoutObjec
t, transform); |
| 180 SVGPaintContext::paintSubtree(&filterPicture.context(), &layoutObject); | 180 SVGPaintContext::paintSubtree(&filterPicture.context(), &layoutObject); |
| 181 } | 181 } |
| 182 RefPtr<const SkPicture> recording = filterPicture.endRecording(); | 182 RefPtr<const SkPicture> recording = filterPicture.endRecording(); |
| 183 | 183 |
| 184 RefPtr<SkImageFilter> result = adoptRef(SkPictureImageFilter::Create(recordi
ng.get(), dstRect)); | 184 RefPtr<SkImageFilter> result = adoptRef(SkPictureImageFilter::Create(recordi
ng.get(), dstRect)); |
| 185 return result.release(); | 185 return result.release(); |
| 186 } | 186 } |
| 187 | 187 |
| 188 PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* bui
lder) | 188 PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder& bui
lder) |
| 189 { | 189 { |
| 190 if (auto* layoutObject = referencedLayoutObject()) | 190 if (auto* layoutObject = referencedLayoutObject()) |
| 191 return createImageFilterForLayoutObject(*layoutObject, builder); | 191 return createImageFilterForLayoutObject(*layoutObject); |
| 192 | 192 |
| 193 RefPtr<SkImage> image = m_image ? m_image->imageForCurrentFrame() : nullptr; | 193 RefPtr<SkImage> image = m_image ? m_image->imageForCurrentFrame() : nullptr; |
| 194 if (!image) { | 194 if (!image) { |
| 195 // "A href reference that is an empty image (zero width or zero height),
that fails | 195 // "A href reference that is an empty image (zero width or zero height),
that fails |
| 196 // to download, is non-existent, or that cannot be displayed (e.g. becau
se it is | 196 // to download, is non-existent, or that cannot be displayed (e.g. becau
se it is |
| 197 // not in a supported image format) fills the filter primitive subregion
with | 197 // not in a supported image format) fills the filter primitive subregion
with |
| 198 // transparent black." | 198 // transparent black." |
| 199 return createTransparentBlack(builder); | 199 return createTransparentBlack(builder); |
| 200 } | 200 } |
| 201 | 201 |
| 202 FloatRect srcRect = FloatRect(FloatPoint(), m_image->size()); | 202 FloatRect srcRect = FloatRect(FloatPoint(), m_image->size()); |
| 203 FloatRect dstRect = filterPrimitiveSubregion(); | 203 FloatRect dstRect = filterPrimitiveSubregion(); |
| 204 | 204 |
| 205 m_preserveAspectRatio->transformRect(dstRect, srcRect); | 205 m_preserveAspectRatio->transformRect(dstRect, srcRect); |
| 206 | 206 |
| 207 return adoptRef(SkImageSource::Create(image.get(), srcRect, dstRect, kHigh_S
kFilterQuality)); | 207 return adoptRef(SkImageSource::Create(image.get(), srcRect, dstRect, kHigh_S
kFilterQuality)); |
| 208 } | 208 } |
| 209 | 209 |
| 210 } // namespace blink | 210 } // namespace blink |
| OLD | NEW |