#ifndef UI_GFX_IMAGE_CANVAS_IMAGE_SOURCE_H_
#define UI_GFX_IMAGE_CANVAS_IMAGE_SOURCE_H_
#include <utility>
#include "base/component_export.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_source.h"
namespace gfx {
class Canvas;
class ImageSkiaRep;
class Insets;
class COMPONENT_EXPORT(GFX) CanvasImageSource : public ImageSkiaSource {
public:
template <typename T, typename... Args>
static ImageSkia MakeImageSkia(Args&&... args) {
auto source = std::make_unique<T>(std::forward<Args>(args)...);
Size size = source->size();
return ImageSkia(std::move(source), size);
}
static ImageSkia CreatePadded(const ImageSkia& image, const Insets& insets);
explicit CanvasImageSource(const Size& size);
CanvasImageSource(const CanvasImageSource&) = delete;
CanvasImageSource& operator=(const CanvasImageSource&) = delete;
~CanvasImageSource() override {}
virtual void Draw(Canvas* canvas) = 0;
const Size& size() const { return size_; }
ImageSkiaRep GetImageForScale(float scale) override;
protected:
const Size size_;
};
}
#endif