xref: /aosp_15_r20/external/skia/docs/examples/Surface_MakeRenderTarget_2.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 // Copyright 2019 Google LLC.
2 // Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3 #include "tools/fiddle/examples.h"
4 REG_FIDDLE(Surface_MakeRenderTarget_2, 256, 256, false, 0) {
draw(SkCanvas * canvas)5 void draw(SkCanvas* canvas) {
6     auto test_draw = [](SkCanvas* surfaceCanvas) -> void {
7         SkFont font(fontMgr->matchFamilyStyle(nullptr, {}), 32);
8 
9         SkPaint paint;
10         paint.setAntiAlias(true);
11         // TODO: where did this setting go?
12         //paint.setLCDRenderText(true);
13         paint.setColor(0xFFBBBBBB);
14 
15         surfaceCanvas->drawRect(SkRect::MakeWH(128, 64), paint);
16         paint.setColor(SK_ColorWHITE);
17         surfaceCanvas->drawString("Text", 0, 25, font, paint);
18     };
19     auto context = canvas->recordingContext();
20     SkImageInfo info = SkImageInfo::MakeN32(128, 64, kOpaque_SkAlphaType);
21     int y = 0;
22     for (auto geometry : { kRGB_H_SkPixelGeometry, kBGR_H_SkPixelGeometry,
23                            kRGB_V_SkPixelGeometry, kBGR_V_SkPixelGeometry } ) {
24         SkSurfaceProps props(0, geometry);
25         sk_sp<SkSurface> surface =
26                 context ? SkSurfaces::RenderTarget(context, skgpu::Budgeted::kNo, info, 0, &props)
27                         : SkSurfaces::Raster(info, &props);
28         test_draw(surface->getCanvas());
29         surface->draw(canvas, 0, y);
30         sk_sp<SkImage> image(surface->makeImageSnapshot());
31         SkAutoCanvasRestore acr(canvas, true);
32         canvas->scale(8, 8);
33         canvas->drawImage(image, 12, y / 8);
34         y += 64;
35     }
36 }
37 }  // END FIDDLE
38