1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "third_party/blink/renderer/platform/graphics/image_pattern.h"
6 
7 #include "third_party/blink/renderer/platform/graphics/image.h"
8 #include "third_party/blink/renderer/platform/graphics/paint/paint_shader.h"
9 #include "third_party/skia/include/core/SkImage.h"
10 
11 namespace blink {
12 
Create(scoped_refptr<Image> image,RepeatMode repeat_mode)13 scoped_refptr<ImagePattern> ImagePattern::Create(scoped_refptr<Image> image,
14                                                  RepeatMode repeat_mode) {
15   return base::AdoptRef(new ImagePattern(std::move(image), repeat_mode));
16 }
17 
ImagePattern(scoped_refptr<Image> image,RepeatMode repeat_mode)18 ImagePattern::ImagePattern(scoped_refptr<Image> image, RepeatMode repeat_mode)
19     : Pattern(repeat_mode), tile_image_(image->PaintImageForCurrentFrame()) {}
20 
CreateShader(const SkMatrix & local_matrix)21 sk_sp<PaintShader> ImagePattern::CreateShader(const SkMatrix& local_matrix) {
22   if (!tile_image_) {
23     return PaintShader::MakeColor(SK_ColorTRANSPARENT);
24   }
25 
26   return PaintShader::MakeImage(
27       tile_image_, IsRepeatX() ? SkTileMode::kRepeat : SkTileMode::kDecal,
28       IsRepeatY() ? SkTileMode::kRepeat : SkTileMode::kDecal, &local_matrix);
29 }
30 
IsTextureBacked() const31 bool ImagePattern::IsTextureBacked() const {
32   return tile_image_ && tile_image_.GetSkImage()->isTextureBacked();
33 }
34 
35 }  // namespace blink
36