remove unused SkBitmap::scrollRect API

BUG=skia:
TBR=

Review URL: https://codereview.chromium.org/1154623002
This commit is contained in:
reed 2015-05-21 15:46:20 -07:00 committed by Commit bot
parent 3ece53ed30
commit 5a72c42952
4 changed files with 0 additions and 283 deletions

View File

@ -1,155 +0,0 @@
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "gm.h"
namespace skiagm {
/** Create a bitmap image suitable for testing SkBitmap::scrollRect().
*
* @param quarterWidth bitmap will be 4x this many pixels wide
* @param quarterHeight bitmap will be 4x this many pixels tall
* @param bitmap the bitmap data is written into this object
*/
static void make_bitmap(int quarterWidth, int quarterHeight, SkBitmap *bitmap) {
SkPaint pRed, pWhite, pGreen, pBlue, pLine, pAlphaGray;
pRed.setColor(0xFFFF9999);
pWhite.setColor(0xFFFFFFFF);
pGreen.setColor(0xFF99FF99);
pBlue.setColor(0xFF9999FF);
pLine.setColor(0xFF000000);
pLine.setStyle(SkPaint::kStroke_Style);
pAlphaGray.setColor(0x66888888);
// Prepare bitmap, and a canvas that draws into it.
bitmap->allocN32Pixels(quarterWidth*4, quarterHeight*4);
SkCanvas canvas(*bitmap);
SkScalar w = SkIntToScalar(quarterWidth);
SkScalar h = SkIntToScalar(quarterHeight);
canvas.drawRectCoords( 0, 0, w*2, h*2, pRed);
canvas.drawRectCoords(w*2, 0, w*4, h*2, pGreen);
canvas.drawRectCoords( 0, h*2, w*2, h*4, pBlue);
canvas.drawRectCoords(w*2, h*2, w*4, h*4, pWhite);
canvas.drawRectCoords(w, h, w*3, h*3, pAlphaGray);
canvas.drawLine(w*2, 0, w*2, h*4, pLine);
canvas.drawLine( 0, h*2, w*4, h*2, pLine);
canvas.drawRectCoords(w, h, w*3, h*3, pLine);
}
class BitmapScrollGM : public GM {
bool fInited;
void init() {
if (fInited) {
return;
}
fInited = true;
// Create the original bitmap.
make_bitmap(quarterWidth, quarterHeight, &origBitmap);
}
public:
BitmapScrollGM() {
fInited = false;
this->setBGColor(0xFFDDDDDD);
}
protected:
SkString onShortName() override {
return SkString("bitmapscroll");
}
SkISize onISize() override {
return SkISize::Make(800, 600);
}
void onDraw(SkCanvas* canvas) override {
this->init();
SkIRect scrollCenterRegion = SkIRect::MakeXYWH(
quarterWidth, quarterHeight, quarterWidth*2+1, quarterHeight*2+1);
int x = quarterWidth;
int y = quarterHeight;
int xSpacing = quarterWidth * 20;
int ySpacing = quarterHeight * 16;
// Draw left-hand text labels.
drawLabel(canvas, "scroll entire bitmap",
x, y, x, y + ySpacing);
drawLabel(canvas, "scroll part of bitmap",
x, y + ySpacing, x, y + ySpacing*2);
x += 30;
// Draw various permutations of scrolled bitmaps, scrolling a bit
// further each time.
draw9(canvas, x, y, NULL, quarterWidth*1/2, quarterHeight*1/2);
draw9(canvas, x, y+ySpacing, &scrollCenterRegion,
quarterWidth*1/2, quarterHeight*1/2);
x += xSpacing;
draw9(canvas, x, y, NULL, quarterWidth*3/2, quarterHeight*3/2);
draw9(canvas, x, y+ySpacing, &scrollCenterRegion,
quarterWidth*3/2, quarterHeight*3/2);
x += xSpacing;
draw9(canvas, x, y, NULL, quarterWidth*5/2, quarterHeight*5/2);
draw9(canvas, x, y+ySpacing, &scrollCenterRegion,
quarterWidth*5/2, quarterHeight*5/2);
x += xSpacing;
draw9(canvas, x, y, NULL, quarterWidth*9/2, quarterHeight*9/2);
draw9(canvas, x, y+ySpacing, &scrollCenterRegion,
quarterWidth*9/2, quarterHeight*9/2);
}
void drawLabel(SkCanvas* canvas, const char *text, int startX, int startY,
int endX, int endY) {
SkPaint paint;
sk_tool_utils::set_portable_typeface(&paint);
paint.setColor(0xFF000000);
SkPath path;
path.moveTo(SkIntToScalar(startX), SkIntToScalar(startY));
path.lineTo(SkIntToScalar(endX), SkIntToScalar(endY));
canvas->drawTextOnPath(text, strlen(text), path, NULL, paint);
}
/** Stamp out 9 copies of origBitmap, scrolled in each direction (and
* not scrolled at all).
*/
void draw9(SkCanvas* canvas, int x, int y, SkIRect* subset,
int scrollX, int scrollY) {
for (int yMult=-1; yMult<=1; yMult++) {
for (int xMult=-1; xMult<=1; xMult++) {
// Figure out the (x,y) to draw this copy at
SkScalar bitmapX = SkIntToScalar(
x + quarterWidth * 5 * (xMult+1));
SkScalar bitmapY = SkIntToScalar(
y + quarterHeight * 5 * (yMult+1));
// Scroll a new copy of the bitmap, and then draw it.
// scrollRect() should always return true, even if it's a no-op
SkBitmap scrolledBitmap;
SkDEBUGCODE(bool copyToReturnValue = )origBitmap.copyTo(
&scrolledBitmap, origBitmap.colorType());
SkASSERT(copyToReturnValue);
SkDEBUGCODE(bool scrollRectReturnValue = )scrolledBitmap.scrollRect(
subset, scrollX * xMult, scrollY * yMult);
SkASSERT(scrollRectReturnValue);
canvas->drawBitmap(scrolledBitmap, bitmapX, bitmapY);
}
}
}
private:
typedef GM INHERITED;
static const int quarterWidth = 10;
static const int quarterHeight = 14;
SkBitmap origBitmap;
};
//////////////////////////////////////////////////////////////////////////////
static GM* MyFactory(void*) { return new BitmapScrollGM; }
static GMRegistry reg(MyFactory);
}

View File

@ -40,7 +40,6 @@
'<(skia_src_path)/core/SkBitmapProcState_sample.h',
'<(skia_src_path)/core/SkBitmapScaler.h',
'<(skia_src_path)/core/SkBitmapScaler.cpp',
'<(skia_src_path)/core/SkBitmap_scroll.cpp',
'<(skia_src_path)/core/SkBlitBWMaskTemplate.h',
'<(skia_src_path)/core/SkBlitMask_D32.cpp',
'<(skia_src_path)/core/SkBlitRow_D16.cpp',

View File

@ -493,28 +493,6 @@ public:
*/
void eraseArea(const SkIRect& area, SkColor c) const;
/** Scroll (a subset of) the contents of this bitmap by dx/dy. If there are
no pixels allocated (i.e. getPixels() returns null) the method will
still update the inval region (if present). If the bitmap is immutable,
do nothing and return false.
@param subset The subset of the bitmap to scroll/move. To scroll the
entire contents, specify [0, 0, width, height] or just
pass null.
@param dx The amount to scroll in X
@param dy The amount to scroll in Y
@param inval Optional (may be null). Returns the area of the bitmap that
was scrolled away. E.g. if dx = dy = 0, then inval would
be set to empty. If dx >= width or dy >= height, then
inval would be set to the entire bounds of the bitmap.
@return true if the scroll was doable. Will return false if the colortype is kUnkown or
if the bitmap is immutable.
If no pixels are present (i.e. getPixels() returns false)
inval will still be updated, and true will be returned.
*/
bool scrollRect(const SkIRect* subset, int dx, int dy,
SkRegion* inval = NULL) const;
/**
* Return the SkColor of the specified pixel. In most cases this will
* require un-premultiplying the color. Alpha only colortypes (e.g. kAlpha_8_SkColorType)

View File

@ -1,105 +0,0 @@
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "SkBitmap.h"
#include "SkRegion.h"
bool SkBitmap::scrollRect(const SkIRect* subset, int dx, int dy,
SkRegion* inval) const
{
if (this->isImmutable() || kUnknown_SkColorType == this->colorType()) {
return false;
}
if (subset) {
SkBitmap tmp;
return this->extractSubset(&tmp, *subset) &&
// now call again with no rectangle
tmp.scrollRect(NULL, dx, dy, inval);
}
int shift = this->bytesPerPixel() >> 1;
int width = this->width();
int height = this->height();
// check if there's nothing to do
if ((dx | dy) == 0 || width <= 0 || height <= 0) {
if (inval) {
inval->setEmpty();
}
return true;
}
// compute the inval region now, before we see if there are any pixels
if (inval) {
SkIRect r;
r.set(0, 0, width, height);
// initial the region with the entire bounds
inval->setRect(r);
// do the "scroll"
r.offset(dx, dy);
// check if we scrolled completely away
if (!SkIRect::Intersects(r, inval->getBounds())) {
// inval has already been updated...
return true;
}
// compute the dirty area
inval->op(r, SkRegion::kDifference_Op);
}
SkAutoLockPixels alp(*this);
// if we have no pixels, just return (inval is already updated)
// don't call readyToDraw(), since we don't require a colortable per se
if (this->getPixels() == NULL) {
return true;
}
char* dst = (char*)this->getPixels();
const char* src = dst;
int rowBytes = (int)this->rowBytes(); // need rowBytes to be signed
if (dy <= 0) {
src -= dy * rowBytes;
height += dy;
} else {
dst += dy * rowBytes;
height -= dy;
// now jump src/dst to the last scanline
src += (height - 1) * rowBytes;
dst += (height - 1) * rowBytes;
// now invert rowbytes so we copy backwards in the loop
rowBytes = -rowBytes;
}
if (dx <= 0) {
src -= dx << shift;
width += dx;
} else {
dst += dx << shift;
width -= dx;
}
// If the X-translation would push it completely beyond the region,
// then there's nothing to draw.
if (width <= 0) {
return true;
}
width <<= shift; // now width is the number of bytes to move per line
while (--height >= 0) {
memmove(dst, src, width);
dst += rowBytes;
src += rowBytes;
}
this->notifyPixelsChanged();
return true;
}