// 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.

#ifndef SKY_ENGINE_CORE_PAINTING_PICTURERECORDER_H_
#define SKY_ENGINE_CORE_PAINTING_PICTURERECORDER_H_

#include "sky/engine/core/painting/Rect.h"
#include "sky/engine/tonic/dart_wrappable.h"
#include "sky/engine/wtf/PassRefPtr.h"
#include "sky/engine/wtf/RefCounted.h"
#include "third_party/skia/include/core/SkPictureRecorder.h"

namespace blink {

class Canvas;
class Drawable;
class Picture;

class PictureRecorder : public RefCounted<PictureRecorder>,
                        public DartWrappable {
    DEFINE_WRAPPERTYPEINFO();
public:
    static PassRefPtr<PictureRecorder> create()
    {
        return adoptRef(new PictureRecorder());
    }

    ~PictureRecorder();

    // PassRefPtr<Canvas> beginRecording(double width, double height);
    SkCanvas* beginRecording(Rect bounds);
    PassRefPtr<Picture> endRecording();
    PassRefPtr<Drawable> endRecordingAsDrawable();
    bool isRecording();

    void set_canvas(PassRefPtr<Canvas> canvas);

private:
    PictureRecorder();

    SkRTreeFactory m_rtreeFactory;
    SkPictureRecorder m_pictureRecorder;
    RefPtr<Canvas> m_canvas;
};

} // namespace blink

#endif  // SKY_ENGINE_CORE_PAINTING_PICTURERECORDER_H_
