xref: /aosp_15_r20/external/skia/docs/examples/SKIA_LOGO_ANIMATE.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2020 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 #include "tools/fiddle/examples.h"
4*c8dee2aaSAndroid Build Coastguard Worker REG_FIDDLE_ANIMATED(SKIA_LOGO_ANIMATE, 816, 464, false, 0, 2) {
draw(SkCanvas * canvas)5*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas* canvas) {
6*c8dee2aaSAndroid Build Coastguard Worker     canvas->scale(4.0f, 4.0f);
7*c8dee2aaSAndroid Build Coastguard Worker     const SkColor background = SK_ColorWHITE;  // SK_ColorTRANSPARENT;
8*c8dee2aaSAndroid Build Coastguard Worker     const SkColor lettering = 0xFF292929;
9*c8dee2aaSAndroid Build Coastguard Worker     const SkColor lineColors[2] = {0x30565656, 0xFF565656};
10*c8dee2aaSAndroid Build Coastguard Worker     SkPath s, k, a, triangle;
11*c8dee2aaSAndroid Build Coastguard Worker     SkPaint p;
12*c8dee2aaSAndroid Build Coastguard Worker     p.setAntiAlias(true);
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker     canvas->clear(background);
15*c8dee2aaSAndroid Build Coastguard Worker     canvas->scale(0.363f, 0.363f);
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker     s.moveTo(34.63, 100.63);
19*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(44.38, 88.57, 59.87, 82.86, 74.88, 81.2);
20*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(97.4, 78.5, 120.27, 83.25, 140.87, 92.37);
21*c8dee2aaSAndroid Build Coastguard Worker     s.lineTo(127.12, 127.14);
22*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(113.55, 121.16, 99.04, 115.9, 83.98, 116.56);
23*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(78.86, 116.75, 72.88, 118.54, 70.71, 123.69);
24*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(68.62, 128.43, 71.52, 133.68, 75.58, 136.27);
25*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(91.49, 146.66, 110.67, 151.38, 125.46, 163.6);
26*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(132.35, 169.11, 137.33, 176.9, 139.36, 185.49);
27*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(142.55, 199.14, 140.94, 214.31, 133.13, 226.17);
28*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(126.23, 236.96, 114.82, 244.16, 102.75, 247.89);
29*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(87.95, 252.51, 72.16, 252.21, 56.88, 250.78);
30*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(45.54, 249.72, 34.64, 246.05, 24.32, 241.36);
31*c8dee2aaSAndroid Build Coastguard Worker     s.lineTo(24.25, 201.1);
32*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(38.23, 208.15, 53.37, 213.15, 68.98, 214.75);
33*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(75.42, 215.25, 82.17, 215.63, 88.31, 213.27);
34*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(92.84, 211.53, 96.4, 206.93, 95.86, 201.93);
35*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(95.64, 196.77, 91.1, 193.38, 87.03, 190.99);
36*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(71.96, 182.67, 54.94, 177.66, 41.5, 166.57);
37*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(33.19, 159.73, 27.51, 149.8, 26.1, 139.11);
38*c8dee2aaSAndroid Build Coastguard Worker     s.cubicTo(24.09, 125.88, 25.91, 111.25, 34.63, 100.63);
39*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawPath(s, p);
40*c8dee2aaSAndroid Build Coastguard Worker 
41*c8dee2aaSAndroid Build Coastguard Worker     k.moveTo(160.82, 82.85);
42*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(206.05, 82.85);
43*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(206.05, 155.15);
44*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(254.83, 82.84);
45*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(304.01, 82.85);
46*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(251.52, 157.27);
47*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(303.09, 249.42);
48*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(252.28, 249.4);
49*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(219.18, 185.75);
50*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(206.23, 193.45);
51*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(206.05, 249.42);
52*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(160.82, 249.42);
53*c8dee2aaSAndroid Build Coastguard Worker     k.lineTo(160.82, 82.85);
54*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawPath(k, p);
55*c8dee2aaSAndroid Build Coastguard Worker 
56*c8dee2aaSAndroid Build Coastguard Worker     a.moveTo(426.45, 218.16);
57*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(480.705, 218.16);
58*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(489.31, 249.4);
59*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(538.54, 249.42);
60*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(483.56, 82.18);
61*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(423.43, 82.17);
62*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(369.13, 249.42);
63*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(418.5, 249.47);
64*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(453.75, 109.83);
65*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(471.77, 181.28);
66*c8dee2aaSAndroid Build Coastguard Worker     a.lineTo(430.5, 181.28);
67*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawPath(a, p);
68*c8dee2aaSAndroid Build Coastguard Worker 
69*c8dee2aaSAndroid Build Coastguard Worker     canvas->save();
70*c8dee2aaSAndroid Build Coastguard Worker 
71*c8dee2aaSAndroid Build Coastguard Worker     float pos = frame > 0.5 ? 1 : frame * 2;
72*c8dee2aaSAndroid Build Coastguard Worker     canvas->translate((1-pos) * -200.0, 0.0);
73*c8dee2aaSAndroid Build Coastguard Worker 
74*c8dee2aaSAndroid Build Coastguard Worker     const SkColor rgb[] = {0xFFE94037, 0xFF70BF4F, 0xFF465BA6};
75*c8dee2aaSAndroid Build Coastguard Worker     const uint8_t alpha = pos*255.999;
76*c8dee2aaSAndroid Build Coastguard Worker 
77*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(rgb[1]);
78*c8dee2aaSAndroid Build Coastguard Worker     p.setAlpha(alpha);
79*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawRect({326.0, 82.25, 343.9, 249.2}, p);
80*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(rgb[0]);
81*c8dee2aaSAndroid Build Coastguard Worker     p.setAlpha(alpha);
82*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawRect({310.2, 82.25, 327.0, 249.2}, p);
83*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(rgb[2]);
84*c8dee2aaSAndroid Build Coastguard Worker     p.setAlpha(alpha);
85*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawRect({342.9, 82.25, 358.87, 249.2}, p);
86*c8dee2aaSAndroid Build Coastguard Worker 
87*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(lettering);
88*c8dee2aaSAndroid Build Coastguard Worker     //p.setAlpha(cast_alpha(pos));
89*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawCircle(335.355, 45.965, 29.25, p);
90*c8dee2aaSAndroid Build Coastguard Worker 
91*c8dee2aaSAndroid Build Coastguard Worker     triangle.reset();
92*c8dee2aaSAndroid Build Coastguard Worker     triangle.moveTo(362.64, 257.32);
93*c8dee2aaSAndroid Build Coastguard Worker     triangle.lineTo(335.292, 293.392);
94*c8dee2aaSAndroid Build Coastguard Worker     triangle.lineTo(307.8, 257.48);
95*c8dee2aaSAndroid Build Coastguard Worker     triangle.lineTo(362.64, 257.32);
96*c8dee2aaSAndroid Build Coastguard Worker     p.setColor(lettering);
97*c8dee2aaSAndroid Build Coastguard Worker     canvas->drawPath(triangle, p);
98*c8dee2aaSAndroid Build Coastguard Worker 
99*c8dee2aaSAndroid Build Coastguard Worker     canvas->restore();
100*c8dee2aaSAndroid Build Coastguard Worker 
101*c8dee2aaSAndroid Build Coastguard Worker     // line
102*c8dee2aaSAndroid Build Coastguard Worker     const SkPoint pts[2] = {{160, 290}, {341, 290}};
103*c8dee2aaSAndroid Build Coastguard Worker     p.setShader(SkGradientShader::MakeLinear(
104*c8dee2aaSAndroid Build Coastguard Worker             pts, lineColors, nullptr, 2, SkTileMode::kClamp));
105*c8dee2aaSAndroid Build Coastguard Worker     if (true) {
106*c8dee2aaSAndroid Build Coastguard Worker         SkRRect rrectClip;
107*c8dee2aaSAndroid Build Coastguard Worker         rrectClip.setRectXY({138, 291, 138 + pos*(341-138), 300}, 25.0, 5.0);
108*c8dee2aaSAndroid Build Coastguard Worker         canvas->clipRRect(rrectClip, SkClipOp::kIntersect);
109*c8dee2aaSAndroid Build Coastguard Worker         SkRRect rrect;
110*c8dee2aaSAndroid Build Coastguard Worker         rrect.setRectXY({138, 291, 341, 300}, 25.0, 5.0);
111*c8dee2aaSAndroid Build Coastguard Worker         canvas->drawRRect(rrect, p);
112*c8dee2aaSAndroid Build Coastguard Worker     } else {
113*c8dee2aaSAndroid Build Coastguard Worker         SkPath path;
114*c8dee2aaSAndroid Build Coastguard Worker         path.addRoundRect({138, 291, 341, 299.95}, 25.0, 5.0);
115*c8dee2aaSAndroid Build Coastguard Worker         canvas->drawPath(path, p);
116*c8dee2aaSAndroid Build Coastguard Worker     }
117*c8dee2aaSAndroid Build Coastguard Worker }
118*c8dee2aaSAndroid Build Coastguard Worker }  // END FIDDLE
119