/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm.h" #include "SkGradientShader.h" #include "SkTypeface.h" #include "SkImageDecoder.h" static void load_bm(SkBitmap* bm) { // SkImageDecoder::DecodeFile("/skia/trunk/books.jpg", bm); bm->setConfig(SkBitmap::kARGB_8888_Config, 160, 120); bm->allocPixels(); SkCanvas canvas(*bm); canvas.drawColor(SK_ColorWHITE); SkPaint paint; paint.setAntiAlias(true); paint.setSubpixelText(true); paint.setTextSize(17); paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kNormal))->unref(); canvas.drawText("Hamburgefons", 12, 10, 25, paint); paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kItalic))->unref(); canvas.drawText("Hamburgefons", 12, 10, 50, paint); paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kBold))->unref(); canvas.drawText("Hamburgefons", 12, 10, 75, paint); paint.setTypeface(SkTypeface::CreateFromName("Times", SkTypeface::kBoldItalic))->unref(); canvas.drawText("Hamburgefons", 12, 10, 100, paint); } static SkSize computeSize(const SkBitmap& bm, const SkMatrix& mat) { SkRect bounds = { 0, 0, bm.width(), bm.height() }; mat.mapRect(&bounds); return SkSize::Make(bounds.width(), bounds.height()); } static void draw_col(SkCanvas* canvas, const SkBitmap& bm, const SkMatrix& mat, SkScalar dx) { SkPaint paint; SkAutoCanvasRestore acr(canvas, true); canvas->drawBitmapMatrix(bm, mat, &paint); paint.setFilterBitmap(true); canvas->translate(dx, 0); canvas->drawBitmapMatrix(bm, mat, &paint); paint.setFlags(paint.getFlags() | SkPaint::kBicubicFilterBitmap_Flag); canvas->translate(dx, 0); canvas->drawBitmapMatrix(bm, mat, &paint); } class FilterBitmapGM : public skiagm::GM { bool fOnce; void init() { if (fOnce) { return; } fOnce = true; load_bm(&fBM); SkScalar cx = SkScalarHalf(fBM.width()); SkScalar cy = SkScalarHalf(fBM.height()); SkScalar scale = 1.6f; fMatrix[0].setScale(scale, scale); fMatrix[1].setRotate(30, cx, cy); fMatrix[1].postScale(scale, scale); } public: SkBitmap fBM; SkMatrix fMatrix[2]; FilterBitmapGM() : fOnce(false) { this->setBGColor(0xFFDDDDDD); } protected: virtual SkString onShortName() SK_OVERRIDE { return SkString("filterbitmap"); } virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(920, 480); } virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { this->init(); canvas->translate(10, 10); for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrix); ++i) { SkSize size = computeSize(fBM, fMatrix[i]); size.fWidth += 20; size.fHeight += 20; draw_col(canvas, fBM, fMatrix[i], size.fWidth); canvas->translate(0, size.fHeight); } } private: typedef skiagm::GM INHERITED; }; ////////////////////////////////////////////////////////////////////////////// DEF_GM( return new FilterBitmapGM; )