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: 47a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org virtual uint32_t onGetFlags() const SK_OVERRIDE { 48a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org return kSkipTiled_Flag; 49a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org } 50a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 51b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com virtual SkString onShortName() { 52b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com return SkString("ninepatch-stretch"); 53b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 54b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 55d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com virtual SkISize onISize() { 56f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(400, 400); 57b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 58b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 59b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com virtual void onDraw(SkCanvas* canvas) { 60b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkBitmap bm; 61b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkIRect center; 627873333236ba36ac123312666a0b9f7755e73642commit-bot@chromium.org make_bitmap(&bm, ¢er); 63d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 64b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com // amount of bm that should not be stretched (unless we have to) 65b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkScalar fixed = SkIntToScalar(bm.width() - center.width()); 66d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 67b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com const SkTSize<SkScalar> size[] = { 68b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4 / 5, fixed * 4 / 5 }, // shrink in both axes 69b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4 / 5, fixed * 4 }, // shrink in X 70b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4, fixed * 4 / 5 }, // shrink in Y 71b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com { fixed * 4, fixed * 4 } 72b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com }; 73d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 74b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com canvas->drawBitmap(bm, SkIntToScalar(10), SkIntToScalar(10), NULL); 75d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 76b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkScalar x = SkIntToScalar(100); 77b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkScalar y = SkIntToScalar(100); 78d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 79b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkPaint paint; 804469938e92d779dff05e745559e67907bbf21e78reed@google.com paint.setFilterLevel(SkPaint::kLow_FilterLevel); 81d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 82b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com for (int iy = 0; iy < 2; ++iy) { 83b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com for (int ix = 0; ix < 2; ++ix) { 84b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com int i = ix * 2 + iy; 85b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com SkRect r = SkRect::MakeXYWH(x + ix * fixed, y + iy * fixed, 86b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com size[i].width(), size[i].height()); 879c9b8d90c822132e205af4c70363fe3a272d6c6freed@google.com canvas->drawBitmapNine(bm, center, r, &paint); 88b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 89b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 90b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com } 91d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com 92b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comprivate: 93b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com typedef GM INHERITED; 94b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com}; 95b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 96b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com////////////////////////////////////////////////////////////////////////////// 97b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 98b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comstatic GM* MyFactory(void*) { return new NinePatchStretchGM; } 99b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.comstatic GMRegistry reg(MyFactory); 100b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com 101b67052596f8abebbbc6399c682b20a7dffeeecefreed@google.com} 102