| 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 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 #include "core/svg/SVGImageElement.h" | 45 #include "core/svg/SVGImageElement.h" |
| 46 #include "core/svg/SVGSVGElement.h" | 46 #include "core/svg/SVGSVGElement.h" |
| 47 #include "core/svg/graphics/SVGImageChromeClient.h" | 47 #include "core/svg/graphics/SVGImageChromeClient.h" |
| 48 #include "platform/LengthFunctions.h" | 48 #include "platform/LengthFunctions.h" |
| 49 #include "platform/geometry/IntRect.h" | 49 #include "platform/geometry/IntRect.h" |
| 50 #include "platform/graphics/ImageObserver.h" | 50 #include "platform/graphics/ImageObserver.h" |
| 51 #include "wtf/PassRefPtr.h" | 51 #include "wtf/PassRefPtr.h" |
| 52 | 52 |
| 53 namespace WebCore { | 53 namespace WebCore { |
| 54 | 54 |
| 55 SVGImage::SVGImage(ImageObserver* observer) | 55 SVGImage::SVGImage(ImageObserver* observer, float deviceScaleFactor) |
| 56 : Image(observer) | 56 : Image(observer) |
| 57 , m_deviceScaleFactor(deviceScaleFactor) |
| 57 { | 58 { |
| 58 } | 59 } |
| 59 | 60 |
| 60 SVGImage::~SVGImage() | 61 SVGImage::~SVGImage() |
| 61 { | 62 { |
| 62 if (m_page) { | 63 if (m_page) { |
| 63 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. | 64 // Store m_page in a local variable, clearing m_page, so that SVGImageCh
romeClient knows we're destructed. |
| 64 OwnPtr<Page> currentPage = m_page.release(); | 65 OwnPtr<Page> currentPage = m_page.release(); |
| 65 currentPage->mainFrame()->loader().frameDetached(); // Break both the lo
ader and view references to the frame | 66 currentPage->mainFrame()->loader().frameDetached(); // Break both the lo
ader and view references to the frame |
| 66 } | 67 } |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 scaledSrc.scale(1 / zoom); | 181 scaledSrc.scale(1 / zoom); |
| 181 | 182 |
| 182 // Compensate for the container size rounding by adjusting the source rect. | 183 // Compensate for the container size rounding by adjusting the source rect. |
| 183 FloatSize adjustedSrcSize = scaledSrc.size(); | 184 FloatSize adjustedSrcSize = scaledSrc.size(); |
| 184 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); | 185 adjustedSrcSize.scale(roundedContainerSize.width() / containerSize.width(),
roundedContainerSize.height() / containerSize.height()); |
| 185 scaledSrc.setSize(adjustedSrcSize); | 186 scaledSrc.setSize(adjustedSrcSize); |
| 186 | 187 |
| 187 draw(context, dstRect, scaledSrc, compositeOp, blendMode); | 188 draw(context, dstRect, scaledSrc, compositeOp, blendMode); |
| 188 } | 189 } |
| 189 | 190 |
| 190 PassRefPtr<NativeImageSkia> SVGImage::nativeImageForCurrentFrame() | 191 PassRefPtr<NativeImageSkia> SVGImage::nativeImageForCurrentFrame(ScaleHint hint) |
| 191 { | 192 { |
| 192 if (!m_page) | 193 if (!m_page) |
| 193 return 0; | 194 return 0; |
| 194 | 195 |
| 195 OwnPtr<ImageBuffer> buffer = ImageBuffer::create(size(), 1); | 196 IntSize scaledSize = size(); |
| 197 float scale = hint == PreferDeviceScale ? m_deviceScaleFactor : 1; |
| 198 scaledSize.scale(scale); |
| 199 |
| 200 OwnPtr<ImageBuffer> buffer = ImageBuffer::create(scaledSize, 1); |
| 196 if (!buffer) // failed to allocate image | 201 if (!buffer) // failed to allocate image |
| 197 return 0; | 202 return 0; |
| 198 | 203 |
| 199 drawForContainer(buffer->context(), size(), 1, rect(), rect(), CompositeSour
ceOver, blink::WebBlendModeNormal); | 204 drawForContainer(buffer->context(), size(), 1, FloatRect(IntRect(IntPoint(),
scaledSize)), rect(), CompositeSourceOver, blink::WebBlendModeNormal); |
| 200 | 205 |
| 201 // FIXME: WK(Bug 113657): We should use DontCopyBackingStore here. | 206 // FIXME: WK(Bug 113657): We should use DontCopyBackingStore here. |
| 202 return buffer->copyImage(CopyBackingStore)->nativeImageForCurrentFrame(); | 207 return buffer->copyImage(CopyBackingStore)->nativeImageForCurrentFrame(); |
| 203 } | 208 } |
| 204 | 209 |
| 205 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, float zoom, const FloatRect& srcRect, | 210 void SVGImage::drawPatternForContainer(GraphicsContext* context, const FloatSize
containerSize, float zoom, const FloatRect& srcRect, |
| 206 const FloatSize& scale, const FloatPoint& phase, CompositeOperator composite
Op, const FloatRect& dstRect, blink::WebBlendMode blendMode, const IntSize& repe
atSpacing) | 211 const FloatSize& scale, const FloatPoint& phase, CompositeOperator composite
Op, const FloatRect& dstRect, blink::WebBlendMode blendMode, const IntSize& repe
atSpacing) |
| 207 { | 212 { |
| 208 FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize); | 213 FloatRect zoomedContainerRect = FloatRect(FloatPoint(), containerSize); |
| 209 zoomedContainerRect.scale(zoom); | 214 zoomedContainerRect.scale(zoom); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 | 413 |
| 409 return m_page; | 414 return m_page; |
| 410 } | 415 } |
| 411 | 416 |
| 412 String SVGImage::filenameExtension() const | 417 String SVGImage::filenameExtension() const |
| 413 { | 418 { |
| 414 return "svg"; | 419 return "svg"; |
| 415 } | 420 } |
| 416 | 421 |
| 417 } | 422 } |
| OLD | NEW |