xref: /aosp_15_r20/external/skia/tools/fiddle/examples.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 
4 #include "tools/fiddle/examples.h"
5 
6 #if defined(SK_FONTMGR_FONTCONFIG_AVAILABLE)
7 #include "include/ports/SkFontMgr_fontconfig.h"
8 #include "include/ports/SkFontScanner_FreeType.h"
9 #endif
10 
11 #if defined(SK_FONTMGR_CORETEXT_AVAILABLE)
12 #include "include/ports/SkFontMgr_mac_ct.h"
13 #endif
14 
15 #if defined(SK_FONTMGR_DIRECTWRITE_AVAILABLE)
16 #include "include/ports/SkTypeface_win.h"
17 #endif
18 
19 #if defined(SK_FONTMGR_FREETYPE_DIRECTORY_AVAILABLE)
20 #include "include/ports/SkFontMgr_directory.h"
21 #endif
22 
23 template sk_tools::Registry<fiddle::Example>* sk_tools::Registry<fiddle::Example>::gHead;
24 
25 // These globals are needed by fiddles:
26 GrBackendTexture backEndTexture;
27 GrBackendRenderTarget backEndRenderTarget;
28 GrBackendTexture backEndTextureRenderTarget;
29 SkBitmap source;
30 sk_sp<SkImage> image;
31 double duration = 1.0;
32 double frame = 1.0;
33 sk_sp<SkFontMgr> fontMgr;
34 
main()35 int main() {
36     constexpr int kImgCount = 7;
37     sk_sp<SkImage> images[kImgCount];
38     SkBitmap bitmaps[kImgCount];
39     for (int i = 1; i < kImgCount; ++i) {
40         SkString path = SkStringPrintf("resources/images/example_%d.png", i);
41         images[i] = SkImages::DeferredFromEncodedData(SkData::MakeFromFileName(path.c_str()));
42         SkAssertResult(images[i] && images[i]->asLegacyBitmap(&bitmaps[i]));
43     }
44 #if defined(SK_FONTMGR_FONTCONFIG_AVAILABLE)
45     fontMgr = SkFontMgr_New_FontConfig(nullptr, SkFontScanner_Make_FreeType());
46 #elif defined(SK_FONTMGR_CORETEXT_AVAILABLE)
47     fontMgr = SkFontMgr_New_CoreText(nullptr);
48 #elif defined(SK_FONTMGR_DIRECTWRITE_AVAILABLE)
49     fontMgr = SkFontMgr_New_DirectWrite();
50 #elif defined(SK_FONTMGR_FREETYPE_DIRECTORY_AVAILABLE)
51     fontMgr = SkFontMgr_New_Custom_Directory("/usr/share/fonts/");
52 #else
53     #error "Unsupported OS"
54 #endif
55     for (const fiddle::Example& example : sk_tools::Registry<fiddle::Example>::Range()) {
56         SkASSERT((unsigned)example.fImageIndex < (unsigned)kImgCount);
57         image = images[example.fImageIndex];
58         source = bitmaps[example.fImageIndex];
59         SkBitmap bmp;
60         bmp.allocN32Pixels(example.fWidth, example.fHeight);
61         bmp.eraseColor(SK_ColorWHITE);
62         SkCanvas canvas(bmp);
63         SkDebugf("==> %s\n", example.fName);
64         example.fFunc(&canvas);
65     }
66 }
67