1b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com/* 2b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com * Copyright 2013 Google Inc. 3b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com * 4b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com * Use of this source code is governed by a BSD-style license that can be 5b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com * found in the LICENSE file. 6b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com */ 7b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 8b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com#include "gm.h" 9b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com#include "SkCanvas.h" 10b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com#include "SkLerpXfermode.h" 11b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 12b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.comstatic void show_circlelayers(SkCanvas* canvas, SkXfermode* mode) { 13b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com SkPaint paint; 14b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com paint.setAntiAlias(true); 15b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com SkRect r, bounds = { 10, 10, 110, 110 }; 16b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 17b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r = bounds; 18b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r.fRight = bounds.centerX(); 19b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->drawRect(r, paint); 20b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 21b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->saveLayer(&bounds, NULL); 22b148aca07e7cd0150bd9c750b54584f7f4c38cfbskia.committer@gmail.com 23b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com paint.setColor(0x80FF0000); 24b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r = bounds; 25b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r.inset(20, 0); 26b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->drawOval(r, paint); 27b148aca07e7cd0150bd9c750b54584f7f4c38cfbskia.committer@gmail.com 28b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com paint.setColor(0x800000FF); 29b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r = bounds; 30b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com r.inset(0, 20); 31b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com paint.setXfermode(mode); 32b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->drawOval(r, paint); 33b148aca07e7cd0150bd9c750b54584f7f4c38cfbskia.committer@gmail.com 34b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->restore(); 35b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com} 36b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 37b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.comclass LerpXfermodeGM : public skiagm::GM { 38b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.compublic: 39b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com LerpXfermodeGM() {} 40b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 41b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.comprotected: 42b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com virtual SkString onShortName() SK_OVERRIDE { 43b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com return SkString("lerpmode"); 44b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com } 45b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 46b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com virtual SkISize onISize() SK_OVERRIDE { 47b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com return SkISize::Make(240, 120); 48b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com } 49b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 50b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 51b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com show_circlelayers(canvas, NULL); 52b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com canvas->translate(150, 0); 53b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com SkAutoTUnref<SkXfermode> mode(SkLerpXfermode::Create(0.5f)); 54b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com show_circlelayers(canvas, mode.get()); 55b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com } 56b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 57b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.comprivate: 58b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com typedef skiagm::GM INHERITED; 59b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com}; 60b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 61b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com////////////////////////////////////////////////////////////////////////////// 62b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.com 63b83cb9bf89d26b40e4db83db1b9782437d2adba7reed@google.comDEF_GM( return SkNEW(LerpXfermodeGM); ) 64