1b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com/* 2b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com * Copyright 2011 Google Inc. 3b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com * 4b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com * Use of this source code is governed by a BSD-style license that can be 5b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com * found in the LICENSE file. 6b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com */ 7b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 8b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com#include "gm.h" 9b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 107873333236ba36ac123312666a0b9f7755e73642commit-bot@chromium.orgstatic void make_bitmap(SkBitmap* bitmap, SkIRect* center) { 11b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const int kFixed = 28; 12b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const int kStretchy = 8; 13b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const int kSize = 2*kFixed + kStretchy; 14cf8fb1f6f03fc77f9927564f9ef9abeeeec508d2bsalomon@google.com 15eb9a46cbbb475e862a084aa2224ec18d4ac5e95breed@google.com bitmap->allocN32Pixels(kSize, kSize); 16c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkCanvas canvas(*bitmap); 17dbfac8a72393eaf01670aeb3244de0e18d8faf98junov@google.com canvas.clear(SK_ColorTRANSPARENT); 18d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 19b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkRect r = SkRect::MakeWH(SkIntToScalar(kSize), SkIntToScalar(kSize)); 20b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkScalar strokeWidth = SkIntToScalar(6); 21b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkScalar radius = SkIntToScalar(kFixed) - strokeWidth/2; 22d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 23b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com center->setXYWH(kFixed, kFixed, kStretchy, kStretchy); 24d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 25b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkPaint paint; 26b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com paint.setAntiAlias(true); 27d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 28b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com paint.setColor(0xFFFF0000); 29b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com canvas.drawRoundRect(r, radius, radius, paint); 30b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com r.setXYWH(SkIntToScalar(kFixed), 0, SkIntToScalar(kStretchy), SkIntToScalar(kSize)); 31b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com paint.setColor(0x8800FF00); 32b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com canvas.drawRect(r, paint); 33b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com r.setXYWH(0, SkIntToScalar(kFixed), SkIntToScalar(kSize), SkIntToScalar(kStretchy)); 34b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com paint.setColor(0x880000FF); 35b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com canvas.drawRect(r, paint); 36b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com} 37b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 38b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comnamespace skiagm { 39d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 40b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comclass NinePatchStretchGM : public GM { 41b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.compublic: 42b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkBitmap fBM; 43b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 44d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com NinePatchStretchGM() {} 45b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 46b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comprotected: 47b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com virtual SkString onShortName() { 48b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com return SkString("ninepatch-stretch"); 49b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 50b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 51d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com virtual SkISize onISize() { 52f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(400, 400); 53b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 54b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 55b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com virtual void onDraw(SkCanvas* canvas) { 56b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkBitmap bm; 57b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkIRect center; 587873333236ba36ac123312666a0b9f7755e73642commit-bot@chromium.org make_bitmap(&bm, ¢er); 59d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 60b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com // amount of bm that should not be stretched (unless we have to) 61b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkScalar fixed = SkIntToScalar(bm.width() - center.width()); 62d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 63b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkTSize<SkScalar> size[] = { 64b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4 / 5, fixed * 4 / 5 }, // shrink in both axes 65b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4 / 5, fixed * 4 }, // shrink in X 66b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4, fixed * 4 / 5 }, // shrink in Y 67b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4, fixed * 4 } 68b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com }; 69d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 70b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com canvas->drawBitmap(bm, SkIntToScalar(10), SkIntToScalar(10), NULL); 71d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 72b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkScalar x = SkIntToScalar(100); 73b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkScalar y = SkIntToScalar(100); 74d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 75b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkPaint paint; 7693a1215fe0ab007ce941c721f1fd3e9dcb5d4754reed paint.setFilterQuality(kLow_SkFilterQuality); 77d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 78b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com for (int iy = 0; iy < 2; ++iy) { 79b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com for (int ix = 0; ix < 2; ++ix) { 80b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com int i = ix * 2 + iy; 81b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkRect r = SkRect::MakeXYWH(x + ix * fixed, y + iy * fixed, 82b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com size[i].width(), size[i].height()); 839c9b8d90c822132e205af4c70363fe3a272d6c6freed@google.com canvas->drawBitmapNine(bm, center, r, &paint); 84b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 85b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 86b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 87d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 88b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comprivate: 89b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com typedef GM INHERITED; 90b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com}; 91b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 92b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com////////////////////////////////////////////////////////////////////////////// 93b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 94b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comstatic GM* MyFactory(void*) { return new NinePatchStretchGM; } 95b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comstatic GMRegistry reg(MyFactory); 96b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 97b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com} 98