summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/style/StyleGeneratedImage.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/rendering/style/StyleGeneratedImage.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/rendering/style/StyleGeneratedImage.cpp')
-rw-r--r--Source/WebCore/rendering/style/StyleGeneratedImage.cpp54
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);
}
}