19f23a27ed9961fd4575864e590eda328452895e7reed/*
29f23a27ed9961fd4575864e590eda328452895e7reed * Copyright 2014 Google Inc.
39f23a27ed9961fd4575864e590eda328452895e7reed *
49f23a27ed9961fd4575864e590eda328452895e7reed * Use of this source code is governed by a BSD-style license that can be
59f23a27ed9961fd4575864e590eda328452895e7reed * found in the LICENSE file.
69f23a27ed9961fd4575864e590eda328452895e7reed */
79f23a27ed9961fd4575864e590eda328452895e7reed
89f23a27ed9961fd4575864e590eda328452895e7reed#include "gm.h"
99f23a27ed9961fd4575864e590eda328452895e7reed#include "SkBlurMaskFilter.h"
109f23a27ed9961fd4575864e590eda328452895e7reed#include "SkCanvas.h"
119f23a27ed9961fd4575864e590eda328452895e7reed#include "SkColorFilter.h"
129f23a27ed9961fd4575864e590eda328452895e7reed
139f23a27ed9961fd4575864e590eda328452895e7reed#include "SkColorFilter.h"
149f23a27ed9961fd4575864e590eda328452895e7reedstatic SkBitmap make_bm() {
159f23a27ed9961fd4575864e590eda328452895e7reed    SkBitmap bm;
169f23a27ed9961fd4575864e590eda328452895e7reed    bm.allocN32Pixels(100, 100);
179f23a27ed9961fd4575864e590eda328452895e7reed
189f23a27ed9961fd4575864e590eda328452895e7reed    SkCanvas canvas(bm);
199f23a27ed9961fd4575864e590eda328452895e7reed    canvas.clear(0);
209f23a27ed9961fd4575864e590eda328452895e7reed    SkPaint paint;
219f23a27ed9961fd4575864e590eda328452895e7reed    paint.setAntiAlias(true);
229f23a27ed9961fd4575864e590eda328452895e7reed    canvas.drawCircle(50, 50, 50, paint);
239f23a27ed9961fd4575864e590eda328452895e7reed    return bm;
249f23a27ed9961fd4575864e590eda328452895e7reed}
259f23a27ed9961fd4575864e590eda328452895e7reed
269f23a27ed9961fd4575864e590eda328452895e7reedclass EmbossGM : public skiagm::GM {
279f23a27ed9961fd4575864e590eda328452895e7reedpublic:
289f23a27ed9961fd4575864e590eda328452895e7reed    EmbossGM() {
299f23a27ed9961fd4575864e590eda328452895e7reed    }
309f23a27ed9961fd4575864e590eda328452895e7reed
319f23a27ed9961fd4575864e590eda328452895e7reedprotected:
329f23a27ed9961fd4575864e590eda328452895e7reed    virtual SkString onShortName() SK_OVERRIDE {
339f23a27ed9961fd4575864e590eda328452895e7reed        return SkString("emboss");
349f23a27ed9961fd4575864e590eda328452895e7reed    }
359f23a27ed9961fd4575864e590eda328452895e7reed
369f23a27ed9961fd4575864e590eda328452895e7reed    virtual SkISize onISize() SK_OVERRIDE {
379f23a27ed9961fd4575864e590eda328452895e7reed        return SkISize::Make(600, 120);
389f23a27ed9961fd4575864e590eda328452895e7reed    }
399f23a27ed9961fd4575864e590eda328452895e7reed
409f23a27ed9961fd4575864e590eda328452895e7reed    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
419f23a27ed9961fd4575864e590eda328452895e7reed        SkPaint paint;
429f23a27ed9961fd4575864e590eda328452895e7reed        SkBitmap bm = make_bm();
439f23a27ed9961fd4575864e590eda328452895e7reed        canvas->drawBitmap(bm, 10, 10, &paint);
449f23a27ed9961fd4575864e590eda328452895e7reed
459f23a27ed9961fd4575864e590eda328452895e7reed        const SkScalar dir[] = { 1, 1, 1 };
469f23a27ed9961fd4575864e590eda328452895e7reed        paint.setMaskFilter(SkBlurMaskFilter::CreateEmboss(3, dir, 0.3f, 0.1f))->unref();
479f23a27ed9961fd4575864e590eda328452895e7reed        canvas->translate(bm.width() + SkIntToScalar(10), 0);
489f23a27ed9961fd4575864e590eda328452895e7reed        canvas->drawBitmap(bm, 10, 10, &paint);
499f23a27ed9961fd4575864e590eda328452895e7reed
509f23a27ed9961fd4575864e590eda328452895e7reed        // this combination of emboss+colorfilter used to crash -- so we exercise it to
519f23a27ed9961fd4575864e590eda328452895e7reed        // confirm that we have a fix.
529f23a27ed9961fd4575864e590eda328452895e7reed        paint.setColorFilter(SkColorFilter::CreateModeFilter(0xFFFF0000, SkXfermode::kSrcATop_Mode))->unref();
539f23a27ed9961fd4575864e590eda328452895e7reed        canvas->translate(bm.width() + SkIntToScalar(10), 0);
549f23a27ed9961fd4575864e590eda328452895e7reed        canvas->drawBitmap(bm, 10, 10, &paint);
559f23a27ed9961fd4575864e590eda328452895e7reed    }
569f23a27ed9961fd4575864e590eda328452895e7reed
579f23a27ed9961fd4575864e590eda328452895e7reedprivate:
589f23a27ed9961fd4575864e590eda328452895e7reed    typedef skiagm::GM INHERITED;
599f23a27ed9961fd4575864e590eda328452895e7reed};
609f23a27ed9961fd4575864e590eda328452895e7reed
619f23a27ed9961fd4575864e590eda328452895e7reedDEF_GM( return SkNEW(EmbossGM); )
62