158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/* 258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc. 358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * 458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file. 658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "gm.h" 958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergernamespace skiagm { 1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger// Draw rects with various stroke widths at 1/8 pixel increments 1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass ThinStrokedRectsGM : public GM { 1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic: 1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger ThinStrokedRectsGM() { 1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger this->setBGColor(0xFF000000); 1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprotected: 2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual SkString onShortName() SK_OVERRIDE { 2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return SkString("thinstrokedrects"); 2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual SkISize onISize() SK_OVERRIDE { 2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger return make_isize(240, 320); 2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPaint paint; 3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setColor(SK_ColorWHITE); 3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setStyle(SkPaint::kStroke_Style); 3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setAntiAlias(true); 3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static const SkRect rect = { 0, 0, 10, 10 }; 3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static const SkRect rect2 = { 0, 0, 20, 20 }; 3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static const SkScalar gStrokeWidths[] = { 3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4, 2, 1, 0.5f, 0.25f, 0.125f, 0 4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(5, 5); 4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (int i = 0; i < 8; ++i) { 4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->save(); 4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(i*0.125f, i*30.0f); 4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (size_t j = 0; j < SK_ARRAY_COUNT(gStrokeWidths); ++j) { 4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setStrokeWidth(gStrokeWidths[j]); 4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->drawRect(rect, paint); 4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(15, 0); 5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->restore(); 5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger // Draw a second time in red with a scale 5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setColor(SK_ColorRED); 5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(0, 15); 5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (int i = 0; i < 8; ++i) { 5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->save(); 5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(i*0.125f, i*30.0f); 6058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->scale(0.5f, 0.5f); 6158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger for (size_t j = 0; j < SK_ARRAY_COUNT(gStrokeWidths); ++j) { 6258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger paint.setStrokeWidth(2.0f * gStrokeWidths[j]); 6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->drawRect(rect2, paint); 6458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->translate(30, 0); 6558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 6658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger canvas->restore(); 6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 6858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger } 6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate: 7158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger typedef GM INHERITED; 7258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger}; 7358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger////////////////////////////////////////////////////////////////////////////// 7558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek SollenbergerDEF_GM( return SkNEW(ThinStrokedRectsGM); ) 7758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger} 79