blob: 07eb74ca86e61d44b8078e2d150d61312b932427 [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.
#ifndef CSSPaintValue_h
#define CSSPaintValue_h
#include "core/css/CSSCustomIdentValue.h"
#include "core/css/CSSImageGeneratorValue.h"
#include "core/css/CSSPaintImageGenerator.h"
#include "platform/heap/Handle.h"
namespace blink {
class CSSPaintValue : public CSSImageGeneratorValue {
public:
static CSSPaintValue* create(CSSCustomIdentValue* name)
{
return new CSSPaintValue(name);
}
~CSSPaintValue();
String customCSSText() const;
String name() const;
PassRefPtr<Image> image(const LayoutObject&, const IntSize&);
bool isFixedSize() const { return false; }
IntSize fixedSize(const LayoutObject&) { return IntSize(); }
bool isPending() const { return false; }
bool knownToBeOpaque(const LayoutObject&) const { return false; }
void loadSubimages(Document*) { }
bool equals(const CSSPaintValue&) const;
DECLARE_TRACE_AFTER_DISPATCH();
private:
explicit CSSPaintValue(CSSCustomIdentValue* name);
class Observer final : public CSSPaintImageGenerator::Observer {
WTF_MAKE_NONCOPYABLE(Observer);
public:
explicit Observer(CSSPaintValue* ownerValue)
: m_ownerValue(ownerValue)
{
}
~Observer() override { }
DEFINE_INLINE_VIRTUAL_TRACE()
{
visitor->trace(m_ownerValue);
CSSPaintImageGenerator::Observer::trace(visitor);
}
void paintImageGeneratorReady() final;
private:
Member<CSSPaintValue> m_ownerValue;
};
void paintImageGeneratorReady();
Member<CSSCustomIdentValue> m_name;
Member<CSSPaintImageGenerator> m_generator;
Member<Observer> m_paintImageGeneratorObserver;
};
DEFINE_CSS_VALUE_TYPE_CASTS(CSSPaintValue, isPaintValue());
} // namespace blink
#endif // CSSPaintValue_h