21 {
24 if (!duckyFG[0] || !duckyBG) {
25 *errorMsg = "Image(s) failed to load.";
27 }
28
29
30
31 if (auto* rContext = canvas->recordingContext(); rContext && !rContext->abandoned()) {
33 skgpu::Mipmapped::kYes);
34 if (lazyYUV) {
36 }
37 if (!duckyFG[1]) {
39 }
40 } else {
41 duckyFG[1] = duckyFG[0];
42 }
43
44 static constexpr int kNumPerRow = 4;
45 static constexpr int kPad = 10;
47 int rowCnt = 0;
49 canvas->save();
50 auto newRow = [&] {
51 canvas->restore();
52 canvas->translate(0, kDstRect.height() +
kPad);
53 canvas->save();
54 rowCnt = 0;
55 };
60 for (auto& fg : duckyFG) {
63 ++bm) {
64 canvas->drawImageRect(duckyBG, kDstRect, sampling, nullptr);
67 canvas->drawImageRect(fg, kDstRect, sampling, &
paint);
68 canvas->translate(kDstRect.width() +
kPad, 0);
69 if (++rowCnt == kNumPerRow) {
70 newRow();
71 }
72 }
73
74 newRow();
75 }
76 canvas->restore();
78}
sk_sp< SkData > GetResourceAsData(const char *resource)
@ kLastCoeffMode
last porter duff blend mode
@ kLastMode
last valid value
constexpr SkColor SK_ColorLTGRAY
constexpr SkColor SK_ColorDKGRAY
static std::unique_ptr< LazyYUVImage > Make(sk_sp< SkData > data, skgpu::Mipmapped=skgpu::Mipmapped::kNo, sk_sp< SkColorSpace >=nullptr)
SkSamplingOptions sampling
static constexpr SkRect MakeWH(float w, float h)