1ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 2ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org/* 3ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org * Copyright 2011 Google Inc. 4ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org * 5ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be 6ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org * found in the LICENSE file. 7ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org */ 8ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org#include "gm.h" 9ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 10ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgnamespace skiagm { 11ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 128a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.orgstatic const char* gColorTypeNames[] = { 138a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org "unknown", 14ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org "A8", 15ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org "565", 16ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org "4444", 178a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org "8888", 188a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org "8888", 198a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org "Index8", 20ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org}; 21ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 228a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.orgstatic const SkColorType gColorTypes[] = { 238a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org kRGB_565_SkColorType, 248a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org kARGB_4444_SkColorType, 2528fcae2ec77eb16a79e155f8d788b20457f1c951commit-bot@chromium.org kN32_SkColorType, 26ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org}; 27ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 288a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org#define NUM_CONFIGS SK_ARRAY_COUNT(gColorTypes) 29ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 30ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgstatic void draw_checks(SkCanvas* canvas, int width, int height) { 31ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkPaint paint; 32ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org paint.setColor(SK_ColorRED); 3375589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com canvas->drawRectCoords(SkIntToScalar(0), SkIntToScalar(0), 3475589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com SkIntToScalar(width / 2), SkIntToScalar(height / 2), paint); 35ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org paint.setColor(SK_ColorGREEN); 3675589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com canvas->drawRectCoords(SkIntToScalar(width / 2), SkIntToScalar(0), 3775589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com SkIntToScalar(width), SkIntToScalar(height / 2), paint); 38ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org paint.setColor(SK_ColorBLUE); 3975589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com canvas->drawRectCoords(SkIntToScalar(0), SkIntToScalar(height / 2), 4075589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com SkIntToScalar(width / 2), SkIntToScalar(height), paint); 41ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org paint.setColor(SK_ColorYELLOW); 4275589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com canvas->drawRectCoords(SkIntToScalar(width / 2), SkIntToScalar(height / 2), 4375589257c6ac7fc55a66502b74b8bc09c0212featomhudson@google.com SkIntToScalar(width), SkIntToScalar(height), paint); 44ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org} 45ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 46ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgclass BitmapCopyGM : public GM { 47ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgpublic: 48ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkBitmap fDst[NUM_CONFIGS]; 49ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 50ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org BitmapCopyGM() { 51ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org this->setBGColor(0xFFDDDDDD); 52ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 53ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 54ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgprotected: 55ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org virtual SkString onShortName() { 56ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org return SkString("bitmapcopy"); 57ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 58ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 59ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org virtual SkISize onISize() { 60f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(540, 330); 61ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 62ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 63ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org virtual void onDraw(SkCanvas* canvas) { 64ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkPaint paint; 65c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkScalar horizMargin = 10; 66c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkScalar vertMargin = 10; 67ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 68c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkBitmap src; 69c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org src.allocN32Pixels(40, 40); 70c3bd8af6d5722e854feca70c40d92f4954c5b67bcommit-bot@chromium.org SkCanvas canvasTmp(src); 71d55e357a8e276d1f1cd6231d57dda339a2beb76fskia.committer@gmail.com 72488a337ea9673488530b01451470a2b89ec0a54fcommit-bot@chromium.org draw_checks(&canvasTmp, 40, 40); 73ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 74ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org for (unsigned i = 0; i < NUM_CONFIGS; ++i) { 758a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org src.copyTo(&fDst[i], gColorTypes[i]); 76ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 77ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 78ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->clear(0xFFDDDDDD); 79ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org paint.setAntiAlias(true); 805fb6bd4b7e8d00b7f2543ca10ec9022b32632f29caryclark sk_tool_utils::set_portable_typeface(&paint); 815fb6bd4b7e8d00b7f2543ca10ec9022b32632f29caryclark 82ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar width = SkIntToScalar(40); 83ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar height = SkIntToScalar(40); 84ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org if (paint.getFontSpacing() > height) { 85ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org height = paint.getFontSpacing(); 86ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 87ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org for (unsigned i = 0; i < NUM_CONFIGS; i++) { 888a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org const char* name = gColorTypeNames[src.colorType()]; 89ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar textWidth = paint.measureText(name, strlen(name)); 90ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org if (textWidth > width) { 91ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org width = textWidth; 92ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 93ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 94ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar horizOffset = width + horizMargin; 95ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar vertOffset = height + vertMargin; 96ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); 97ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 98ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org for (unsigned i = 0; i < NUM_CONFIGS; i++) { 99ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->save(); 100ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org // Draw destination config name 1018a2ad3cae710f05cca57e48dd1732d575dba2dc7commit-bot@chromium.org const char* name = gColorTypeNames[fDst[i].colorType()]; 102ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar textWidth = paint.measureText(name, strlen(name)); 103ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar x = (width - textWidth) / SkScalar(2); 104ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org SkScalar y = paint.getFontSpacing() / SkScalar(2); 105ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->drawText(name, strlen(name), x, y, paint); 106ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 107ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org // Draw destination bitmap 108ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->translate(0, vertOffset); 109ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org x = (width - 40) / SkScalar(2); 110ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->drawBitmap(fDst[i], x, 0, &paint); 111ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->restore(); 112ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 113ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org canvas->translate(horizOffset, 0); 114ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 115ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org } 116ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 117b4e704306a09448b9d521f5d2607e6d071a35482borenet@google.com virtual uint32_t onGetFlags() const { return kSkipPicture_Flag 118b4e704306a09448b9d521f5d2607e6d071a35482borenet@google.com | kSkipPipe_Flag; } 119ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 120ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgprivate: 121ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org typedef GM INHERITED; 122ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org}; 123ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 124ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org////////////////////////////////////////////////////////////////////////////// 125ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org 126ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgstatic GM* MyFactory(void*) { return new BitmapCopyGM; } 127ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.orgstatic GMRegistry reg(MyFactory); 128ef843cdcd1be858fe55cc99ff134ffbd080c9a51senorblanco@chromium.org} 129