1dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com/* 2dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com * Copyright 2013 Google Inc. 3dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com * 4dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com * Use of this source code is governed by a BSD-style license that can be 5dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com * found in the LICENSE file. 6dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com */ 7dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 8dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com#include "gm.h" 9dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 10dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comnamespace skiagm { 11dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 12dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com// Draw various width thin rects at 1/8 horizontal pixel increments 13dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comclass ThinRectsGM : public GM { 14dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.compublic: 15dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com ThinRectsGM() { 16dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com this->setBGColor(0xFF000000); 17dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 18dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 19dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comprotected: 20dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com virtual SkString onShortName() SK_OVERRIDE { 21dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com return SkString("thinrects"); 22dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 23dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 24dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com virtual SkISize onISize() SK_OVERRIDE { 25f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(240, 320); 26dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 27dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 28dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 29dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 30dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com SkPaint white; 31dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com white.setColor(SK_ColorWHITE); 32dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com white.setAntiAlias(true); 33dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 34dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com SkPaint green; 35dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com green.setColor(SK_ColorGREEN); 36dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com green.setAntiAlias(true); 37dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 38dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com for (int i = 0; i < 8; ++i) { 39dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->save(); 40dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->translate(i*0.125f, i*40.0f); 41dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawVertRects(canvas, white); 42dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 43dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->translate(40.0f, 0.0f); 44dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawVertRects(canvas, green); 45dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->restore(); 46dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 47dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->save(); 48dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->translate(80.0f, i*40.0f + i*0.125f); 49dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawHorizRects(canvas, white); 50dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 51dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->translate(40.0f, 0.0f); 52dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawHorizRects(canvas, green); 53dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->restore(); 54dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 55dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->save(); 56eafdf126d44abadf01e7d2910739e228f557df51skia.committer@gmail.com canvas->translate(160.0f + i*0.125f, 57dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com i*40.0f + i*0.125f); 58dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawSquares(canvas, white); 59dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 60dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->translate(40.0f, 0.0f); 61dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com DrawSquares(canvas, green); 62dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->restore(); 63dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 64dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 65dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 66dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comprivate: 67dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static void DrawVertRects(SkCanvas* canvas, const SkPaint& p) { 68dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static const SkRect vertRects[] = { 69dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 1, 5.0f, 21 }, // 4 pix wide 70dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 8, 1, 10.0f, 21 }, // 2 pix wide 71dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 13, 1, 14.0f, 21 }, // 1 pix wide 72dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 17, 1, 17.5f, 21 }, // 1/2 pix wide 73dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 21, 1, 21.25f, 21 }, // 1/4 pix wide 74dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 25, 1, 25.125f, 21 }, // 1/8 pix wide 75dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 29, 1, 29.0f, 21 } // 0 pix wide 76dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com }; 77dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 781a095191b22e0aa62fb1671e4bab9d3e50cf5c12robertphillips@google.com for (size_t j = 0; j < SK_ARRAY_COUNT(vertRects); ++j) { 79dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->drawRect(vertRects[j], p); 80dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 81dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 82dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 83dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static void DrawHorizRects(SkCanvas* canvas, const SkPaint& p) { 84dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static const SkRect horizRects[] = { 85dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 1, 21, 5.0f }, // 4 pix high 86dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 8, 21, 10.0f }, // 2 pix high 87dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 13, 21, 14.0f }, // 1 pix high 88dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 17, 21, 17.5f }, // 1/2 pix high 89dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 21, 21, 21.25f }, // 1/4 pix high 90dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 25, 21, 25.125f }, // 1/8 pix high 91dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 29, 21, 29.0f } // 0 pix high 92dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com }; 93dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 941a095191b22e0aa62fb1671e4bab9d3e50cf5c12robertphillips@google.com for (size_t j = 0; j < SK_ARRAY_COUNT(horizRects); ++j) { 95dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->drawRect(horizRects[j], p); 96dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 97dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 98dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 99dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static void DrawSquares(SkCanvas* canvas, const SkPaint& p) { 100dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com static const SkRect squares[] = { 101dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 1, 1, 5.0f, 5.0f }, // 4 pix 102dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 8, 8, 10.0f, 10.0f }, // 2 pix 103dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 13, 13, 14.0f, 14.0f }, // 1 pix 104dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 17, 17, 17.5f, 17.5f }, // 1/2 pix 105dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 21, 21, 21.25f, 21.25f }, // 1/4 pix 106dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 25, 25, 25.125f, 25.125f }, // 1/8 pix 107dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com { 29, 29, 29.0f, 29.0f } // 0 pix 108dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com }; 109dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 1101a095191b22e0aa62fb1671e4bab9d3e50cf5c12robertphillips@google.com for (size_t j = 0; j < SK_ARRAY_COUNT(squares); ++j) { 111dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com canvas->drawRect(squares[j], p); 112dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 113dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com } 114dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 115dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com typedef GM INHERITED; 116dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com}; 117dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 118dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com////////////////////////////////////////////////////////////////////////////// 119dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 120dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comstatic GM* MyFactory(void*) { return new ThinRectsGM; } 121dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.comstatic GMRegistry reg(MyFactory); 122dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com 123dd3f36548240c255206135ab3ab86c0ee381c09drobertphillips@google.com} 124