summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSCrossfadeValue.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/css/CSSCrossfadeValue.cpp
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/WebCore/css/CSSCrossfadeValue.cpp')
-rw-r--r--Source/WebCore/css/CSSCrossfadeValue.cpp71
1 files changed, 30 insertions, 41 deletions
diff --git a/Source/WebCore/css/CSSCrossfadeValue.cpp b/Source/WebCore/css/CSSCrossfadeValue.cpp
index 9d58f8e79..26472263a 100644
--- a/Source/WebCore/css/CSSCrossfadeValue.cpp
+++ b/Source/WebCore/css/CSSCrossfadeValue.cpp
@@ -11,10 +11,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -29,7 +29,6 @@
#include "AnimationUtilities.h"
#include "CSSImageValue.h"
-#include "CachedImage.h"
#include "CachedResourceLoader.h"
#include "CrossfadeGeneratedImage.h"
#include "ImageBuffer.h"
@@ -47,11 +46,11 @@ static inline double blendFunc(double from, double to, double progress)
static bool subimageKnownToBeOpaque(CSSValue& value, const RenderElement* renderer)
{
- if (is<CSSImageValue>(value))
- return downcast<CSSImageValue>(value).knownToBeOpaque(renderer);
+ if (value.isImageValue())
+ return toCSSImageValue(value).knownToBeOpaque(renderer);
- if (is<CSSImageGeneratorValue>(value))
- return downcast<CSSImageGeneratorValue>(value).knownToBeOpaque(renderer);
+ if (value.isImageGeneratorValue())
+ return toCSSImageGeneratorValue(value).knownToBeOpaque(renderer);
ASSERT_NOT_REACHED();
@@ -79,31 +78,27 @@ String CSSCrossfadeValue::customCSSText() const
return result.toString();
}
-FloatSize CSSCrossfadeValue::fixedSize(const RenderElement* renderer)
+IntSize CSSCrossfadeValue::fixedSize(const RenderElement* renderer)
{
float percentage = m_percentageValue->getFloatValue();
float inversePercentage = 1 - percentage;
- // FIXME: Skip Content Security Policy check when cross fade is applied to an element in a user agent shadow tree.
- // See <https://bugs.webkit.org/show_bug.cgi?id=146663>.
- ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();
-
- CachedResourceLoader& cachedResourceLoader = renderer->document().cachedResourceLoader();
- CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader, options);
- CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader, options);
+ CachedResourceLoader* cachedResourceLoader = renderer->document().cachedResourceLoader();
+ CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader);
+ CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader);
if (!cachedFromImage || !cachedToImage)
- return FloatSize();
+ return IntSize();
- FloatSize fromImageSize = cachedFromImage->imageForRenderer(renderer)->size();
- FloatSize toImageSize = cachedToImage->imageForRenderer(renderer)->size();
+ IntSize fromImageSize = cachedFromImage->imageForRenderer(renderer)->size();
+ IntSize toImageSize = cachedToImage->imageForRenderer(renderer)->size();
// Rounding issues can cause transitions between images of equal size to return
// a different fixed size; avoid performing the interpolation if the images are the same size.
if (fromImageSize == toImageSize)
return fromImageSize;
- return FloatSize(fromImageSize.width() * inversePercentage + toImageSize.width() * percentage,
+ return IntSize(fromImageSize.width() * inversePercentage + toImageSize.width() * percentage,
fromImageSize.height() * inversePercentage + toImageSize.height() * percentage);
}
@@ -118,13 +113,13 @@ bool CSSCrossfadeValue::knownToBeOpaque(const RenderElement* renderer) const
return subimageKnownToBeOpaque(*m_fromValue, renderer) && subimageKnownToBeOpaque(*m_toValue, renderer);
}
-void CSSCrossfadeValue::loadSubimages(CachedResourceLoader& cachedResourceLoader, const ResourceLoaderOptions& options)
+void CSSCrossfadeValue::loadSubimages(CachedResourceLoader* cachedResourceLoader)
{
CachedResourceHandle<CachedImage> oldCachedFromImage = m_cachedFromImage;
CachedResourceHandle<CachedImage> oldCachedToImage = m_cachedToImage;
- m_cachedFromImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader, options);
- m_cachedToImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader, options);
+ m_cachedFromImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader);
+ m_cachedToImage = CSSImageGeneratorValue::cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader);
if (m_cachedFromImage != oldCachedFromImage) {
if (oldCachedFromImage)
@@ -143,18 +138,14 @@ void CSSCrossfadeValue::loadSubimages(CachedResourceLoader& cachedResourceLoader
m_crossfadeSubimageObserver.setReady(true);
}
-RefPtr<Image> CSSCrossfadeValue::image(RenderElement* renderer, const FloatSize& size)
+PassRefPtr<Image> CSSCrossfadeValue::image(RenderElement* renderer, const IntSize& size)
{
if (size.isEmpty())
- return nullptr;
-
- // FIXME: Skip Content Security Policy check when cross fade is applied to an element in a user agent shadow tree.
- // See <https://bugs.webkit.org/show_bug.cgi?id=146663>.
- ResourceLoaderOptions options = CachedResourceLoader::defaultCachedResourceOptions();
+ return 0;
- CachedResourceLoader& cachedResourceLoader = renderer->document().cachedResourceLoader();
- CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader, options);
- CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader, options);
+ CachedResourceLoader* cachedResourceLoader = renderer->document().cachedResourceLoader();
+ CachedImage* cachedFromImage = cachedImageForCSSValue(m_fromValue.get(), cachedResourceLoader);
+ CachedImage* cachedToImage = cachedImageForCSSValue(m_toValue.get(), cachedResourceLoader);
if (!cachedFromImage || !cachedToImage)
return Image::nullImage();
@@ -165,9 +156,9 @@ RefPtr<Image> CSSCrossfadeValue::image(RenderElement* renderer, const FloatSize&
if (!fromImage || !toImage)
return Image::nullImage();
- m_generatedImage = CrossfadeGeneratedImage::create(*fromImage, *toImage, m_percentageValue->getFloatValue(), fixedSize(renderer), size);
+ m_generatedImage = CrossfadeGeneratedImage::create(fromImage, toImage, m_percentageValue->getFloatValue(), fixedSize(renderer), size);
- return m_generatedImage;
+ return m_generatedImage.release();
}
void CSSCrossfadeValue::crossfadeChanged(const IntRect&)
@@ -182,27 +173,25 @@ void CSSCrossfadeValue::CrossfadeSubimageObserverProxy::imageChanged(CachedImage
m_ownerValue->crossfadeChanged(*rect);
}
-bool CSSCrossfadeValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const
+bool CSSCrossfadeValue::hasFailedOrCanceledSubresources() const
{
- if (m_cachedFromImage && handler(*m_cachedFromImage))
+ if (m_cachedFromImage && m_cachedFromImage->loadFailedOrCanceled())
return true;
- if (m_cachedToImage && handler(*m_cachedToImage))
+ if (m_cachedToImage && m_cachedToImage->loadFailedOrCanceled())
return true;
return false;
}
-RefPtr<CSSCrossfadeValue> CSSCrossfadeValue::blend(const CSSCrossfadeValue& from, double progress) const
+PassRefPtr<CSSCrossfadeValue> CSSCrossfadeValue::blend(const CSSCrossfadeValue& from, double progress) const
{
ASSERT(equalInputImages(from));
- if (!m_cachedToImage || !m_cachedFromImage)
- return nullptr;
RefPtr<StyleCachedImage> toStyledImage = StyleCachedImage::create(m_cachedToImage.get());
RefPtr<StyleCachedImage> fromStyledImage = StyleCachedImage::create(m_cachedFromImage.get());
auto fromImageValue = CSSImageValue::create(m_cachedFromImage->url(), fromStyledImage.get());
auto toImageValue = CSSImageValue::create(m_cachedToImage->url(), toStyledImage.get());
- RefPtr<CSSCrossfadeValue> crossfadeValue = CSSCrossfadeValue::create(WTFMove(fromImageValue), WTFMove(toImageValue));
+ RefPtr<CSSCrossfadeValue> crossfadeValue = CSSCrossfadeValue::create(std::move(fromImageValue), std::move(toImageValue));
double fromPercentage = from.m_percentageValue->getDoubleValue();
if (from.m_percentageValue->isPercentage())
@@ -211,7 +200,7 @@ RefPtr<CSSCrossfadeValue> CSSCrossfadeValue::blend(const CSSCrossfadeValue& from
if (m_percentageValue->isPercentage())
toPercentage /= 100.0;
crossfadeValue->setPercentage(CSSPrimitiveValue::create(blendFunc(fromPercentage, toPercentage, progress), CSSPrimitiveValue::CSS_NUMBER));
- return crossfadeValue;
+ return crossfadeValue.release();
}
bool CSSCrossfadeValue::equals(const CSSCrossfadeValue& other) const