diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/WebCore/css/CSSCrossfadeValue.cpp | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-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.cpp | 71 |
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 |