148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com/* 248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * Copyright 2011 Google Inc. 348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * 448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com * found in the LICENSE file. 648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com */ 748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 10b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon#include "SkShader.h" 11b323a5ed1f26a5b8e4e9f8f78225bdf95dc5a177Mike Klein#include "SkTraceEvent.h" 1248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comusing namespace skiagm; 1348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 1448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comGM::GM() { 15b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org fMode = kGM_Mode; 1648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com fBGColor = SK_ColorWHITE; 17aef73617d1bcede80145a13639668f958a3863d8reed@google.com fCanvasIsDeferred = false; 187775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com fHaveCalledOnceBeforeDraw = false; 1948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 20880914c35c8f7fc2e9c57134134c883baf66e538tfarina 2148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comGM::~GM() {} 2248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 2348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::draw(SkCanvas* canvas) { 24b323a5ed1f26a5b8e4e9f8f78225bdf95dc5a177Mike Klein TRACE_EVENT1("GM", TRACE_FUNC, "name", TRACE_STR_COPY(this->getName())); 2548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com this->drawBackground(canvas); 2648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com this->drawContent(canvas); 2748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 2848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 2948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::drawContent(SkCanvas* canvas) { 30b323a5ed1f26a5b8e4e9f8f78225bdf95dc5a177Mike Klein TRACE_EVENT0("GM", TRACE_FUNC); 317775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com if (!fHaveCalledOnceBeforeDraw) { 327775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com fHaveCalledOnceBeforeDraw = true; 337775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com this->onOnceBeforeDraw(); 347775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com } 3548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com this->onDraw(canvas); 3648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 3748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 3848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::drawBackground(SkCanvas* canvas) { 39b323a5ed1f26a5b8e4e9f8f78225bdf95dc5a177Mike Klein TRACE_EVENT0("GM", TRACE_FUNC); 407775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com if (!fHaveCalledOnceBeforeDraw) { 417775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com fHaveCalledOnceBeforeDraw = true; 427775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com this->onOnceBeforeDraw(); 437775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com } 4448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com this->onDrawBackground(canvas); 4548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 4648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 4738aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgconst char* GM::getName() { 4848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com if (fShortName.size() == 0) { 4948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com fShortName = this->onShortName(); 5048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com } 5148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com return fShortName.c_str(); 5248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 5348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 5448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::setBGColor(SkColor color) { 5548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com fBGColor = color; 5648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 5748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 5876113a9b7716748c70ea0ecf7aacbabe4cce5009reedbool GM::animate(const SkAnimTimer& timer) { 5976113a9b7716748c70ea0ecf7aacbabe4cce5009reed return this->onAnimate(timer); 60d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed} 61d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed 62d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed///////////////////////////////////////////////////////////////////////////////////////////// 63d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed 6448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::onDrawBackground(SkCanvas* canvas) { 65374772bd61951f01bf84fe17bf53d8867681c9aereed canvas->drawColor(fBGColor, SkBlendMode::kSrc); 6648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com} 6748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com 682d6ef528e57928160aba6b628b2d84180ced97c3reed@google.comvoid GM::drawSizeBounds(SkCanvas* canvas, SkColor color) { 692d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com SkISize size = this->getISize(); 702d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()), 712d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com SkIntToScalar(size.height())); 722d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com SkPaint paint; 732d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com paint.setColor(color); 742d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com canvas->drawRect(r, paint); 752d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com} 762d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com 772a24338c777462e04a2b26295f9c034155ee8f3ehalcanaryvoid GM::DrawGpuOnlyMessage(SkCanvas* canvas) { 78b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon SkBitmap bmp; 79b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon bmp.allocN32Pixels(128, 64); 80b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon SkCanvas bmpCanvas(bmp); 81b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon bmpCanvas.drawColor(SK_ColorWHITE); 82b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon SkPaint paint; 83b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon paint.setAntiAlias(true); 84b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon paint.setTextSize(20); 85b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon paint.setColor(SK_ColorRED); 86f597c42c50718d5c39769077040de1768c89bbd3caryclark sk_tool_utils::set_portable_typeface(&paint); 87dbfd7ab10883f173f5c1b653a233e18dc6142002mtklein constexpr char kTxt[] = "GPU Only"; 882a475eae622adc1e8fa29206be1eaf862c23548eCary Clark bmpCanvas.drawString(kTxt, 20, 40, paint); 89b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon SkMatrix localM; 90b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon localM.setRotate(35.f); 91b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon localM.postTranslate(10.f, 0.f); 928a21c9fe7f5fef9e87115defef27bd7218419f28reed paint.setShader(SkShader::MakeBitmapShader(bmp, SkShader::kMirror_TileMode, 938a21c9fe7f5fef9e87115defef27bd7218419f28reed SkShader::kMirror_TileMode, 948a21c9fe7f5fef9e87115defef27bd7218419f28reed &localM)); 95b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon paint.setFilterQuality(kMedium_SkFilterQuality); 96b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon canvas->drawPaint(paint); 97b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon return; 98b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon} 99b62da80cbf6643c1944d3ebf8df233f286bd3fdebsalomon 10048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com// need to explicitly declare this, or we get some weird infinite loop llist 101bcbc1788b478b1e54079318ad073e8490aa66faetfarinatemplate GMRegistry* GMRegistry::gHead; 102f62c63490f0cba13eaadce720b58a95720b2df86halcanary 103f62c63490f0cba13eaadce720b58a95720b2df86halcanaryvoid skiagm::SimpleGM::onDraw(SkCanvas* canvas) { 104f62c63490f0cba13eaadce720b58a95720b2df86halcanary fDrawProc(canvas); 105f62c63490f0cba13eaadce720b58a95720b2df86halcanary} 106f62c63490f0cba13eaadce720b58a95720b2df86halcanary 107f62c63490f0cba13eaadce720b58a95720b2df86halcanarySkISize skiagm::SimpleGM::onISize() { 108f62c63490f0cba13eaadce720b58a95720b2df86halcanary return fSize; 109f62c63490f0cba13eaadce720b58a95720b2df86halcanary} 110f62c63490f0cba13eaadce720b58a95720b2df86halcanary 111f62c63490f0cba13eaadce720b58a95720b2df86halcanarySkString skiagm::SimpleGM::onShortName() { 112f62c63490f0cba13eaadce720b58a95720b2df86halcanary return fName; 113f62c63490f0cba13eaadce720b58a95720b2df86halcanary} 114