1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2011 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "gm/gm.h" 9cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 10cb93a386Sopenharmony_ci#include "include/core/SkColor.h" 11cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 12cb93a386Sopenharmony_ci#include "include/core/SkPoint.h" 13cb93a386Sopenharmony_ci#include "include/core/SkScalar.h" 14cb93a386Sopenharmony_ci#include "include/core/SkSize.h" 15cb93a386Sopenharmony_ci#include "include/core/SkString.h" 16cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h" 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci#include <stddef.h> 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_cinamespace skiagm { 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciclass PointsGM : public GM { 23cb93a386Sopenharmony_cipublic: 24cb93a386Sopenharmony_ci PointsGM() {} 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ciprotected: 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci SkString onShortName() override { 29cb93a386Sopenharmony_ci return SkString("points"); 30cb93a386Sopenharmony_ci } 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci SkISize onISize() override { 33cb93a386Sopenharmony_ci return SkISize::Make(640, 490); 34cb93a386Sopenharmony_ci } 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) { 37cb93a386Sopenharmony_ci for (size_t i = 0; i < n; i++) { 38cb93a386Sopenharmony_ci // Compute these independently and store in variables, rather 39cb93a386Sopenharmony_ci // than in the parameter-passing expression, to get consistent 40cb93a386Sopenharmony_ci // evaluation order across compilers. 41cb93a386Sopenharmony_ci SkScalar y = rand->nextUScalar1() * 480; 42cb93a386Sopenharmony_ci SkScalar x = rand->nextUScalar1() * 640; 43cb93a386Sopenharmony_ci pts[i].set(x, y); 44cb93a386Sopenharmony_ci } 45cb93a386Sopenharmony_ci } 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ci void onDraw(SkCanvas* canvas) override { 48cb93a386Sopenharmony_ci canvas->translate(SK_Scalar1, SK_Scalar1); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci SkRandom rand; 51cb93a386Sopenharmony_ci SkPaint p0, p1, p2, p3; 52cb93a386Sopenharmony_ci const size_t n = 99; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci p0.setColor(SK_ColorRED); 55cb93a386Sopenharmony_ci p1.setColor(SK_ColorGREEN); 56cb93a386Sopenharmony_ci p2.setColor(SK_ColorBLUE); 57cb93a386Sopenharmony_ci p3.setColor(SK_ColorWHITE); 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci p0.setStrokeWidth(SkIntToScalar(4)); 60cb93a386Sopenharmony_ci p2.setStrokeCap(SkPaint::kRound_Cap); 61cb93a386Sopenharmony_ci p2.setStrokeWidth(SkIntToScalar(6)); 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ci SkPoint* pts = new SkPoint[n]; 64cb93a386Sopenharmony_ci fill_pts(pts, n, &rand); 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0); 67cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1); 68cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2); 69cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3); 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci delete[] pts; 72cb93a386Sopenharmony_ci } 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_ciprivate: 75cb93a386Sopenharmony_ci using INHERITED = GM; 76cb93a386Sopenharmony_ci}; 77cb93a386Sopenharmony_ciDEF_GM( return new PointsGM; ) 78cb93a386Sopenharmony_ci} // namespace skiagm 79cb93a386Sopenharmony_ci 80cb93a386Sopenharmony_ci#include "include/core/SkMaskFilter.h" 81cb93a386Sopenharmony_ci 82cb93a386Sopenharmony_ciDEF_SIMPLE_GM(points_maskfilter, canvas, 512, 256) { 83cb93a386Sopenharmony_ci constexpr int N = 30; 84cb93a386Sopenharmony_ci SkPoint pts[N]; 85cb93a386Sopenharmony_ci 86cb93a386Sopenharmony_ci SkRandom rand; 87cb93a386Sopenharmony_ci for (SkPoint& p : pts) { 88cb93a386Sopenharmony_ci p.fX = rand.nextF() * 220 + 18; 89cb93a386Sopenharmony_ci p.fY = rand.nextF() * 220 + 18; 90cb93a386Sopenharmony_ci } 91cb93a386Sopenharmony_ci 92cb93a386Sopenharmony_ci auto mf = SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, 6); 93cb93a386Sopenharmony_ci const SkPaint::Cap caps[] = { SkPaint::kSquare_Cap, SkPaint::kRound_Cap }; 94cb93a386Sopenharmony_ci 95cb93a386Sopenharmony_ci SkPaint paint; 96cb93a386Sopenharmony_ci paint.setAntiAlias(true); 97cb93a386Sopenharmony_ci paint.setStroke(true); 98cb93a386Sopenharmony_ci paint.setStrokeWidth(10); 99cb93a386Sopenharmony_ci 100cb93a386Sopenharmony_ci for (auto cap : caps) { 101cb93a386Sopenharmony_ci paint.setStrokeCap(cap); 102cb93a386Sopenharmony_ci 103cb93a386Sopenharmony_ci paint.setMaskFilter(mf); 104cb93a386Sopenharmony_ci paint.setColor(SK_ColorBLACK); 105cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kPoints_PointMode, N, pts, paint); 106cb93a386Sopenharmony_ci 107cb93a386Sopenharmony_ci paint.setMaskFilter(nullptr); 108cb93a386Sopenharmony_ci paint.setColor(SK_ColorRED); 109cb93a386Sopenharmony_ci canvas->drawPoints(SkCanvas::kPoints_PointMode, N, pts, paint); 110cb93a386Sopenharmony_ci 111cb93a386Sopenharmony_ci canvas->translate(256, 0); 112cb93a386Sopenharmony_ci } 113cb93a386Sopenharmony_ci} 114