1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkSpriteBlitter_DEFINED
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkSpriteBlitter_DEFINED
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
11a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkBlitter.h"
12cb674144545866ed31a9ab5dd8e7152282017e40reed#include "SkPixmap.h"
13a5572e5bb2a2bbeeb59de0741c2527869d365a0ccommit-bot@chromium.org#include "SkShader.h"
148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPaint;
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
177df9e4a87d84415391c167ea54cd389d4b423c2dherb// SkSpriteBlitter specializes SkBlitter in a way to move large rectangles of pixels around.
187df9e4a87d84415391c167ea54cd389d4b423c2dherb// Because of this use, the main primitive shifts from blitH style things to the more efficient
197df9e4a87d84415391c167ea54cd389d4b423c2dherb// blitRect.
208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkSpriteBlitter : public SkBlitter {
218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.compublic:
22c240e719b2bebd3711ade4e6fe056921aa7b0521reed    SkSpriteBlitter(const SkPixmap& source);
238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
24cb674144545866ed31a9ab5dd8e7152282017e40reed    virtual void setup(const SkPixmap& dst, int left, int top, const SkPaint&);
258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
267df9e4a87d84415391c167ea54cd389d4b423c2dherb    // blitH, blitAntiH, blitV and blitMask should not be called on an SkSpriteBlitter.
27c240e719b2bebd3711ade4e6fe056921aa7b0521reed    void blitH(int x, int y, int width) override;
28c240e719b2bebd3711ade4e6fe056921aa7b0521reed    void blitAntiH(int x, int y, const SkAlpha antialias[], const int16_t runs[]) override;
29c240e719b2bebd3711ade4e6fe056921aa7b0521reed    void blitV(int x, int y, int height, SkAlpha alpha) override;
30c240e719b2bebd3711ade4e6fe056921aa7b0521reed    void blitMask(const SkMask&, const SkIRect& clip) override;
317df9e4a87d84415391c167ea54cd389d4b423c2dherb
327df9e4a87d84415391c167ea54cd389d4b423c2dherb    // A SkSpriteBlitter must implement blitRect.
337df9e4a87d84415391c167ea54cd389d4b423c2dherb    void blitRect(int x, int y, int width, int height) override = 0;
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
3557bfa0209e3379385b7ef6217cafb22ca83836c8Herb Derby    static SkSpriteBlitter* ChooseL32(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
36ef8ce2858b7692c9ec9874c43656e603f304c760Mike Reed    static SkSpriteBlitter* ChooseL565(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
37ef8ce2858b7692c9ec9874c43656e603f304c760Mike Reed    static SkSpriteBlitter* ChooseLA8(const SkPixmap& source, const SkPaint&, SkArenaAlloc*);
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprotected:
40cb674144545866ed31a9ab5dd8e7152282017e40reed    SkPixmap        fDst;
41c240e719b2bebd3711ade4e6fe056921aa7b0521reed    const SkPixmap  fSource;
428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    int             fLeft, fTop;
438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    const SkPaint*  fPaint;
447df9e4a87d84415391c167ea54cd389d4b423c2dherb
457df9e4a87d84415391c167ea54cd389d4b423c2dherbprivate:
467df9e4a87d84415391c167ea54cd389d4b423c2dherb    typedef SkBlitter INHERITED;
478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
50