зеркало из https://github.com/mozilla/moz-skia.git
Change drawBitmapRect to take a float-src-rect instead of integer-src-rect. This
allows the client more control over the scaling. Because of virtual overrides and wanting to keep the old call-sites up and running, this CL renames the virtual entry-point to drawBitmapRectToRect, and downgrades drawBitmapRect to a non-virtual helper function. The implementation is to use the float-rect for computing the matrix, but still cons-up an integer rect for the purposes of subsetting the original bitmap. We do this by calling float_src->roundOut(&int_src) so that we include all (partially) covered src pixels. No change needed on SkDevice, since that signature is explicitly passed the computed matrix. Review URL: https://codereview.appspot.com/6501140 git-svn-id: http://skia.googlecode.com/svn/trunk@5578 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
Родитель
54339a826e
Коммит
f1ab723033
|
@ -183,8 +183,8 @@ void SkDebugCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left,
|
|||
addDrawCommand(new DrawBitmap(bitmap, left, top, paint));
|
||||
}
|
||||
|
||||
void SkDebugCanvas::drawBitmapRect(const SkBitmap& bitmap,
|
||||
const SkIRect* src, const SkRect& dst, const SkPaint* paint) {
|
||||
void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap,
|
||||
const SkRect* src, const SkRect& dst, const SkPaint* paint) {
|
||||
addDrawCommand(new DrawBitmapRect(bitmap, src, dst, paint));
|
||||
}
|
||||
|
||||
|
|
|
@ -135,8 +135,8 @@ public:
|
|||
virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
|
||||
virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
|
||||
virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
|
|
|
@ -180,7 +180,7 @@ void DrawBitmapNine::execute(SkCanvas* canvas) {
|
|||
canvas->drawBitmapNine(*this->fBitmap, *this->fCenter, *this->fDst, this->fPaint);
|
||||
}
|
||||
|
||||
DrawBitmapRect::DrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
DrawBitmapRect::DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
this->fBitmap = &bitmap;
|
||||
this->fSrc = src;
|
||||
|
@ -189,7 +189,7 @@ DrawBitmapRect::DrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
|||
this->fDrawType = DRAW_BITMAP_RECT;
|
||||
|
||||
this->fInfo.push(SkObjectParser::BitmapToString(bitmap));
|
||||
if (src) this->fInfo.push(SkObjectParser::IRectToString(*src));
|
||||
if (src) this->fInfo.push(SkObjectParser::RectToString(*src));
|
||||
this->fInfo.push(SkObjectParser::RectToString(dst));
|
||||
if (paint) this->fInfo.push(SkObjectParser::PaintToString(*paint));
|
||||
}
|
||||
|
|
|
@ -134,11 +134,11 @@ private:
|
|||
|
||||
class DrawBitmapRect : public SkDrawCommand {
|
||||
public:
|
||||
DrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
DrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint);
|
||||
virtual void execute(SkCanvas* canvas) SK_OVERRIDE;
|
||||
private:
|
||||
const SkIRect* fSrc;
|
||||
const SkRect* fSrc;
|
||||
const SkPaint* fPaint;
|
||||
const SkBitmap* fBitmap;
|
||||
const SkRect* fDst;
|
||||
|
|
|
@ -0,0 +1,100 @@
|
|||
|
||||
/*
|
||||
* 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"
|
||||
#include "SkCanvas.h"
|
||||
#include "SkGradientShader.h"
|
||||
#include "SkGraphics.h"
|
||||
#include "SkPath.h"
|
||||
#include "SkRegion.h"
|
||||
#include "SkShader.h"
|
||||
|
||||
static void make_bitmap(SkBitmap* bitmap) {
|
||||
SkCanvas canvas;
|
||||
|
||||
{
|
||||
bitmap->setConfig(SkBitmap::kARGB_8888_Config, 64, 64);
|
||||
bitmap->allocPixels();
|
||||
canvas.setBitmapDevice(*bitmap);
|
||||
}
|
||||
|
||||
canvas.drawColor(SK_ColorRED);
|
||||
SkPaint paint;
|
||||
paint.setAntiAlias(true);
|
||||
const SkPoint pts[] = { { 0, 0 }, { 64, 64 } };
|
||||
const SkColor colors[] = { SK_ColorWHITE, SK_ColorBLUE };
|
||||
paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
|
||||
SkShader::kClamp_TileMode))->unref();
|
||||
canvas.drawCircle(32, 32, 32, paint);
|
||||
}
|
||||
|
||||
class DrawBitmapRect2 : public skiagm::GM {
|
||||
bool fUseIRect;
|
||||
public:
|
||||
DrawBitmapRect2(bool useIRect) : fUseIRect(useIRect) {
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual SkString onShortName() SK_OVERRIDE {
|
||||
SkString str;
|
||||
str.printf("bitmaprect_%s", fUseIRect ? "i" : "s");
|
||||
return str;
|
||||
}
|
||||
|
||||
virtual SkISize onISize() SK_OVERRIDE {
|
||||
return SkISize::Make(640, 480);
|
||||
}
|
||||
|
||||
virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
|
||||
canvas->drawColor(0xFFCCCCCC);
|
||||
|
||||
const SkIRect src[] = {
|
||||
{ 0, 0, 32, 32 },
|
||||
{ 0, 0, 80, 80 },
|
||||
{ 32, 32, 96, 96 },
|
||||
{ -32, -32, 32, 32, }
|
||||
};
|
||||
|
||||
SkPaint paint;
|
||||
paint.setStyle(SkPaint::kStroke_Style);
|
||||
// paint.setColor(SK_ColorGREEN);
|
||||
|
||||
SkBitmap bitmap;
|
||||
make_bitmap(&bitmap);
|
||||
|
||||
SkRect dstR = { 0, 200, 128, 380 };
|
||||
|
||||
canvas->translate(16, 40);
|
||||
for (size_t i = 0; i < SK_ARRAY_COUNT(src); i++) {
|
||||
SkRect srcR;
|
||||
srcR.set(src[i]);
|
||||
|
||||
canvas->drawBitmap(bitmap, 0, 0, &paint);
|
||||
if (fUseIRect) {
|
||||
canvas->drawBitmapRectToRect(bitmap, &srcR, dstR, &paint);
|
||||
} else {
|
||||
canvas->drawBitmapRect(bitmap, &src[i], dstR, &paint);
|
||||
}
|
||||
|
||||
canvas->drawRect(dstR, paint);
|
||||
canvas->drawRect(srcR, paint);
|
||||
|
||||
canvas->translate(160, 0);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
typedef skiagm::GM INHERITED;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static skiagm::GM* MyFactory0(void*) { return new DrawBitmapRect2(false); }
|
||||
static skiagm::GM* MyFactory1(void*) { return new DrawBitmapRect2(true); }
|
||||
|
||||
static skiagm::GMRegistry reg0(MyFactory0);
|
||||
static skiagm::GMRegistry reg1(MyFactory1);
|
|
@ -8,6 +8,7 @@
|
|||
'../gm/bitmapcopy.cpp',
|
||||
'../gm/bitmapmatrix.cpp',
|
||||
'../gm/bitmapfilters.cpp',
|
||||
'../gm/bitmaprect.cpp',
|
||||
'../gm/bitmapscroll.cpp',
|
||||
'../gm/blend.cpp',
|
||||
'../gm/blurs.cpp',
|
||||
|
|
|
@ -644,8 +644,25 @@ public:
|
|||
image will be drawn
|
||||
@param paint The paint used to draw the bitmap, or NULL
|
||||
*/
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
const SkRect& dst, const SkPaint* paint = NULL);
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst,
|
||||
const SkPaint* paint);
|
||||
|
||||
void drawBitmapRect(const SkBitmap& bitmap, const SkRect& dst,
|
||||
const SkPaint* paint) {
|
||||
this->drawBitmapRectToRect(bitmap, NULL, dst, paint);
|
||||
}
|
||||
|
||||
void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* isrc,
|
||||
const SkRect& dst, const SkPaint* paint = NULL) {
|
||||
SkRect realSrcStorage;
|
||||
SkRect* realSrcPtr = NULL;
|
||||
if (isrc) {
|
||||
realSrcStorage.set(*isrc);
|
||||
realSrcPtr = &realSrcStorage;
|
||||
}
|
||||
this->drawBitmapRectToRect(bitmap, realSrcPtr, dst, paint);
|
||||
}
|
||||
|
||||
virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
|
||||
const SkPaint* paint = NULL);
|
||||
|
@ -993,7 +1010,7 @@ private:
|
|||
// canvas apis, without confusing subclasses (like SkPictureRecording)
|
||||
void internalDrawBitmap(const SkBitmap&, const SkIRect*, const SkMatrix& m,
|
||||
const SkPaint* paint);
|
||||
void internalDrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint);
|
||||
void internalDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
|
||||
const SkRect& dst, const SkPaint* paint);
|
||||
|
|
|
@ -138,7 +138,7 @@ public:
|
|||
virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left,
|
||||
SkScalar top, const SkPaint* paint)
|
||||
SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint)
|
||||
SK_OVERRIDE;
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ public:
|
|||
virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
|
||||
const SkPaint* paint) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
|
||||
const SkPaint* paint) SK_OVERRIDE;
|
||||
|
|
|
@ -45,7 +45,7 @@ public:
|
|||
virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
|
|
|
@ -50,7 +50,7 @@ public:
|
|||
virtual void drawPath(const SkPath& path, const SkPaint& paint) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
|
||||
const SkPaint* paint = NULL) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint = NULL) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
|
||||
const SkPaint* paint = NULL) SK_OVERRIDE;
|
||||
|
|
|
@ -101,10 +101,10 @@ void SkBBoxRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar to
|
|||
}
|
||||
}
|
||||
|
||||
void SkBBoxRecord::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void SkBBoxRecord::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
if (this->transformBounds(dst, paint)) {
|
||||
INHERITED::drawBitmapRect(bitmap, src, dst, paint);
|
||||
INHERITED::drawBitmapRectToRect(bitmap, src, dst, paint);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
const SkPaint& paint) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
|
||||
const SkPaint* paint = NULL) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& mat,
|
||||
const SkPaint* paint) SK_OVERRIDE;
|
||||
|
|
|
@ -1576,13 +1576,12 @@ void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
|
|||
}
|
||||
|
||||
// this one is non-virtual, so it can be called safely by other canvas apis
|
||||
void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
if (bitmap.width() == 0 || bitmap.height() == 0 || dst.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// do this now, to avoid the cost of calling extract for RLE bitmaps
|
||||
if (NULL == paint || paint->canComputeFastBounds()) {
|
||||
SkRect storage;
|
||||
const SkRect* bounds = &dst;
|
||||
|
@ -1594,43 +1593,45 @@ void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkIRect* src
|
|||
}
|
||||
}
|
||||
|
||||
const SkBitmap* bitmapPtr = &bitmap;
|
||||
|
||||
SkMatrix matrix;
|
||||
SkRect tmpSrc;
|
||||
if (src) {
|
||||
tmpSrc.set(*src);
|
||||
// if the extract process clipped off the top or left of the
|
||||
// original, we adjust for that here to get the position right.
|
||||
if (tmpSrc.fLeft > 0) {
|
||||
tmpSrc.fRight -= tmpSrc.fLeft;
|
||||
tmpSrc.fLeft = 0;
|
||||
// Compute matrix from the two rectangles
|
||||
{
|
||||
SkRect tmpSrc;
|
||||
if (src) {
|
||||
tmpSrc = *src;
|
||||
// if the extract process clipped off the top or left of the
|
||||
// original, we adjust for that here to get the position right.
|
||||
if (tmpSrc.fLeft > 0) {
|
||||
tmpSrc.fRight -= tmpSrc.fLeft;
|
||||
tmpSrc.fLeft = 0;
|
||||
}
|
||||
if (tmpSrc.fTop > 0) {
|
||||
tmpSrc.fBottom -= tmpSrc.fTop;
|
||||
tmpSrc.fTop = 0;
|
||||
}
|
||||
} else {
|
||||
tmpSrc.set(0, 0, SkIntToScalar(bitmap.width()),
|
||||
SkIntToScalar(bitmap.height()));
|
||||
}
|
||||
if (tmpSrc.fTop > 0) {
|
||||
tmpSrc.fBottom -= tmpSrc.fTop;
|
||||
tmpSrc.fTop = 0;
|
||||
}
|
||||
} else {
|
||||
tmpSrc.set(0, 0, SkIntToScalar(bitmap.width()),
|
||||
SkIntToScalar(bitmap.height()));
|
||||
matrix.setRectToRect(tmpSrc, dst, SkMatrix::kFill_ScaleToFit);
|
||||
}
|
||||
matrix.setRectToRect(tmpSrc, dst, SkMatrix::kFill_ScaleToFit);
|
||||
|
||||
// ensure that src is "valid" before we pass it to our internal routines
|
||||
// and to SkDevice. i.e. sure it is contained inside the original bitmap.
|
||||
SkIRect tmpISrc;
|
||||
SkIRect isrcStorage;
|
||||
SkIRect* isrcPtr = NULL;
|
||||
if (src) {
|
||||
tmpISrc.set(0, 0, bitmap.width(), bitmap.height());
|
||||
if (!tmpISrc.intersect(*src)) {
|
||||
src->roundOut(&isrcStorage);
|
||||
if (!isrcStorage.intersect(0, 0, bitmap.width(), bitmap.height())) {
|
||||
return;
|
||||
}
|
||||
src = &tmpISrc;
|
||||
isrcPtr = &isrcStorage;
|
||||
}
|
||||
this->internalDrawBitmap(*bitmapPtr, src, matrix, paint);
|
||||
this->internalDrawBitmap(bitmap, isrcPtr, matrix, paint);
|
||||
}
|
||||
|
||||
void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
void SkCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
SkDEBUGCODE(bitmap.validate();)
|
||||
this->internalDrawBitmapRect(bitmap, src, dst, paint);
|
||||
}
|
||||
|
@ -1678,8 +1679,12 @@ void SkCanvas::internalDrawBitmapNine(const SkBitmap& bitmap,
|
|||
c.fRight = SkPin32(center.fRight, c.fLeft, w);
|
||||
c.fBottom = SkPin32(center.fBottom, c.fTop, h);
|
||||
|
||||
const int32_t srcX[4] = { 0, c.fLeft, c.fRight, w };
|
||||
const int32_t srcY[4] = { 0, c.fTop, c.fBottom, h };
|
||||
const SkScalar srcX[4] = {
|
||||
0, SkIntToScalar(c.fLeft), SkIntToScalar(c.fRight), w
|
||||
};
|
||||
const SkScalar srcY[4] = {
|
||||
0, SkIntToScalar(c.fTop), SkIntToScalar(c.fBottom), h
|
||||
};
|
||||
SkScalar dstX[4] = {
|
||||
dst.fLeft, dst.fLeft + SkIntToScalar(c.fLeft),
|
||||
dst.fRight - SkIntToScalar(w - c.fRight), dst.fRight
|
||||
|
@ -1699,9 +1704,9 @@ void SkCanvas::internalDrawBitmapNine(const SkBitmap& bitmap,
|
|||
dstY[2] = dstY[1];
|
||||
}
|
||||
|
||||
SkIRect s;
|
||||
SkRect d;
|
||||
for (int y = 0; y < 3; y++) {
|
||||
SkRect s, d;
|
||||
|
||||
s.fTop = srcY[y];
|
||||
s.fBottom = srcY[y+1];
|
||||
d.fTop = dstY[y];
|
||||
|
|
|
@ -240,7 +240,8 @@ void SkPicture::draw(SkCanvas* surface) {
|
|||
// V4 : move SkPictInfo to be the header
|
||||
// V5 : don't read/write FunctionPtr on cross-process (we can detect that)
|
||||
// V6 : added serialization of SkPath's bounds (and packed its flags tighter)
|
||||
#define PICTURE_VERSION 6
|
||||
// V7 : changed drawBitmapRect(IRect) to drawBitmapRectToRect(Rect)
|
||||
#define PICTURE_VERSION 7
|
||||
|
||||
SkPicture::SkPicture(SkStream* stream, bool* success) : SkRefCnt() {
|
||||
if (success) {
|
||||
|
|
|
@ -33,7 +33,7 @@ enum DrawType {
|
|||
DRAW_BITMAP,
|
||||
DRAW_BITMAP_MATRIX,
|
||||
DRAW_BITMAP_NINE,
|
||||
DRAW_BITMAP_RECT,
|
||||
DRAW_BITMAP_RECT_TO_RECT,
|
||||
DRAW_CLEAR,
|
||||
DRAW_DATA,
|
||||
DRAW_PAINT,
|
||||
|
|
|
@ -672,12 +672,12 @@ void SkPicturePlayback::draw(SkCanvas& canvas) {
|
|||
const SkPoint& loc = reader.skipT<SkPoint>();
|
||||
canvas.drawBitmap(bitmap, loc.fX, loc.fY, paint);
|
||||
} break;
|
||||
case DRAW_BITMAP_RECT: {
|
||||
case DRAW_BITMAP_RECT_TO_RECT: {
|
||||
const SkPaint* paint = getPaint(reader);
|
||||
const SkBitmap& bitmap = getBitmap(reader);
|
||||
const SkIRect* src = this->getIRectPtr(reader); // may be null
|
||||
const SkRect* src = this->getRectPtr(reader); // may be null
|
||||
const SkRect& dst = reader.skipT<SkRect>(); // required
|
||||
canvas.drawBitmapRect(bitmap, src, dst, paint);
|
||||
canvas.drawBitmapRectToRect(bitmap, src, dst, paint);
|
||||
} break;
|
||||
case DRAW_BITMAP_MATRIX: {
|
||||
const SkPaint* paint = getPaint(reader);
|
||||
|
|
|
@ -426,12 +426,12 @@ void SkPictureRecord::drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar
|
|||
validate();
|
||||
}
|
||||
|
||||
void SkPictureRecord::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void SkPictureRecord::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
addDraw(DRAW_BITMAP_RECT);
|
||||
addDraw(DRAW_BITMAP_RECT_TO_RECT);
|
||||
addPaintPtr(paint);
|
||||
addBitmap(bitmap);
|
||||
addIRectPtr(src); // may be null
|
||||
addRectPtr(src); // may be null
|
||||
addRect(dst);
|
||||
validate();
|
||||
}
|
||||
|
|
|
@ -46,8 +46,8 @@ public:
|
|||
virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center,
|
||||
|
|
|
@ -41,7 +41,7 @@ enum DrawOps {
|
|||
kDrawBitmap_DrawOp,
|
||||
kDrawBitmapMatrix_DrawOp,
|
||||
kDrawBitmapNine_DrawOp,
|
||||
kDrawBitmapRect_DrawOp,
|
||||
kDrawBitmapRectToRect_DrawOp,
|
||||
kDrawClear_DrawOp,
|
||||
kDrawData_DrawOp,
|
||||
kDrawPaint_DrawOp,
|
||||
|
|
|
@ -221,7 +221,7 @@ public:
|
|||
virtual void drawPath(const SkPath& path, const SkPaint&) SK_OVERRIDE;
|
||||
virtual void drawBitmap(const SkBitmap&, SkScalar left, SkScalar top,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapRect(const SkBitmap&, const SkIRect* src,
|
||||
virtual void drawBitmapRectToRect(const SkBitmap&, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint*) SK_OVERRIDE;
|
||||
virtual void drawBitmapMatrix(const SkBitmap&, const SkMatrix&,
|
||||
const SkPaint*) SK_OVERRIDE;
|
||||
|
@ -732,7 +732,7 @@ void SkGPipeCanvas::drawBitmap(const SkBitmap& bm, SkScalar left, SkScalar top,
|
|||
}
|
||||
}
|
||||
|
||||
void SkGPipeCanvas::drawBitmapRect(const SkBitmap& bm, const SkIRect* src,
|
||||
void SkGPipeCanvas::drawBitmapRectToRect(const SkBitmap& bm, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
NOTIFY_SETUP(this);
|
||||
size_t opBytesNeeded = sizeof(SkRect);
|
||||
|
@ -745,12 +745,9 @@ void SkGPipeCanvas::drawBitmapRect(const SkBitmap& bm, const SkIRect* src,
|
|||
flags = 0;
|
||||
}
|
||||
|
||||
if (this->commonDrawBitmap(bm, kDrawBitmapRect_DrawOp, flags, opBytesNeeded, paint)) {
|
||||
if (this->commonDrawBitmap(bm, kDrawBitmapRectToRect_DrawOp, flags, opBytesNeeded, paint)) {
|
||||
if (hasSrc) {
|
||||
fWriter.write32(src->fLeft);
|
||||
fWriter.write32(src->fTop);
|
||||
fWriter.write32(src->fRight);
|
||||
fWriter.write32(src->fBottom);
|
||||
fWriter.writeRect(*src);
|
||||
}
|
||||
fWriter.writeRect(dst);
|
||||
}
|
||||
|
|
|
@ -856,10 +856,10 @@ void SkDeferredCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left,
|
|||
this->recordedDrawCommand();
|
||||
}
|
||||
|
||||
void SkDeferredCanvas::drawBitmapRect(const SkBitmap& bitmap,
|
||||
const SkIRect* src,
|
||||
const SkRect& dst,
|
||||
const SkPaint* paint) {
|
||||
void SkDeferredCanvas::drawBitmapRectToRect(const SkBitmap& bitmap,
|
||||
const SkRect* src,
|
||||
const SkRect& dst,
|
||||
const SkPaint* paint) {
|
||||
if (fDeferredDrawing &&
|
||||
this->isFullFrame(&dst, paint) &&
|
||||
isPaintOpaque(paint, &bitmap)) {
|
||||
|
@ -867,7 +867,7 @@ void SkDeferredCanvas::drawBitmapRect(const SkBitmap& bitmap,
|
|||
}
|
||||
|
||||
AutoImmediateDrawIfNeeded autoDraw(*this, &bitmap, paint);
|
||||
this->drawingCanvas()->drawBitmapRect(bitmap, src, dst, paint);
|
||||
this->drawingCanvas()->drawBitmapRectToRect(bitmap, src, dst, paint);
|
||||
this->recordedDrawCommand();
|
||||
}
|
||||
|
||||
|
|
|
@ -318,21 +318,21 @@ void SkDumpCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
|
|||
SkScalarToFloat(x), SkScalarToFloat(y));
|
||||
}
|
||||
|
||||
void SkDumpCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
void SkDumpCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
SkString bs, rs;
|
||||
toString(bitmap, &bs);
|
||||
toString(dst, &rs);
|
||||
// show the src-rect only if its not everything
|
||||
if (src && (src->fLeft > 0 || src->fTop > 0 ||
|
||||
src->fRight < bitmap.width() ||
|
||||
src->fBottom < bitmap.height())) {
|
||||
src->fRight < SkIntToScalar(bitmap.width()) ||
|
||||
src->fBottom < SkIntToScalar(bitmap.height()))) {
|
||||
SkString ss;
|
||||
toString(*src, &ss);
|
||||
rs.prependf("%s ", ss.c_str());
|
||||
}
|
||||
|
||||
this->dump(kDrawBitmap_Verb, paint, "drawBitmapRect(%s %s)",
|
||||
this->dump(kDrawBitmap_Verb, paint, "drawBitmapRectToRect(%s %s)",
|
||||
bs.c_str(), rs.c_str());
|
||||
}
|
||||
|
||||
|
|
|
@ -194,11 +194,11 @@ void SkNWayCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
|
|||
}
|
||||
}
|
||||
|
||||
void SkNWayCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void SkNWayCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
Iter iter(fList);
|
||||
while (iter.next()) {
|
||||
iter->drawBitmapRect(bitmap, src, dst, paint);
|
||||
iter->drawBitmapRectToRect(bitmap, src, dst, paint);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -92,9 +92,9 @@ void SkProxyCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
|
|||
fProxy->drawBitmap(bitmap, x, y, paint);
|
||||
}
|
||||
|
||||
void SkProxyCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
|
||||
void SkProxyCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src,
|
||||
const SkRect& dst, const SkPaint* paint) {
|
||||
fProxy->drawBitmapRect(bitmap, src, dst, paint);
|
||||
fProxy->drawBitmapRectToRect(bitmap, src, dst, paint);
|
||||
}
|
||||
|
||||
void SkProxyCanvas::drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
|
||||
|
|
Загрузка…
Ссылка в новой задаче