1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2016 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 "include/core/SkCanvas.h" 9cb93a386Sopenharmony_ci#include "include/core/SkPath.h" 10cb93a386Sopenharmony_ci#include "include/utils/SkRandom.h" 11cb93a386Sopenharmony_ci#include "samplecode/Sample.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ciclass MegaStrokeView : public Sample { 14cb93a386Sopenharmony_cipublic: 15cb93a386Sopenharmony_ci MegaStrokeView() { 16cb93a386Sopenharmony_ci fClip.setLTRB(0, 0, 950, 600); 17cb93a386Sopenharmony_ci fAngle = 0; 18cb93a386Sopenharmony_ci fPlusMinus = 0; 19cb93a386Sopenharmony_ci SkRandom rand; 20cb93a386Sopenharmony_ci fMegaPath.reset(); 21cb93a386Sopenharmony_ci for (int index = 0; index < 921; ++index) { 22cb93a386Sopenharmony_ci for (int segs = 0; segs < 40; ++segs) { 23cb93a386Sopenharmony_ci fMegaPath.lineTo(SkIntToScalar(index), SkIntToScalar(rand.nextRangeU(500, 600))); 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci } 26cb93a386Sopenharmony_ci } 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ciprotected: 29cb93a386Sopenharmony_ci SkString name() override { return SkString("MegaStroke"); } 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci bool onChar(SkUnichar uni) override { 32cb93a386Sopenharmony_ci fClip.setLTRB(0, 0, 950, 600); 33cb93a386Sopenharmony_ci return true; 34cb93a386Sopenharmony_ci } 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci void onDrawBackground(SkCanvas* canvas) override { 37cb93a386Sopenharmony_ci } 38cb93a386Sopenharmony_ci 39cb93a386Sopenharmony_ci void onDrawContent(SkCanvas* canvas) override { 40cb93a386Sopenharmony_ci SkPaint paint; 41cb93a386Sopenharmony_ci paint.setAntiAlias(true); 42cb93a386Sopenharmony_ci paint.setARGB(255,255,153,0); 43cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 44cb93a386Sopenharmony_ci paint.setStrokeWidth(1); 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci canvas->save(); 47cb93a386Sopenharmony_ci canvas->clipRect(fClip); 48cb93a386Sopenharmony_ci canvas->clear(SK_ColorWHITE); 49cb93a386Sopenharmony_ci canvas->drawPath(fMegaPath, paint); 50cb93a386Sopenharmony_ci canvas->restore(); 51cb93a386Sopenharmony_ci 52cb93a386Sopenharmony_ci SkPaint divSimPaint; 53cb93a386Sopenharmony_ci divSimPaint.setColor(SK_ColorBLUE); 54cb93a386Sopenharmony_ci SkScalar x = SkScalarSin(fAngle * SK_ScalarPI / 180) * 200 + 250; 55cb93a386Sopenharmony_ci SkScalar y = SkScalarCos(fAngle * SK_ScalarPI / 180) * 200 + 250; 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci if ((fPlusMinus ^= 1)) { 58cb93a386Sopenharmony_ci fAngle += 5; 59cb93a386Sopenharmony_ci } else { 60cb93a386Sopenharmony_ci fAngle -= 5; 61cb93a386Sopenharmony_ci } 62cb93a386Sopenharmony_ci SkRect divSim = SkRect::MakeXYWH(x, y, 100, 100); 63cb93a386Sopenharmony_ci divSim.outset(30, 30); 64cb93a386Sopenharmony_ci canvas->drawRect(divSim, divSimPaint); 65cb93a386Sopenharmony_ci fClip = divSim; 66cb93a386Sopenharmony_ci } 67cb93a386Sopenharmony_ci 68cb93a386Sopenharmony_ci void onSizeChange() override { 69cb93a386Sopenharmony_ci fClip.setWH(950, 600); 70cb93a386Sopenharmony_ci } 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_ci bool onAnimate(double /*nanos*/) override { return true; } 73cb93a386Sopenharmony_ci 74cb93a386Sopenharmony_ciprivate: 75cb93a386Sopenharmony_ci SkPath fMegaPath; 76cb93a386Sopenharmony_ci SkRect fClip; 77cb93a386Sopenharmony_ci int fAngle; 78cb93a386Sopenharmony_ci int fPlusMinus; 79cb93a386Sopenharmony_ci using INHERITED = Sample; 80cb93a386Sopenharmony_ci}; 81cb93a386Sopenharmony_ci 82cb93a386Sopenharmony_ci////////////////////////////////////////////////////////////////////////////// 83cb93a386Sopenharmony_ci 84cb93a386Sopenharmony_ciDEF_SAMPLE( return new MegaStrokeView(); ) 85