2 * Copyright 2012 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
11 #include "SkStippleMaskFilter.h"
16 * Stress test the samplers by rendering a textured glyph with a mask and
19 class SamplerStressGM : public GM {
22 : fTextureCreated(false)
27 virtual ~SamplerStressGM() {
31 virtual uint32_t onGetFlags() const SK_OVERRIDE {
32 return kSkipTiled_Flag;
35 virtual SkString onShortName() {
36 return SkString("samplerstress");
39 virtual SkISize onISize() {
40 return SkISize::Make(640, 480);
44 * Create a red & green stripes on black texture
46 void createTexture() {
47 if (fTextureCreated) {
51 static const int xSize = 16;
52 static const int ySize = 16;
54 fTexture.allocN32Pixels(xSize, ySize);
55 SkPMColor* addr = fTexture.getAddr32(0, 0);
57 for (int y = 0; y < ySize; ++y) {
58 for (int x = 0; x < xSize; ++x) {
59 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorBLACK);
62 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorRED);
65 addr[y*xSize+x] = SkPreMultiplyColor(SK_ColorGREEN);
70 fTextureCreated = true;
74 if (NULL != fShader.get()) {
80 fShader.reset(SkShader::CreateBitmapShader(fTexture,
81 SkShader::kRepeat_TileMode,
82 SkShader::kRepeat_TileMode));
85 void createMaskFilter() {
86 if (NULL != fMaskFilter.get()) {
90 fMaskFilter.reset(SkStippleMaskFilter::Create());
93 virtual void onDraw(SkCanvas* canvas) {
100 // draw a letter "M" with a green & red striped texture and a
101 // stipple mask with a round rect soft clip
103 paint.setAntiAlias(true);
104 paint.setTextSize(72);
105 paint.setShader(fShader.get());
106 paint.setMaskFilter(fMaskFilter.get());
109 temp.set(SkIntToScalar(115),
115 path.addRoundRect(temp, SkIntToScalar(5), SkIntToScalar(5));
117 canvas->clipPath(path, SkRegion::kReplace_Op, true); // AA is on
119 canvas->drawText("M", 1,
120 SkIntToScalar(100), SkIntToScalar(100),
125 // Now draw stroked versions of the "M" and the round rect so we can
126 // see what is going on
128 paint2.setColor(SK_ColorBLACK);
129 paint2.setAntiAlias(true);
130 paint2.setTextSize(72);
131 paint2.setStyle(SkPaint::kStroke_Style);
132 paint2.setStrokeWidth(1);
133 canvas->drawText("M", 1,
134 SkIntToScalar(100), SkIntToScalar(100),
137 paint2.setColor(SK_ColorGRAY);
139 canvas->drawPath(path, paint2);
144 bool fTextureCreated;
145 SkAutoTUnref<SkShader> fShader;
146 SkAutoTUnref<SkMaskFilter> fMaskFilter;
148 typedef GM INHERITED;
151 //////////////////////////////////////////////////////////////////////////////
153 static GM* MyFactory(void*) { return new SamplerStressGM; }
154 static GMRegistry reg(MyFactory);