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