// 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 CC_PAINT_DRAW_IMAGE_H_ #define CC_PAINT_DRAW_IMAGE_H_ #include "base/optional.h" #include "cc/paint/paint_export.h" #include "cc/paint/paint_image.h" #include "third_party/skia/include/core/SkFilterQuality.h" #include "third_party/skia/include/core/SkImage.h" #include "third_party/skia/include/core/SkMatrix.h" #include "third_party/skia/include/core/SkRect.h" #include "third_party/skia/include/core/SkRefCnt.h" #include "ui/gfx/color_space.h" #include "ui/gfx/geometry/size_f.h" namespace cc { class CC_PAINT_EXPORT DrawImage { public: DrawImage(); DrawImage(PaintImage image, const SkIRect& src_rect, SkFilterQuality filter_quality, const SkMatrix& matrix, base::Optional frame_index = base::nullopt, const base::Optional& color_space = base::nullopt); // Constructs a DrawImage from |other| by adjusting its scale and setting a // new color_space. DrawImage(const DrawImage& other, float scale_adjustment, size_t frame_index, const gfx::ColorSpace& color_space); DrawImage(const DrawImage& other); DrawImage(DrawImage&& other); ~DrawImage(); DrawImage& operator=(DrawImage&& other); DrawImage& operator=(const DrawImage& other); bool operator==(const DrawImage& other) const; const PaintImage& paint_image() const { return paint_image_; } const SkSize& scale() const { return scale_; } const SkIRect& src_rect() const { return src_rect_; } SkFilterQuality filter_quality() const { return filter_quality_; } bool matrix_is_decomposable() const { return matrix_is_decomposable_; } const gfx::ColorSpace& target_color_space() const { DCHECK(target_color_space_.has_value()); return *target_color_space_; } PaintImage::FrameKey frame_key() const { return paint_image_.GetKeyForFrame(frame_index()); } size_t frame_index() const { DCHECK(frame_index_.has_value()); return frame_index_.value(); } private: PaintImage paint_image_; SkIRect src_rect_; SkFilterQuality filter_quality_; SkSize scale_; bool matrix_is_decomposable_; base::Optional frame_index_; base::Optional target_color_space_; }; } // namespace cc #endif // CC_PAINT_DRAW_IMAGE_H_