1cc0e3110bde60201882a2c512a5cdd73c838f351reed/* 2cc0e3110bde60201882a2c512a5cdd73c838f351reed * Copyright 2014 Google Inc. 3cc0e3110bde60201882a2c512a5cdd73c838f351reed * 4cc0e3110bde60201882a2c512a5cdd73c838f351reed * Use of this source code is governed by a BSD-style license that can be 5cc0e3110bde60201882a2c512a5cdd73c838f351reed * found in the LICENSE file. 6cc0e3110bde60201882a2c512a5cdd73c838f351reed */ 7cc0e3110bde60201882a2c512a5cdd73c838f351reed 8cc0e3110bde60201882a2c512a5cdd73c838f351reed#include "gm.h" 9cc0e3110bde60201882a2c512a5cdd73c838f351reed#include "SkBlurMaskFilter.h" 10cc0e3110bde60201882a2c512a5cdd73c838f351reed#include "SkCanvas.h" 11cc0e3110bde60201882a2c512a5cdd73c838f351reed#include "SkColorFilter.h" 12cc0e3110bde60201882a2c512a5cdd73c838f351reed 13cc0e3110bde60201882a2c512a5cdd73c838f351reed#include "SkColorFilter.h" 14cc0e3110bde60201882a2c512a5cdd73c838f351reedstatic SkBitmap make_bm() { 15cc0e3110bde60201882a2c512a5cdd73c838f351reed SkBitmap bm; 16cc0e3110bde60201882a2c512a5cdd73c838f351reed bm.allocN32Pixels(100, 100); 17cc0e3110bde60201882a2c512a5cdd73c838f351reed 18cc0e3110bde60201882a2c512a5cdd73c838f351reed SkCanvas canvas(bm); 19cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas.clear(0); 20cc0e3110bde60201882a2c512a5cdd73c838f351reed SkPaint paint; 21cc0e3110bde60201882a2c512a5cdd73c838f351reed paint.setAntiAlias(true); 22cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas.drawCircle(50, 50, 50, paint); 23cc0e3110bde60201882a2c512a5cdd73c838f351reed return bm; 24cc0e3110bde60201882a2c512a5cdd73c838f351reed} 25cc0e3110bde60201882a2c512a5cdd73c838f351reed 26cc0e3110bde60201882a2c512a5cdd73c838f351reedclass EmbossGM : public skiagm::GM { 27cc0e3110bde60201882a2c512a5cdd73c838f351reedpublic: 28cc0e3110bde60201882a2c512a5cdd73c838f351reed EmbossGM() { 29cc0e3110bde60201882a2c512a5cdd73c838f351reed } 30cc0e3110bde60201882a2c512a5cdd73c838f351reed 31cc0e3110bde60201882a2c512a5cdd73c838f351reedprotected: 32cc0e3110bde60201882a2c512a5cdd73c838f351reed virtual SkString onShortName() SK_OVERRIDE { 33cc0e3110bde60201882a2c512a5cdd73c838f351reed return SkString("emboss"); 34cc0e3110bde60201882a2c512a5cdd73c838f351reed } 35cc0e3110bde60201882a2c512a5cdd73c838f351reed 36cc0e3110bde60201882a2c512a5cdd73c838f351reed virtual SkISize onISize() SK_OVERRIDE { 37cc0e3110bde60201882a2c512a5cdd73c838f351reed return SkISize::Make(600, 120); 38cc0e3110bde60201882a2c512a5cdd73c838f351reed } 39cc0e3110bde60201882a2c512a5cdd73c838f351reed 40cc0e3110bde60201882a2c512a5cdd73c838f351reed virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 41cc0e3110bde60201882a2c512a5cdd73c838f351reed SkPaint paint; 42cc0e3110bde60201882a2c512a5cdd73c838f351reed SkBitmap bm = make_bm(); 43cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas->drawBitmap(bm, 10, 10, &paint); 44cc0e3110bde60201882a2c512a5cdd73c838f351reed 45cc0e3110bde60201882a2c512a5cdd73c838f351reed const SkScalar dir[] = { 1, 1, 1 }; 46cc0e3110bde60201882a2c512a5cdd73c838f351reed paint.setMaskFilter(SkBlurMaskFilter::CreateEmboss(3, dir, 0.3f, 0.1f))->unref(); 47cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas->translate(bm.width() + SkIntToScalar(10), 0); 48cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas->drawBitmap(bm, 10, 10, &paint); 49cc0e3110bde60201882a2c512a5cdd73c838f351reed 50cc0e3110bde60201882a2c512a5cdd73c838f351reed // this combination of emboss+colorfilter used to crash -- so we exercise it to 51cc0e3110bde60201882a2c512a5cdd73c838f351reed // confirm that we have a fix. 52cc0e3110bde60201882a2c512a5cdd73c838f351reed paint.setColorFilter(SkColorFilter::CreateModeFilter(0xFFFF0000, SkXfermode::kSrcATop_Mode))->unref(); 53cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas->translate(bm.width() + SkIntToScalar(10), 0); 54cc0e3110bde60201882a2c512a5cdd73c838f351reed canvas->drawBitmap(bm, 10, 10, &paint); 55cc0e3110bde60201882a2c512a5cdd73c838f351reed } 56cc0e3110bde60201882a2c512a5cdd73c838f351reed 57cc0e3110bde60201882a2c512a5cdd73c838f351reedprivate: 58cc0e3110bde60201882a2c512a5cdd73c838f351reed typedef skiagm::GM INHERITED; 59cc0e3110bde60201882a2c512a5cdd73c838f351reed}; 60cc0e3110bde60201882a2c512a5cdd73c838f351reed 61cc0e3110bde60201882a2c512a5cdd73c838f351reedDEF_GM( return SkNEW(EmbossGM); ) 62