diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/style/StyleGeneratedImage.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/rendering/style/StyleGeneratedImage.cpp')
-rw-r--r-- | Source/WebCore/rendering/style/StyleGeneratedImage.cpp | 54 |
1 files changed, 35 insertions, 19 deletions
diff --git a/Source/WebCore/rendering/style/StyleGeneratedImage.cpp b/Source/WebCore/rendering/style/StyleGeneratedImage.cpp index 6b59fe7c4..b00637814 100644 --- a/Source/WebCore/rendering/style/StyleGeneratedImage.cpp +++ b/Source/WebCore/rendering/style/StyleGeneratedImage.cpp @@ -30,36 +30,48 @@ namespace WebCore { -StyleGeneratedImage::StyleGeneratedImage(PassRef<CSSImageGeneratorValue> value) - : m_imageGeneratorValue(std::move(value)) +StyleGeneratedImage::StyleGeneratedImage(Ref<CSSImageGeneratorValue>&& value) + : m_imageGeneratorValue(WTFMove(value)) , m_fixedSize(m_imageGeneratorValue->isFixedSize()) { m_isGeneratedImage = true; } -PassRefPtr<CSSValue> StyleGeneratedImage::cssValue() const +Ref<CSSValue> StyleGeneratedImage::cssValue() const { - return &const_cast<CSSImageGeneratorValue&>(m_imageGeneratorValue.get()); + return m_imageGeneratorValue.copyRef(); } -LayoutSize StyleGeneratedImage::imageSize(const RenderElement* renderer, float multiplier) const +bool StyleGeneratedImage::isPending() const { + return m_imageGeneratorValue->isPending(); +} + +void StyleGeneratedImage::load(CachedResourceLoader& loader, const ResourceLoaderOptions& options) +{ + m_imageGeneratorValue->loadSubimages(loader, options); +} + +FloatSize StyleGeneratedImage::imageSize(const RenderElement* renderer, float multiplier) const +{ + ASSERT(renderer); if (m_fixedSize) { - IntSize fixedSize = const_cast<CSSImageGeneratorValue&>(m_imageGeneratorValue.get()).fixedSize(renderer); + FloatSize fixedSize = m_imageGeneratorValue->fixedSize(*renderer); if (multiplier == 1.0f) return fixedSize; - LayoutUnit width = fixedSize.width() * multiplier; - LayoutUnit height = fixedSize.height() * multiplier; + float width = fixedSize.width() * multiplier; + float height = fixedSize.height() * multiplier; - // Don't let images that have a width/height >= 1 shrink below 1 when zoomed. + // Don't let images that have a width/height >= 1 shrink below 1 device pixel when zoomed. + float deviceScaleFactor = renderer ? renderer->document().deviceScaleFactor() : 1; if (fixedSize.width() > 0) - width = std::max<LayoutUnit>(1, width); + width = std::max<float>(1 / deviceScaleFactor, width); if (fixedSize.height() > 0) - height = std::max<LayoutUnit>(1, height); + height = std::max<float>(1 / deviceScaleFactor, height); - return LayoutSize(width, height); + return FloatSize(width, height); } return m_containerSize; @@ -67,8 +79,8 @@ LayoutSize StyleGeneratedImage::imageSize(const RenderElement* renderer, float m void StyleGeneratedImage::computeIntrinsicDimensions(const RenderElement* renderer, Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) { - // At a zoom level of 1 the image is guaranteed to have an integer size. - IntSize size = flooredIntSize(imageSize(renderer, 1)); + // At a zoom level of 1 the image is guaranteed to have a device pixel size. + FloatSize size = floorSizeToDevicePixels(LayoutSize(imageSize(renderer, 1)), renderer ? renderer->document().deviceScaleFactor() : 1); intrinsicWidth = Length(size.width(), Fixed); intrinsicHeight = Length(size.height(), Fixed); intrinsicRatio = size; @@ -76,22 +88,26 @@ void StyleGeneratedImage::computeIntrinsicDimensions(const RenderElement* render void StyleGeneratedImage::addClient(RenderElement* renderer) { - m_imageGeneratorValue->addClient(renderer); + ASSERT(renderer); + m_imageGeneratorValue->addClient(*renderer); } void StyleGeneratedImage::removeClient(RenderElement* renderer) { - m_imageGeneratorValue->removeClient(renderer); + ASSERT(renderer); + m_imageGeneratorValue->removeClient(*renderer); } -PassRefPtr<Image> StyleGeneratedImage::image(RenderElement* renderer, const IntSize& size) const +RefPtr<Image> StyleGeneratedImage::image(RenderElement* renderer, const FloatSize& size) const { - return const_cast<CSSImageGeneratorValue&>(m_imageGeneratorValue.get()).image(renderer, size); + ASSERT(renderer); + return m_imageGeneratorValue->image(*renderer, size); } bool StyleGeneratedImage::knownToBeOpaque(const RenderElement* renderer) const { - return m_imageGeneratorValue->knownToBeOpaque(renderer); + ASSERT(renderer); + return m_imageGeneratorValue->knownToBeOpaque(*renderer); } } |