blob: 6b488a17c85bf29c77c269dc39b9e4d85af0e686 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "modules/csspaint/CSSPaintImageGeneratorImpl.h"
#include "core/dom/Document.h"
#include "core/frame/LocalDOMWindow.h"
#include "modules/csspaint/CSSPaintDefinition.h"
#include "modules/csspaint/PaintWorklet.h"
#include "modules/csspaint/WindowPaintWorklet.h"
#include "platform/graphics/Image.h"
namespace blink {
CSSPaintImageGenerator* CSSPaintImageGeneratorImpl::create(const String& name,
Document& document,
Observer* observer) {
LocalDOMWindow* domWindow = document.domWindow();
PaintWorklet* paintWorklet =
WindowPaintWorklet::from(*domWindow).paintWorklet();
CSSPaintDefinition* paintDefinition = paintWorklet->findDefinition(name);
CSSPaintImageGeneratorImpl* generator;
if (!paintDefinition) {
generator = new CSSPaintImageGeneratorImpl(observer);
paintWorklet->addPendingGenerator(name, generator);
} else {
generator = new CSSPaintImageGeneratorImpl(paintDefinition);
}
return generator;
}
CSSPaintImageGeneratorImpl::CSSPaintImageGeneratorImpl(
CSSPaintDefinition* definition)
: m_definition(definition) {}
CSSPaintImageGeneratorImpl::CSSPaintImageGeneratorImpl(Observer* observer)
: m_observer(observer) {}
CSSPaintImageGeneratorImpl::~CSSPaintImageGeneratorImpl() {}
void CSSPaintImageGeneratorImpl::setDefinition(CSSPaintDefinition* definition) {
ASSERT(!m_definition);
m_definition = definition;
ASSERT(m_observer);
m_observer->paintImageGeneratorReady();
}
PassRefPtr<Image> CSSPaintImageGeneratorImpl::paint(
const LayoutObject& layoutObject,
const IntSize& size,
float zoom) {
return m_definition ? m_definition->paint(layoutObject, size, zoom) : nullptr;
}
const Vector<CSSPropertyID>&
CSSPaintImageGeneratorImpl::nativeInvalidationProperties() const {
DEFINE_STATIC_LOCAL(Vector<CSSPropertyID>, emptyVector, ());
return m_definition ? m_definition->nativeInvalidationProperties()
: emptyVector;
}
const Vector<AtomicString>&
CSSPaintImageGeneratorImpl::customInvalidationProperties() const {
DEFINE_STATIC_LOCAL(Vector<AtomicString>, emptyVector, ());
return m_definition ? m_definition->customInvalidationProperties()
: emptyVector;
}
bool CSSPaintImageGeneratorImpl::hasAlpha() const {
return m_definition && m_definition->hasAlpha();
}
DEFINE_TRACE(CSSPaintImageGeneratorImpl) {
visitor->trace(m_definition);
visitor->trace(m_observer);
CSSPaintImageGenerator::trace(visitor);
}
} // namespace blink