12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "include/core/SkCanvas.h"
- #include "include/core/SkPaint.h"
- #include "include/core/SkShader.h"
- #include "include/utils/SkRandom.h"
- #include "samplecode/Sample.h"
- /**
- * Animated sample used to develop a predecessor of GrDrawOp combining.
- */
- class ManyRectsView : public Sample {
- private:
- enum {
- N = 1000,
- };
- public:
- ManyRectsView() {}
- protected:
- SkString name() override { return SkString("ManyRects"); }
- void onDrawContent(SkCanvas* canvas) override {
- SkISize dsize = canvas->getBaseLayerSize();
- canvas->clear(0xFFF0E0F0);
- for (int i = 0; i < N; ++i) {
- SkRect rect = SkRect::MakeWH(SkIntToScalar(fRandom.nextRangeU(10, 100)),
- SkIntToScalar(fRandom.nextRangeU(10, 100)));
- int x = fRandom.nextRangeU(0, dsize.fWidth);
- int y = fRandom.nextRangeU(0, dsize.fHeight);
- canvas->save();
- canvas->translate(SkIntToScalar(x), SkIntToScalar(y));
- // Uncomment to test rotated rect draw combining.
- if (false) {
- SkMatrix rotate;
- rotate.setRotate(fRandom.nextUScalar1() * 360,
- SkIntToScalar(x) + SkScalarHalf(rect.fRight),
- SkIntToScalar(y) + SkScalarHalf(rect.fBottom));
- canvas->concat(rotate);
- }
- SkRect clipRect = rect;
- // This clip will always contain the entire rect. It's here to give the GPU op combining
- // code a little more challenge.
- clipRect.outset(10, 10);
- canvas->clipRect(clipRect);
- SkPaint paint;
- paint.setColor(fRandom.nextU());
- canvas->drawRect(rect, paint);
- canvas->restore();
- }
- }
- private:
- SkRandom fRandom;
- typedef Sample INHERITED;
- };
- //////////////////////////////////////////////////////////////////////////////
- DEF_SAMPLE( return new ManyRectsView(); )
|