| /* |
| * Copyright 2006 The Android Open Source Project |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkSpriteBlitter_DEFINED |
| #define SkSpriteBlitter_DEFINED |
| |
| #include "include/core/SkPixmap.h" |
| #include "include/core/SkShader.h" |
| #include "src/core/SkBlitter.h" |
| |
| class SkPaint; |
| |
| // SkSpriteBlitter specializes SkBlitter in a way to move large rectangles of pixels around. |
| // Because of this use, the main primitive shifts from blitH style things to the more efficient |
| // blitRect. |
| class SkSpriteBlitter : public SkBlitter { |
| public: |
| SkSpriteBlitter(const SkPixmap& source); |
| |
| virtual bool setup(const SkPixmap& dst, int left, int top, const SkPaint&); |
| |
| // blitH, blitAntiH, blitV and blitMask should not be called on an SkSpriteBlitter. |
| void blitH(int x, int y, int width) override; |
| void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override; |
| void blitV(int x, int y, int height, SkAlpha alpha) override; |
| void blitMask(const SkMask&, const SkIRect& clip) override; |
| |
| // A SkSpriteBlitter must implement blitRect. |
| void blitRect(int x, int y, int width, int height) override = 0; |
| |
| static SkSpriteBlitter* ChooseL32(const SkPixmap& source, const SkPaint&, SkArenaAlloc*); |
| |
| protected: |
| SkPixmap fDst; |
| const SkPixmap fSource; |
| int fLeft, fTop; |
| const SkPaint* fPaint; |
| |
| private: |
| using INHERITED = SkBlitter; |
| }; |
| |
| #endif |