|  | /* | 
|  | * Copyright 2024 Google LLC. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  | #include "gm/gm.h" | 
|  | #include "include/core/SkCanvas.h" | 
|  | #include "include/core/SkImageInfo.h" | 
|  | #include "include/core/SkPaint.h" | 
|  | #include "include/core/SkSurface.h" | 
|  |  | 
|  | static void draw_small_circle(SkCanvas* canvas, const SkPaint& p, const float radius) { | 
|  | SkRect oval = SkRect::MakeLTRB(radius * -1, radius * -1, radius, radius); | 
|  | constexpr bool kUseCenter = false; | 
|  | constexpr float kDegrees = 360; | 
|  | canvas->drawArc(oval, 0, kDegrees, kUseCenter, p); | 
|  | } | 
|  |  | 
|  | DEF_SIMPLE_GM(smallcircles, canvas, 425, 425) { | 
|  | auto surface = canvas->makeSurface(SkImageInfo::MakeN32Premul(100, 100)); | 
|  | if (!surface) { | 
|  | surface = SkSurfaces::Raster(SkImageInfo::MakeN32Premul(100, 100)); | 
|  | } | 
|  | SkCanvas* canv = surface->getCanvas(); | 
|  |  | 
|  | canv->translate(5, 5); | 
|  | SkPaint p; | 
|  | p.setAntiAlias(true); | 
|  | p.setStyle(SkPaint::kFill_Style); | 
|  |  | 
|  | // Draw circles | 
|  | for (int i = 0; i < 11; ++i) { | 
|  | canv->save(); | 
|  | for (int j = 0; j < 11; ++j) { | 
|  | draw_small_circle(canv, p, 0.8f); | 
|  | canv->translate(5.1f, 0.f); | 
|  | } | 
|  | canv->restore(); | 
|  | canv->translate(0.f, 5.1f); | 
|  | } | 
|  |  | 
|  | // Scale up image of small circles | 
|  | canvas->scale(7, 7); | 
|  | auto img = surface->makeImageSnapshot(); | 
|  | canvas->drawImage(img, 0, 0); | 
|  | } |