#pragma once

#include <memory>

class Scene;

template<typename T>
class Image;

class DrawingSurface
{
public:
    DrawingSurface();
    virtual ~DrawingSurface() = default;

    static std::unique_ptr<DrawingSurface> Create();

    virtual void setSize(unsigned width, unsigned height);

    unsigned getWidth() const;

    unsigned getHeight() const;

    Image<unsigned char>* getImage();

    Scene* getScene();

protected:
    unsigned mWidth = 0;
    unsigned mHeight = 0;
    std::unique_ptr<Scene> mScene;
    std::unique_ptr<Image<unsigned char> > mBackingImage;
};
