| // 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(&document); |
| |
| 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 IntSize& size) |
| { |
| return m_definition ? m_definition->paint(size) : 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; |
| } |
| |
| DEFINE_TRACE(CSSPaintImageGeneratorImpl) |
| { |
| visitor->trace(m_definition); |
| visitor->trace(m_observer); |
| CSSPaintImageGenerator::trace(visitor); |
| } |
| |
| } // namespace blink |