| // 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 |