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