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 |