1787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed/* 2787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed * Copyright 2017 Google Inc. 3787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed * 4787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed * Use of this source code is governed by a BSD-style license that can be 5787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed * found in the LICENSE file. 6787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed */ 7787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 8787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#ifndef SkAutoBlitterChoose_DEFINED 9787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#define SkAutoBlitterChoose_DEFINED 10787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 11787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#include "SkArenaAlloc.h" 12787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#include "SkBlitter.h" 13787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 14787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedclass SkMatrix; 15787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedclass SkPaint; 16787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedclass SkPixmap; 17787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 18787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedclass SkAutoBlitterChoose : SkNoncopyable { 19787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedpublic: 20787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkAutoBlitterChoose() { 21787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed fBlitter = nullptr; 22787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed } 23787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkAutoBlitterChoose(const SkPixmap& dst, const SkMatrix& matrix, 24787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed const SkPaint& paint, bool drawCoverage = false) { 25787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed fBlitter = SkBlitter::Choose(dst, matrix, paint, &fAlloc, drawCoverage); 26787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed } 27787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 28787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkBlitter* operator->() { return fBlitter; } 29787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkBlitter* get() const { return fBlitter; } 30787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 31787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed void choose(const SkPixmap& dst, const SkMatrix& matrix, 32787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed const SkPaint& paint, bool drawCoverage = false) { 33787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkASSERT(!fBlitter); 34787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed fBlitter = SkBlitter::Choose(dst, matrix, paint, &fAlloc, drawCoverage); 35787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed } 36787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 37787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reedprivate: 38787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed // Owned by fAlloc, which will handle the delete. 39787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed SkBlitter* fBlitter; 40787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 4114a6430b7bcf92bcabf4aef18805969d1335aab1Florin Malita SkSTArenaAlloc<kSkBlitterContextSize> fAlloc; 42787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed}; 43787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#define SkAutoBlitterChoose(...) SK_REQUIRE_LOCAL_VAR(SkAutoBlitterChoose) 44787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed 45787a16dd9e03f3971898131dd778206c8cb9a0dfMike Reed#endif 46