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#include "include/core/SkBitmap.h" 8cb93a386Sopenharmony_ci#include "include/core/SkCanvas.h" 9cb93a386Sopenharmony_ci#include "include/core/SkPaint.h" 10cb93a386Sopenharmony_ci#include "include/core/SkShader.h" 11cb93a386Sopenharmony_ci#include "samplecode/Sample.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_cistatic SkBitmap createBitmap(int n) { 14cb93a386Sopenharmony_ci SkBitmap bitmap; 15cb93a386Sopenharmony_ci bitmap.allocN32Pixels(n, n); 16cb93a386Sopenharmony_ci bitmap.eraseColor(SK_ColorGREEN); 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ci SkCanvas canvas(bitmap); 19cb93a386Sopenharmony_ci SkRect r; 20cb93a386Sopenharmony_ci r.setWH(SkIntToScalar(n), SkIntToScalar(n)); 21cb93a386Sopenharmony_ci SkPaint paint; 22cb93a386Sopenharmony_ci paint.setAntiAlias(true); 23cb93a386Sopenharmony_ci 24cb93a386Sopenharmony_ci paint.setColor(SK_ColorRED); 25cb93a386Sopenharmony_ci canvas.drawOval(r, paint); 26cb93a386Sopenharmony_ci paint.setColor(SK_ColorBLUE); 27cb93a386Sopenharmony_ci paint.setStrokeWidth(SkIntToScalar(n)/15); 28cb93a386Sopenharmony_ci paint.setStyle(SkPaint::kStroke_Style); 29cb93a386Sopenharmony_ci canvas.drawLine(0, 0, r.fRight, r.fBottom, paint); 30cb93a386Sopenharmony_ci canvas.drawLine(0, r.fBottom, r.fRight, 0, paint); 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ci return bitmap; 33cb93a386Sopenharmony_ci} 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_cistatic constexpr int N = 64; 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ciclass AARectView : public Sample { 38cb93a386Sopenharmony_ci SkBitmap fBitmap; 39cb93a386Sopenharmony_ci 40cb93a386Sopenharmony_ci void onOnceBeforeDraw() override { 41cb93a386Sopenharmony_ci fBitmap = createBitmap(N); 42cb93a386Sopenharmony_ci } 43cb93a386Sopenharmony_ci 44cb93a386Sopenharmony_ci SkString name() override { return SkString("AA Rects"); } 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci void onDrawContent(SkCanvas* canvas) override { 47cb93a386Sopenharmony_ci canvas->translate(SkIntToScalar(10), SkIntToScalar(10)); 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_ci SkPaint bluePaint; 50cb93a386Sopenharmony_ci bluePaint.setARGB(0xff, 0x0, 0x0, 0xff); 51cb93a386Sopenharmony_ci SkPaint bmpPaint; 52cb93a386Sopenharmony_ci bmpPaint.setShader(fBitmap.makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, 53cb93a386Sopenharmony_ci SkSamplingOptions())); 54cb93a386Sopenharmony_ci bluePaint.setStrokeWidth(3); 55cb93a386Sopenharmony_ci bmpPaint.setStrokeWidth(3); 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci SkPaint paints[] = { bluePaint, bmpPaint }; 58cb93a386Sopenharmony_ci 59cb93a386Sopenharmony_ci SkRect rect; 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_ci SkScalar dx = SkIntToScalar(80); 62cb93a386Sopenharmony_ci SkScalar dy = SkIntToScalar(100); 63cb93a386Sopenharmony_ci SkMatrix matrix; 64cb93a386Sopenharmony_ci for (size_t p = 0; p < SK_ARRAY_COUNT(paints); ++p) { 65cb93a386Sopenharmony_ci for (int stroke = 0; stroke < 2; ++stroke) { 66cb93a386Sopenharmony_ci paints[p].setStyle(stroke ? SkPaint::kStroke_Style : SkPaint::kFill_Style); 67cb93a386Sopenharmony_ci for (int a = 0; a < 3; ++ a) { 68cb93a386Sopenharmony_ci paints[p].setAntiAlias(a > 0); 69cb93a386Sopenharmony_ci paints[p].setAlpha(a > 1 ? 0x80 : 0xff); 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci canvas->save(); 72cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.f, 73cb93a386Sopenharmony_ci 0.f, 74cb93a386Sopenharmony_ci 40.f, 75cb93a386Sopenharmony_ci 40.f); 76cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 77cb93a386Sopenharmony_ci canvas->translate(dx, 0); 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.5f, 80cb93a386Sopenharmony_ci 0.5f, 81cb93a386Sopenharmony_ci 40.5f, 82cb93a386Sopenharmony_ci 40.5f); 83cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 84cb93a386Sopenharmony_ci canvas->translate(dx, 0); 85cb93a386Sopenharmony_ci 86cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.5f, 87cb93a386Sopenharmony_ci 0.5f, 88cb93a386Sopenharmony_ci 40.f, 89cb93a386Sopenharmony_ci 40.f); 90cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 91cb93a386Sopenharmony_ci canvas->translate(dx, 0); 92cb93a386Sopenharmony_ci 93cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.75f, 94cb93a386Sopenharmony_ci 0.75f, 95cb93a386Sopenharmony_ci 40.75f, 96cb93a386Sopenharmony_ci 40.75f); 97cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 98cb93a386Sopenharmony_ci canvas->translate(dx, 0); 99cb93a386Sopenharmony_ci 100cb93a386Sopenharmony_ci canvas->save(); 101cb93a386Sopenharmony_ci canvas->translate(.33f, .67f); 102cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.0f, 103cb93a386Sopenharmony_ci 0.0f, 104cb93a386Sopenharmony_ci 40.0f, 105cb93a386Sopenharmony_ci 40.0f); 106cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 107cb93a386Sopenharmony_ci canvas->restore(); 108cb93a386Sopenharmony_ci canvas->translate(dx, 0); 109cb93a386Sopenharmony_ci 110cb93a386Sopenharmony_ci canvas->save(); 111cb93a386Sopenharmony_ci matrix.setRotate(45.f); 112cb93a386Sopenharmony_ci canvas->concat(matrix); 113cb93a386Sopenharmony_ci canvas->translate(20.0f / sqrtf(2.f), 114cb93a386Sopenharmony_ci 20.0f / sqrtf(2.f)); 115cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(-20.0f, 116cb93a386Sopenharmony_ci -20.0f, 117cb93a386Sopenharmony_ci 20.0f, 118cb93a386Sopenharmony_ci 20.0f); 119cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 120cb93a386Sopenharmony_ci canvas->restore(); 121cb93a386Sopenharmony_ci canvas->translate(dx, 0); 122cb93a386Sopenharmony_ci 123cb93a386Sopenharmony_ci canvas->save(); 124cb93a386Sopenharmony_ci canvas->rotate(90.f); 125cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.0f, 126cb93a386Sopenharmony_ci 0.0f, 127cb93a386Sopenharmony_ci 40.0f, 128cb93a386Sopenharmony_ci -40.0f); 129cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 130cb93a386Sopenharmony_ci canvas->restore(); 131cb93a386Sopenharmony_ci canvas->translate(dx, 0); 132cb93a386Sopenharmony_ci 133cb93a386Sopenharmony_ci canvas->save(); 134cb93a386Sopenharmony_ci canvas->rotate(90.f); 135cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.5f, 136cb93a386Sopenharmony_ci 0.5f, 137cb93a386Sopenharmony_ci 40.5f, 138cb93a386Sopenharmony_ci -40.5f); 139cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 140cb93a386Sopenharmony_ci canvas->restore(); 141cb93a386Sopenharmony_ci canvas->translate(dx, 0); 142cb93a386Sopenharmony_ci 143cb93a386Sopenharmony_ci canvas->save(); 144cb93a386Sopenharmony_ci matrix.setScale(-1.f, -1.f); 145cb93a386Sopenharmony_ci canvas->concat(matrix); 146cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.5f, 147cb93a386Sopenharmony_ci 0.5f, 148cb93a386Sopenharmony_ci -40.5f, 149cb93a386Sopenharmony_ci -40.5f); 150cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 151cb93a386Sopenharmony_ci canvas->restore(); 152cb93a386Sopenharmony_ci canvas->translate(dx, 0); 153cb93a386Sopenharmony_ci 154cb93a386Sopenharmony_ci canvas->save(); 155cb93a386Sopenharmony_ci matrix.setScale(2.1f, 4.1f); 156cb93a386Sopenharmony_ci canvas->concat(matrix); 157cb93a386Sopenharmony_ci rect = SkRect::MakeLTRB(0.1f, 158cb93a386Sopenharmony_ci 0.1f, 159cb93a386Sopenharmony_ci 19.1f, 160cb93a386Sopenharmony_ci 9.1f); 161cb93a386Sopenharmony_ci canvas->drawRect(rect, paints[p]); 162cb93a386Sopenharmony_ci canvas->restore(); 163cb93a386Sopenharmony_ci canvas->translate(dx, 0); 164cb93a386Sopenharmony_ci 165cb93a386Sopenharmony_ci canvas->restore(); 166cb93a386Sopenharmony_ci canvas->translate(0, dy); 167cb93a386Sopenharmony_ci } 168cb93a386Sopenharmony_ci } 169cb93a386Sopenharmony_ci } 170cb93a386Sopenharmony_ci } 171cb93a386Sopenharmony_ci 172cb93a386Sopenharmony_ciprivate: 173cb93a386Sopenharmony_ci 174cb93a386Sopenharmony_ci using INHERITED = Sample; 175cb93a386Sopenharmony_ci}; 176cb93a386Sopenharmony_ci 177cb93a386Sopenharmony_ci////////////////////////////////////////////////////////////////////////////// 178cb93a386Sopenharmony_ci 179cb93a386Sopenharmony_ciDEF_SAMPLE( return new AARectView(); ) 180