1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2013 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 "samplecode/Sample.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ci// Reproduces https://code.google.com/p/chromium/issues/detail?id=279014 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ci// Renders a string art shape. 15cb93a386Sopenharmony_ci// The particular shape rendered can be controlled by clicking horizontally, thereby 16cb93a386Sopenharmony_ci// generating an angle from 0 to 1. 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciclass StringArtView : public Sample { 19cb93a386Sopenharmony_cipublic: 20cb93a386Sopenharmony_ci StringArtView() : fAngle(0.305f) {} 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ciprotected: 23cb93a386Sopenharmony_ci SkString name() override { return SkString("StringArt"); } 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ci void onDrawContent(SkCanvas* canvas) override { 26cb93a386Sopenharmony_ci SkScalar angle = fAngle*SK_ScalarPI + SkScalarHalf(SK_ScalarPI); 27cb93a386Sopenharmony_ci 28cb93a386Sopenharmony_ci SkPoint center = SkPoint::Make(SkScalarHalf(this->width()), SkScalarHalf(this->height())); 29cb93a386Sopenharmony_ci SkScalar length = 5; 30cb93a386Sopenharmony_ci SkScalar step = angle; 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci SkPath path; 33cb93a386Sopenharmony_ci path.moveTo(center); 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci while (length < (SkScalarHalf(std::min(this->width(), this->height())) - 10.f)) 36cb93a386Sopenharmony_ci { 37cb93a386Sopenharmony_ci SkPoint rp = SkPoint::Make(length*SkScalarCos(step) + center.fX, 38cb93a386Sopenharmony_ci length*SkScalarSin(step) + center.fY); 39cb93a386Sopenharmony_ci path.lineTo(rp); 40cb93a386Sopenharmony_ci length += angle / SkScalarHalf(SK_ScalarPI); 41cb93a386Sopenharmony_ci step += angle; 42cb93a386Sopenharmony_ci } 43cb93a386Sopenharmony_ci path.close(); 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci SkPaint paint; 46cb93a386Sopenharmony_ci paint.setAntiAlias(true); 47cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 48cb93a386Sopenharmony_ci paint.setColor(0xFF007700); 49cb93a386Sopenharmony_ci 50cb93a386Sopenharmony_ci canvas->drawPath(path, paint); 51cb93a386Sopenharmony_ci } 52cb93a386Sopenharmony_ci 53cb93a386Sopenharmony_ci Sample::Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey) override { 54cb93a386Sopenharmony_ci fAngle = x/width(); 55cb93a386Sopenharmony_ci return nullptr; 56cb93a386Sopenharmony_ci } 57cb93a386Sopenharmony_ciprivate: 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci SkScalar fAngle; 60cb93a386Sopenharmony_ci using INHERITED = Sample; 61cb93a386Sopenharmony_ci}; 62cb93a386Sopenharmony_ci 63cb93a386Sopenharmony_ci////////////////////////////////////////////////////////////////////////////// 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ciDEF_SAMPLE( return new StringArtView(); ) 66