| // Copyright (c) 2012 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 UI_GFX_IMAGE_CANVAS_IMAGE_SOURCE_H_ |
| #define UI_GFX_IMAGE_CANVAS_IMAGE_SOURCE_H_ |
| |
| #include <utility> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "ui/gfx/geometry/size.h" |
| #include "ui/gfx/gfx_export.h" |
| #include "ui/gfx/image/image_skia.h" |
| #include "ui/gfx/image/image_skia_source.h" |
| |
| namespace gfx { |
| class Canvas; |
| class ImageSkiaRep; |
| class Insets; |
| |
| // CanvasImageSource is useful if you need to generate an image for a scale |
| // factor using Canvas. It creates a new Canvas with target scale factor and |
| // generates ImageSkiaRep when drawing is completed. |
| class GFX_EXPORT CanvasImageSource : public ImageSkiaSource { |
| public: |
| // Factory function to create an ImageSkia from a CanvasImageSource. Example: |
| // ImageSkia my_image = |
| // CanvasImageSource::MakeImageSkia<MySource>(param1, param2); |
| 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); |
| } |
| |
| // Creates a Image containing |image| with transparent padding around the |
| // edges as specified by |insets|. |
| 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 {} |
| |
| // Called when a new image needs to be drawn for a scale factor. |
| virtual void Draw(Canvas* canvas) = 0; |
| |
| // Returns the size of images in DIP that this source will generate. |
| const Size& size() const { return size_; } |
| |
| // Overridden from ImageSkiaSource. |
| ImageSkiaRep GetImageForScale(float scale) override; |
| |
| protected: |
| const Size size_; |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GFX_IMAGE_CANVAS_IMAGE_SOURCE_H_ |