This source file includes following definitions.
- styleImage
- generatedOrPendingFromValue
- setOrPendingFromValue
- cachedOrPendingFromValue
- cursorOrPendingFromValue
- clearPendingImageProperties
- clearPendingSVGDocuments
- addPendingSVGDocument
#include "config.h"
#include "core/css/resolver/ElementStyleResources.h"
#include "core/css/CSSGradientValue.h"
#include "core/css/CSSSVGDocumentValue.h"
#include "core/rendering/style/StyleGeneratedImage.h"
#include "core/rendering/style/StyleImage.h"
#include "core/rendering/style/StylePendingImage.h"
#include "platform/graphics/filters/FilterOperation.h"
namespace WebCore {
ElementStyleResources::ElementStyleResources()
: m_deviceScaleFactor(1)
{
}
PassRefPtr<StyleImage> ElementStyleResources::styleImage(const TextLinkColors& textLinkColors, Color currentColor, CSSPropertyID property, CSSValue* value)
{
if (value->isImageValue())
return cachedOrPendingFromValue(property, toCSSImageValue(value));
if (value->isImageGeneratorValue()) {
if (value->isGradientValue())
return generatedOrPendingFromValue(property, toCSSGradientValue(value)->gradientWithStylesResolved(textLinkColors, currentColor).get());
return generatedOrPendingFromValue(property, toCSSImageGeneratorValue(value));
}
if (value->isImageSetValue())
return setOrPendingFromValue(property, toCSSImageSetValue(value));
if (value->isCursorImageValue())
return cursorOrPendingFromValue(property, toCSSCursorImageValue(value));
return nullptr;
}
PassRefPtr<StyleImage> ElementStyleResources::generatedOrPendingFromValue(CSSPropertyID property, CSSImageGeneratorValue* value)
{
if (value->isPending()) {
m_pendingImageProperties.set(property, value);
return StylePendingImage::create(value);
}
return StyleGeneratedImage::create(value);
}
PassRefPtr<StyleImage> ElementStyleResources::setOrPendingFromValue(CSSPropertyID property, CSSImageSetValue* value)
{
RefPtr<StyleImage> image = value->cachedOrPendingImageSet(m_deviceScaleFactor);
if (image && image->isPendingImage())
m_pendingImageProperties.set(property, value);
return image.release();
}
PassRefPtr<StyleImage> ElementStyleResources::cachedOrPendingFromValue(CSSPropertyID property, CSSImageValue* value)
{
RefPtr<StyleImage> image = value->cachedOrPendingImage();
if (image && image->isPendingImage())
m_pendingImageProperties.set(property, value);
return image.release();
}
PassRefPtr<StyleImage> ElementStyleResources::cursorOrPendingFromValue(CSSPropertyID property, CSSCursorImageValue* value)
{
RefPtr<StyleImage> image = value->cachedOrPendingImage(m_deviceScaleFactor);
if (image && image->isPendingImage())
m_pendingImageProperties.set(property, value);
return image.release();
}
void ElementStyleResources::clearPendingImageProperties()
{
m_pendingImageProperties.clear();
}
void ElementStyleResources::clearPendingSVGDocuments()
{
m_pendingSVGDocuments.clear();
}
void ElementStyleResources::addPendingSVGDocument(FilterOperation* filterOperation, CSSSVGDocumentValue* cssSVGDocumentValue)
{
m_pendingSVGDocuments.set(filterOperation, cssSVGDocumentValue);
}
}