OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> | 2 * Copyright (C) 2006 Eric Seidel <eric@webkit.org> |
3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. |
4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 4 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 #include "platform/LengthFunctions.h" | 51 #include "platform/LengthFunctions.h" |
52 #include "platform/TraceEvent.h" | 52 #include "platform/TraceEvent.h" |
53 #include "platform/geometry/IntRect.h" | 53 #include "platform/geometry/IntRect.h" |
54 #include "platform/graphics/GraphicsContext.h" | 54 #include "platform/graphics/GraphicsContext.h" |
55 #include "platform/graphics/ImageBuffer.h" | 55 #include "platform/graphics/ImageBuffer.h" |
56 #include "platform/graphics/ImageObserver.h" | 56 #include "platform/graphics/ImageObserver.h" |
57 #include "platform/graphics/paint/ClipRecorder.h" | 57 #include "platform/graphics/paint/ClipRecorder.h" |
58 #include "platform/graphics/paint/DrawingRecorder.h" | 58 #include "platform/graphics/paint/DrawingRecorder.h" |
59 #include "platform/graphics/paint/SkPictureBuilder.h" | 59 #include "platform/graphics/paint/SkPictureBuilder.h" |
60 #include "third_party/skia/include/core/SkPicture.h" | 60 #include "third_party/skia/include/core/SkPicture.h" |
61 #include "third_party/skia/include/core/SkSurface.h" | |
62 #include "wtf/PassRefPtr.h" | 61 #include "wtf/PassRefPtr.h" |
63 | 62 |
64 namespace blink { | 63 namespace blink { |
65 | 64 |
66 SVGImage::SVGImage(ImageObserver* observer) | 65 SVGImage::SVGImage(ImageObserver* observer) |
67 : Image(observer) | 66 : Image(observer) |
68 { | 67 { |
69 } | 68 } |
70 | 69 |
71 SVGImage::~SVGImage() | 70 SVGImage::~SVGImage() |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 // Compensate for the container size rounding by adjusting the source rect. | 210 // Compensate for the container size rounding by adjusting the source rect. |
212 FloatSize adjustedSrcSize = scaledSrc.size(); | 211 FloatSize adjustedSrcSize = scaledSrc.size(); |
213 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); | 212 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); |
214 scaledSrc.setSize(adjustedSrcSize); | 213 scaledSrc.setSize(adjustedSrcSize); |
215 | 214 |
216 draw(canvas, paint, dstRect, scaledSrc, DoNotRespectImageOrientation, ClampI
mageToSourceRect); | 215 draw(canvas, paint, dstRect, scaledSrc, DoNotRespectImageOrientation, ClampI
mageToSourceRect); |
217 } | 216 } |
218 | 217 |
219 PassRefPtr<SkImage> SVGImage::imageForCurrentFrame() | 218 PassRefPtr<SkImage> SVGImage::imageForCurrentFrame() |
220 { | 219 { |
221 // TODO(fmalita): instead of rasterizing, investigate returning a SkPicture-
backed image. | |
222 | |
223 if (!m_page) | 220 if (!m_page) |
224 return nullptr; | 221 return nullptr; |
225 | 222 |
226 IntSize size = this->size(); | 223 SkPictureRecorder recorder; |
227 SkImageInfo imageInfo = SkImageInfo::MakeN32(size.width(), size.height(), kP
remul_SkAlphaType); | 224 SkCanvas* canvas = recorder.beginRecording(width(), height()); |
228 SkSurfaceProps disableLCDProps(0, kUnknown_SkPixelGeometry); | 225 drawForContainer(canvas, SkPaint(), size(), 1, rect(), rect()); |
229 RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRaster(imageInfo, &disabl
eLCDProps)); | 226 RefPtr<SkPicture> picture = adoptRef(recorder.endRecording()); |
230 if (!surface) | |
231 return nullptr; | |
232 | 227 |
233 drawForContainer(surface->getCanvas(), SkPaint(), size, 1, rect(), rect()); | 228 return adoptRef( |
234 | 229 SkImage::NewFromPicture(picture.get(), SkISize::Make(width(), height()),
nullptr, nullptr)); |
235 return adoptRef(surface->newImageSnapshot()); | |
236 } | 230 } |
237 | 231 |
238 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, | 232 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, |
239 float zoom, const FloatRect& srcRect, const FloatSize& tileScale, const Floa
tPoint& phase, | 233 float zoom, const FloatRect& srcRect, const FloatSize& tileScale, const Floa
tPoint& phase, |
240 SkXfermode::Mode compositeOp, const FloatRect& dstRect, | 234 SkXfermode::Mode compositeOp, const FloatRect& dstRect, |
241 const IntSize& repeatSpacing) | 235 const IntSize& repeatSpacing) |
242 { | 236 { |
243 // Tile adjusted for scaling/stretch. | 237 // Tile adjusted for scaling/stretch. |
244 FloatRect tile(srcRect); | 238 FloatRect tile(srcRect); |
245 tile.scale(tileScale.width(), tileScale.height()); | 239 tile.scale(tileScale.width(), tileScale.height()); |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 479 |
486 return m_page; | 480 return m_page; |
487 } | 481 } |
488 | 482 |
489 String SVGImage::filenameExtension() const | 483 String SVGImage::filenameExtension() const |
490 { | 484 { |
491 return "svg"; | 485 return "svg"; |
492 } | 486 } |
493 | 487 |
494 } | 488 } |
OLD | NEW |