| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "flutter/flow/testing/mock_texture.h" |
| #include "flutter/flow/layers/layer.h" |
| #include "flutter/testing/display_list_testing.h" |
| |
| namespace flutter { |
| namespace testing { |
| |
| sk_sp<DlImage> MockTexture::MakeTestTexture(int w, int h, int checker_size) { |
| sk_sp<SkSurface> surface = |
| SkSurfaces::Raster(SkImageInfo::MakeN32Premul(w, h)); |
| SkCanvas* canvas = surface->getCanvas(); |
| SkPaint p0, p1; |
| p0.setStyle(SkPaint::kFill_Style); |
| p0.setColor(SK_ColorGREEN); |
| p1.setStyle(SkPaint::kFill_Style); |
| p1.setColor(SK_ColorBLUE); |
| p1.setAlpha(128); |
| for (int y = 0; y < w; y += checker_size) { |
| for (int x = 0; x < h; x += checker_size) { |
| SkPaint& cellp = ((x + y) & 1) == 0 ? p0 : p1; |
| canvas->drawRect(SkRect::MakeXYWH(x, y, checker_size, checker_size), |
| cellp); |
| } |
| } |
| return DlImage::Make(surface->makeImageSnapshot()); |
| } |
| |
| MockTexture::MockTexture(int64_t textureId, const sk_sp<DlImage>& texture) |
| : Texture(textureId), texture_(texture) {} |
| |
| void MockTexture::Paint(PaintContext& context, |
| const SkRect& bounds, |
| bool freeze, |
| const DlImageSampling sampling) { |
| // MockTexture objects that are not painted are allowed to have a null |
| // texture, but when we get to this method we must have a non-null texture. |
| FML_DCHECK(texture_ != nullptr); |
| SkRect src = SkRect::Make(texture_->bounds()); |
| if (freeze) { |
| FML_DCHECK(src.width() > 2.0f && src.height() > 2.0f); |
| src = src.makeInset(1.0f, 1.0f); |
| } |
| context.canvas->DrawImageRect(texture_, src, bounds, sampling, context.paint); |
| } |
| |
| } // namespace testing |
| } // namespace flutter |