1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
81936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com#include "gm.h"
91936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com#include "SkColorPriv.h"
101936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com#include "SkShader.h"
111936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com#include "SkCanvas.h"
121936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com#include "SkUtils.h"
131936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
141936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comnamespace skiagm {
151936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
161936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comstatic SkBitmap make_bitmap() {
170a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    const SkPMColor c[] = { SkPackARGB32(0x80, 0x80, 0, 0) };
180a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    SkColorTable* ctable = new SkColorTable(c, SK_ARRAY_COUNT(c));
1948d9ff5b3475ad4b345fae35e1ce36b34069691breed@google.com
200a6151d66cc32d91eca037c91e557158cf8a2be2reed@google.com    SkBitmap bm;
21dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.org    bm.allocPixels(SkImageInfo::Make(1, 1, kIndex_8_SkColorType,
22dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.org                                     kPremul_SkAlphaType),
23dac522589e9395b4654a1a708f1bd971f37f95a5commit-bot@chromium.org                   NULL, ctable);
241936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    ctable->unref();
251936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
261936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    bm.lockPixels();
271936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    *bm.getAddr8(0, 0) = 0;
281936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    bm.unlockPixels();
291936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    return bm;
301936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com}
311936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
321936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comclass TinyBitmapGM : public GM {
331936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.compublic:
341936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    TinyBitmapGM() {
3548dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        this->setBGColor(0xFFDDDDDD);
361936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    }
37ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
381936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comprotected:
391936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    SkString onShortName() {
401936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com        return SkString("tinybitmap");
411936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    }
421936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
43f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina    virtual SkISize onISize() { return SkISize::Make(100, 100); }
441936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
451936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    virtual void onDraw(SkCanvas* canvas) {
467775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com        SkBitmap bm = make_bitmap();
47ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com        SkShader* s =
487775d66aa0e5958c9ea55ddb8317af4d9b019220reed@google.com            SkShader::CreateBitmapShader(bm, SkShader::kRepeat_TileMode,
491936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com                                         SkShader::kMirror_TileMode);
501936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com        SkPaint paint;
511936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com        paint.setAlpha(0x80);
521936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com        paint.setShader(s)->unref();
531936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com        canvas->drawPaint(paint);
541936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    }
55ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com
561936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comprivate:
571936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com    typedef GM INHERITED;
581936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com};
591936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
601936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com//////////////////////////////////////////////////////////////////////////////
611936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
621936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comstatic GM* MyFactory(void*) { return new TinyBitmapGM; }
631936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.comstatic GMRegistry reg(MyFactory);
641936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com
651936f26a0fe6fcdbb384562d5d9e631c3ba85536bsalomon@google.com}
66