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"
9880914c35c8f7fc2e9c57134134c883baf66e538tfarina
1048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comusing namespace skiagm;
1148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
1248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comGM::GM() {
13b21fac156d9287d6c0cfd446d707c4c7be6fae6ecommit-bot@chromium.org    fMode = kGM_Mode;
1448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    fBGColor = SK_ColorWHITE;
15aef73617d1bcede80145a13639668f958a3863d8reed@google.com    fCanvasIsDeferred = false;
167775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com    fHaveCalledOnceBeforeDraw = false;
17f4f9df4c193620167dc6f202f1b72245f4a260cdcommit-bot@chromium.org    fStarterMatrix.reset();
1848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
19880914c35c8f7fc2e9c57134134c883baf66e538tfarina
2048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comGM::~GM() {}
2148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
2248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::draw(SkCanvas* canvas) {
2348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    this->drawBackground(canvas);
2448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    this->drawContent(canvas);
2548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
2648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
2748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::drawContent(SkCanvas* canvas) {
287775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com    if (!fHaveCalledOnceBeforeDraw) {
297775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com        fHaveCalledOnceBeforeDraw = true;
307775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com        this->onOnceBeforeDraw();
317775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com    }
3248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    this->onDraw(canvas);
3348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
3448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
3548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::drawBackground(SkCanvas* canvas) {
367775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com    if (!fHaveCalledOnceBeforeDraw) {
377775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com        fHaveCalledOnceBeforeDraw = true;
387775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com        this->onOnceBeforeDraw();
397775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com    }
4048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    this->onDrawBackground(canvas);
4148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
4248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
4338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgconst char* GM::getName() {
4448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    if (fShortName.size() == 0) {
4548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        fShortName = this->onShortName();
4648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
4748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    return fShortName.c_str();
4848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
4948dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
5048dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::setBGColor(SkColor color) {
5148dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    fBGColor = color;
5248dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
5348dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
5448dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.comvoid GM::onDrawBackground(SkCanvas* canvas) {
55ea5d8af9fb20096f350d2f313935ba37a592c160robertphillips@google.com    canvas->drawColor(fBGColor, SkXfermode::kSrc_Mode);
5648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com}
5748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com
582d6ef528e57928160aba6b628b2d84180ced97c3reed@google.comvoid GM::drawSizeBounds(SkCanvas* canvas, SkColor color) {
592d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com    SkISize size = this->getISize();
602d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com    SkRect r = SkRect::MakeWH(SkIntToScalar(size.width()),
612d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com                              SkIntToScalar(size.height()));
622d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com    SkPaint paint;
632d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com    paint.setColor(color);
642d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com    canvas->drawRect(r, paint);
652d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com}
662d6ef528e57928160aba6b628b2d84180ced97c3reed@google.com
6748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com// need to explicitly declare this, or we get some weird infinite loop llist
68bcbc1788b478b1e54079318ad073e8490aa66faetfarinatemplate GMRegistry* GMRegistry::gHead;
69