1d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com/* 2d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com * Copyright 2013 Google Inc. 3d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com * 4d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 5d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com * found in the LICENSE file. 6d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com */ 7d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SampleCode.h" 8d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SkCanvas.h" 9d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SkPaint.h" 10d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SkRandom.h" 11d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SkShader.h" 12d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com#include "SkView.h" 13d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 14d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com/** 1509d994ecb30de2e62a31af2c16307af31fe0e0b3Brian Salomon * Animated sample used to develop a predecessor of GrDrawOp combining. 16d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com */ 17d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comclass ManyRectsView : public SampleView { 18d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comprivate: 19d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com enum { 20d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com N = 1000, 21d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com }; 22d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 23d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.compublic: 24d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com ManyRectsView() {} 25d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 26d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comprotected: 2736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool onQuery(SkEvent* evt) override { 28d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com if (SampleCode::TitleQ(*evt)) { 29d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SampleCode::TitleR(evt, "ManyRects"); 30d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com return true; 31d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com } 32d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com return this->INHERITED::onQuery(evt); 33d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com } 34d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 35f059900f75639f1b1a03f2c25333ef9aa22d58b8mtklein void onDrawContent(SkCanvas* canvas) override { 363661bc997620899695041010a750d11dbe8a972dMike Reed SkISize dsize = canvas->getBaseLayerSize(); 37d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->clear(0xFFF0E0F0); 38d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 39d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com for (int i = 0; i < N; ++i) { 40d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkRect rect = SkRect::MakeWH(SkIntToScalar(fRandom.nextRangeU(10, 100)), 41d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkIntToScalar(fRandom.nextRangeU(10, 100))); 42d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com int x = fRandom.nextRangeU(0, dsize.fWidth); 43d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com int y = fRandom.nextRangeU(0, dsize.fHeight); 44d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->save(); 45d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 46d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 4709d994ecb30de2e62a31af2c16307af31fe0e0b3Brian Salomon // Uncomment to test rotated rect draw combining. 48d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com if (false) { 49d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkMatrix rotate; 50d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com rotate.setRotate(fRandom.nextUScalar1() * 360, 51d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkIntToScalar(x) + SkScalarHalf(rect.fRight), 52d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkIntToScalar(y) + SkScalarHalf(rect.fBottom)); 53d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->concat(rotate); 54d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com } 55d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkRect clipRect = rect; 5609d994ecb30de2e62a31af2c16307af31fe0e0b3Brian Salomon // This clip will always contain the entire rect. It's here to give the GPU op combining 57d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com // code a little more challenge. 58d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com clipRect.outset(10, 10); 59d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->clipRect(clipRect); 60d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com SkPaint paint; 61d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com paint.setColor(fRandom.nextU()); 62d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->drawRect(rect, paint); 63d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com canvas->restore(); 64d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com } 65d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com } 66d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 67d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comprivate: 68e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom fRandom; 69d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com typedef SampleView INHERITED; 70d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com}; 71d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 72d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com////////////////////////////////////////////////////////////////////////////// 73d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.com 74d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comstatic SkView* MyFactory() { return new ManyRectsView; } 75d62e88e5af39347a8fc2a5abdf5feb67d7ea256dbsalomon@google.comstatic SkViewRegister reg(MyFactory); 76