blob: 93a631e313fa78c53535e0298140efe45e7af88a [file] [log] [blame]
// Copyright 2015 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 "sky/engine/core/painting/PaintingNode.h"
#include "sky/engine/core/painting/Picture.h"
namespace blink {
class PaintingNodeDrawable : public SkDrawable {
public:
static PassRefPtr<PaintingNodeDrawable> create(PassRefPtr<SkDrawable> skDrawable = nullptr);
~PaintingNodeDrawable() override;
SkRect onGetBounds() override;
void onDraw(SkCanvas* canvas) override;
SkPicture* onNewPictureSnapshot() override;
void set_drawable(PassRefPtr<SkDrawable> drawable) { m_drawable = drawable; }
private:
PaintingNodeDrawable();
explicit PaintingNodeDrawable(PassRefPtr<SkDrawable> skDrawable);
RefPtr<SkDrawable> m_drawable;
};
// static
PassRefPtr<PaintingNodeDrawable> PaintingNodeDrawable::create(PassRefPtr<SkDrawable> skDrawable)
{
return adoptRef(new PaintingNodeDrawable(skDrawable));
}
PaintingNodeDrawable::~PaintingNodeDrawable() {}
PaintingNodeDrawable::PaintingNodeDrawable(PassRefPtr<SkDrawable> skDrawable)
: m_drawable(skDrawable)
{
}
SkPicture* PaintingNodeDrawable::onNewPictureSnapshot()
{
if (!m_drawable)
return nullptr;
return m_drawable->newPictureSnapshot();
}
SkRect PaintingNodeDrawable::onGetBounds()
{
if (!m_drawable)
return SkRect::MakeEmpty();
return m_drawable->getBounds();
}
void PaintingNodeDrawable::onDraw(SkCanvas* canvas)
{
if (!m_drawable)
return;
return m_drawable->draw(canvas);
}
PassRefPtr<PaintingNode> PaintingNode::create()
{
return adoptRef(new PaintingNode());
}
PaintingNode::PaintingNode()
: m_paintingNodeDrawable(PaintingNodeDrawable::create())
{
}
void PaintingNode::setBackingDrawable(PassRefPtr<Drawable> drawable)
{
m_paintingNodeDrawable->set_drawable(drawable->toSkia());
}
SkDrawable* PaintingNode::toSkia()
{
return m_paintingNodeDrawable.get();
}
PassRefPtr<Picture> PaintingNode::newPictureSnapshot()
{
ASSERT(m_paintingNodeDrawable);
return Picture::create(
adoptRef(m_paintingNodeDrawable->newPictureSnapshot()));
}
PaintingNode::~PaintingNode()
{
}
} // namespace blink