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