1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkAutoBlitterChoose_DEFINED
- #define SkAutoBlitterChoose_DEFINED
- #include "include/private/SkMacros.h"
- #include "src/core/SkArenaAlloc.h"
- #include "src/core/SkBlitter.h"
- #include "src/core/SkDraw.h"
- class SkMatrix;
- class SkPaint;
- class SkPixmap;
- class SkAutoBlitterChoose : SkNoncopyable {
- public:
- SkAutoBlitterChoose() {}
- SkAutoBlitterChoose(const SkDraw& draw, const SkMatrix* matrix, const SkPaint& paint,
- bool drawCoverage = false) {
- this->choose(draw, matrix, paint, drawCoverage);
- }
- SkBlitter* operator->() { return fBlitter; }
- SkBlitter* get() const { return fBlitter; }
- SkBlitter* choose(const SkDraw& draw, const SkMatrix* matrix, const SkPaint& paint,
- bool drawCoverage = false) {
- SkASSERT(!fBlitter);
- if (!matrix) {
- matrix = draw.fMatrix;
- }
- fBlitter = SkBlitter::Choose(draw.fDst, *matrix, paint, &fAlloc, drawCoverage);
- if (draw.fCoverage) {
- // hmm, why can't choose ignore the paint if drawCoverage is true?
- SkBlitter* coverageBlitter = SkBlitter::Choose(*draw.fCoverage, *matrix, SkPaint(),
- &fAlloc, true);
- fBlitter = fAlloc.make<SkPairBlitter>(fBlitter, coverageBlitter);
- }
- return fBlitter;
- }
- private:
- // Owned by fAlloc, which will handle the delete.
- SkBlitter* fBlitter = nullptr;
- SkSTArenaAlloc<kSkBlitterContextSize> fAlloc;
- };
- #define SkAutoBlitterChoose(...) SK_REQUIRE_LOCAL_VAR(SkAutoBlitterChoose)
- #endif
|