| /* | |
| * 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 |