aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar borenet <borenet@google.com>2014-09-24 11:03:35 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-24 11:03:35 -0700
commit2456b7681aea8d91072186b17f8209955846f2f7 (patch)
tree9dabc7c1da1747c5ceef289b14fa5f3ee5b56f46
parentd632ea4b9eec5be3f83a9fa4982a30202e1239a7 (diff)
Revert of SkCanvas::drawImage is the new way for drawing an SkImage to a Canvas (patchset #9 id:160001 of https://codereview.chromium.org/583453002/)
Reason for revert: Broke ChromiumOS Ozone builder: http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Ozone%20Builder/builds/4087/steps/compile/logs/stdio Reverting to unblock DEPS roll. Original issue's description: > SkCanvas::drawImage is the new way for drawing a SkImage to a Canvas > > BUG=skia:2947 > > Committed: https://skia.googlesource.com/skia/+/432789972c1e1f8a66165c75a250dba1853efa08 R=junov@chromium.org, reed@google.com, bsalomon@google.com, piotaixr@chromium.org TBR=bsalomon@google.com, junov@chromium.org, piotaixr@chromium.org, reed@google.com NOTREECHECKS=true NOTRY=true BUG=skia:2947 Author: borenet@google.com Review URL: https://codereview.chromium.org/598133002
-rwxr-xr-xgm/dftext.cpp2
-rw-r--r--gm/image.cpp14
-rw-r--r--gm/multipicturedraw.cpp46
-rw-r--r--include/core/SkCanvas.h12
-rw-r--r--include/core/SkImage.h24
-rw-r--r--samplecode/SampleTextureDomain.cpp4
-rw-r--r--src/core/SkCanvas.cpp32
-rw-r--r--src/gpu/GrRecordReplaceDraw.cpp4
-rw-r--r--src/image/SkSurface.cpp2
-rw-r--r--src/utils/SkLua.cpp2
-rw-r--r--tests/CachedDecodingPixelRefTest.cpp2
11 files changed, 61 insertions, 83 deletions
diff --git a/gm/dftext.cpp b/gm/dftext.cpp
index 5f58cb91ff..59106f7344 100755
--- a/gm/dftext.cpp
+++ b/gm/dftext.cpp
@@ -176,7 +176,7 @@ protected:
// render offscreen buffer
if (surface) {
SkImage* image = surface->newImageSnapshot();
- inputCanvas->drawImage(image, 0, 0, NULL);
+ image->draw(inputCanvas, 0, 0, NULL);
image->unref();
}
#endif
diff --git a/gm/image.cpp b/gm/image.cpp
index 05a3fab2b4..a0959b2fdd 100644
--- a/gm/image.cpp
+++ b/gm/image.cpp
@@ -30,7 +30,7 @@ static void drawJpeg(SkCanvas* canvas, const SkISize& size) {
SkAutoCanvasRestore acr(canvas, true);
canvas->scale(size.width() * 1.0f / image->width(),
size.height() * 1.0f / image->height());
- canvas->drawImage(image, 0, 0, NULL);
+ image->draw(canvas, 0, 0, NULL);
image->unref();
}
}
@@ -77,8 +77,8 @@ static void test_surface(SkCanvas* canvas, SkSurface* surf, bool usePaint) {
// paint.setFilterBitmap(true);
// paint.setAlpha(0x80);
- canvas->drawImage(imgR, 0, 0, usePaint ? &paint : NULL);
- canvas->drawImage(imgG, 0, 80, usePaint ? &paint : NULL);
+ imgR->draw(canvas, 0, 0, usePaint ? &paint : NULL);
+ imgG->draw(canvas, 0, 80, usePaint ? &paint : NULL);
surf->draw(canvas, 0, 160, usePaint ? &paint : NULL);
SkRect src1, src2, src3;
@@ -93,10 +93,10 @@ static void test_surface(SkCanvas* canvas, SkSurface* surf, bool usePaint) {
dst3.set(0, 400, 65, 465);
dst4.set(0, 480, 65, 545);
- canvas->drawImageRect(imgR, &src1, dst1, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgG, &src2, dst2, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgR, &src3, dst3, usePaint ? &paint : NULL);
- canvas->drawImageRect(imgG, NULL, dst4, usePaint ? &paint : NULL);
+ imgR->draw(canvas, &src1, dst1, usePaint ? &paint : NULL);
+ imgG->draw(canvas, &src2, dst2, usePaint ? &paint : NULL);
+ imgR->draw(canvas, &src3, dst3, usePaint ? &paint : NULL);
+ imgG->draw(canvas, NULL, dst4, usePaint ? &paint : NULL);
imgG->unref();
imgR->unref();
diff --git a/gm/multipicturedraw.cpp b/gm/multipicturedraw.cpp
index 75a4c89196..a915acd625 100644
--- a/gm/multipicturedraw.cpp
+++ b/gm/multipicturedraw.cpp
@@ -56,7 +56,7 @@ static const SkPicture* make_hex_plane_picture(SkColor fillColor) {
SkPictureRecorder recorder;
- SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
+ SkCanvas* canvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
SkIntToScalar(kPicHeight));
SkScalar xPos, yPos = 0;
@@ -138,7 +138,7 @@ static const SkPicture* make_sub_picture(const SkPicture* tri) {
}
// Create a Sierpinkski-like picture that starts with a top row with a picture
-// that just contains a triangle. Subsequent rows take the prior row's picture,
+// that just contains a triangle. Subsequent rows take the prior row's picture,
// shrinks it and replicates it 3 times then draws and appropriate number of
// copies of it.
static const SkPicture* make_sierpinski_picture() {
@@ -217,7 +217,7 @@ static void rrect_clip(SkCanvas* canvas, const SkPicture* pictures[kNumPictures]
SkRect rect = pictures[0]->cullRect();
rect.inset(kInset, kInset);
-
+
SkRRect rrect;
rrect.setRectXY(rect, kInset, kInset);
@@ -280,7 +280,7 @@ static void create_content(SkMultiPictureDraw* mpd, PFContentMtd pfGen,
{
SkPictureRecorder recorder;
- SkCanvas* pictureCanvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
+ SkCanvas* pictureCanvas = recorder.beginRecording(SkIntToScalar(kPicWidth),
SkIntToScalar(kPicHeight));
(*pfGen)(pictureCanvas, pictures);
@@ -291,13 +291,13 @@ static void create_content(SkMultiPictureDraw* mpd, PFContentMtd pfGen,
mpd->add(dest, composite, &xform);
}
-typedef void(*PFLayoutMtd)(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
+typedef void(*PFLayoutMtd)(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
PFContentMtd pfGen, const SkPicture* pictures[kNumPictures],
SkTArray<ComposeStep>* composeSteps);
// Draw the content into a single canvas
-static void simple(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
- PFContentMtd pfGen,
+static void simple(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
+ PFContentMtd pfGen,
const SkPicture* pictures[kNumPictures],
SkTArray<ComposeStep> *composeSteps) {
@@ -312,7 +312,7 @@ static void simple(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
// Draw the content into multiple canvases/tiles
static void tiled(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
- PFContentMtd pfGen,
+ PFContentMtd pfGen,
const SkPicture* pictures[kNumPictures],
SkTArray<ComposeStep> *composeSteps) {
static const int kNumTilesX = 2;
@@ -324,7 +324,7 @@ static void tiled(SkCanvas* finalCanvas, SkMultiPictureDraw* mpd,
SkASSERT(kPicHeight == kNumTilesY * kTileHeight);
static const SkColor colors[kNumTilesX][kNumTilesY] = {
- { SK_ColorCYAN, SK_ColorMAGENTA },
+ { SK_ColorCYAN, SK_ColorMAGENTA },
{ SK_ColorYELLOW, SK_ColorGREEN }
};
@@ -415,8 +415,8 @@ namespace skiagm {
SkTArray<ComposeStep> composeSteps;
// Fill up the MultiPictureDraw
- (*gLayoutMthds[fLayout])(canvas, &mpd,
- gContentMthds[fContent],
+ (*gLayoutMthds[fLayout])(canvas, &mpd,
+ gContentMthds[fContent],
fPictures, &composeSteps);
mpd.draw();
@@ -427,14 +427,14 @@ namespace skiagm {
SkAutoTUnref<SkImage> image(step.fSurf->newImageSnapshot());
- canvas->drawImage(image, step.fX, step.fY, step.fPaint);
+ image->draw(canvas, step.fX, step.fY, step.fPaint);
}
}
virtual SkISize onISize() SK_OVERRIDE { return SkISize::Make(kPicWidth, kPicHeight); }
virtual SkString onShortName() SK_OVERRIDE {
- static const char* gContentNames[] = {
+ static const char* gContentNames[] = {
"noclip", "rectclip", "rrectclip", "pathclip", "invpathclip", "sierpinski"
};
static const char* gLayoutNames[] = { "simple", "tiled" };
@@ -456,28 +456,28 @@ namespace skiagm {
typedef GM INHERITED;
};
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kNoClipSingle_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kNoClipSingle_Content,
MultiPictureDraw::kSimple_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRectClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRectClipMulti_Content,
MultiPictureDraw::kSimple_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMulti_Content,
MultiPictureDraw::kSimple_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti_Content,
MultiPictureDraw::kSimple_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMulti_Content,
MultiPictureDraw::kSimple_Layout));)
DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kSierpinski_Content,
MultiPictureDraw::kSimple_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kNoClipSingle_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kNoClipSingle_Content,
MultiPictureDraw::kTiled_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRectClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRectClipMulti_Content,
MultiPictureDraw::kTiled_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kRRectClipMulti_Content,
MultiPictureDraw::kTiled_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kPathClipMulti_Content,
MultiPictureDraw::kTiled_Layout));)
- DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMulti_Content,
+ DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kInvPathClipMulti_Content,
MultiPictureDraw::kTiled_Layout));)
DEF_GM(return SkNEW_ARGS(MultiPictureDraw, (MultiPictureDraw::kSierpinski_Content,
MultiPictureDraw::kTiled_Layout));)
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 5828466d62..77038c3067 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -29,7 +29,6 @@ class SkCanvasClipVisitor;
class SkBaseDevice;
class SkDraw;
class SkDrawFilter;
-class SkImage;
class SkMetaData;
class SkPicture;
class SkRRect;
@@ -812,13 +811,6 @@ public:
*/
virtual void drawPath(const SkPath& path, const SkPaint& paint);
- virtual void drawImage(const SkImage* image, SkScalar left, SkScalar top,
- const SkPaint* paint = NULL);
-
- virtual void drawImageRect(const SkImage* image, const SkRect* src,
- const SkRect& dst,
- const SkPaint* paint = NULL);
-
/** Draw the specified bitmap, with its top/left corner at (x,y), using the
specified paint, transformed by the current matrix. Note: if the paint
contains a maskfilter that generates a mask which extends beyond the
@@ -1321,7 +1313,7 @@ private:
friend class SkSurface_Raster; // needs getDevice()
friend class SkRecorder; // InitFlags
friend class SkNoSaveLayerCanvas; // InitFlags
-
+
enum InitFlags {
kDefault_InitFlags = 0,
kConservativeRasterClip_InitFlag = 1 << 0,
@@ -1332,7 +1324,7 @@ private:
// needs gettotalclip()
friend SkCanvasState* SkCanvasStateUtils::CaptureCanvasState(SkCanvas*);
-
+
SkBaseDevice* createLayerDevice(const SkImageInfo&);
// call this each time we attach ourselves to a device
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index c7625f6b4d..a723aeeb86 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -71,6 +71,17 @@ public:
SkShader::TileMode,
const SkMatrix* localMatrix = NULL) const;
+ void draw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const;
+
+ /**
+ * Draw the image, cropped to the src rect, to the dst rect of a canvas.
+ * If src is larger than the bounds of the image, the rest of the image is
+ * filled with transparent black pixels.
+ *
+ * See SkCanvas::drawBitmapRectToRect for similar behavior.
+ */
+ void draw(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) const;
+
/**
* If the image has direct access to its pixels (i.e. they are in local
* RAM) return the (const) address of those pixels, and if not null, return
@@ -111,19 +122,6 @@ private:
typedef SkRefCnt INHERITED;
- friend class SkCanvas;
-
- void draw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const;
-
- /**
- * Draw the image, cropped to the src rect, to the dst rect of a canvas.
- * If src is larger than the bounds of the image, the rest of the image is
- * filled with transparent black pixels.
- *
- * See SkCanvas::drawBitmapRectToRect for similar behavior.
- */
- void draw(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) const;
-
/**
* Return a copy of the image's pixels, limiting them to the subset
* rectangle's intersection wit the image bounds. If subset is NULL, then
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp
index af511c7b03..926c5596b0 100644
--- a/samplecode/SampleTextureDomain.cpp
+++ b/samplecode/SampleTextureDomain.cpp
@@ -71,7 +71,7 @@ protected:
srcRect.setXYWH(1, 1, 3, 3);
dstRect.setXYWH(405, 5, 305, 305);
- canvas->drawImageRect(image, &srcRect, dstRect, &paint);
+ image->draw(canvas, &srcRect, dstRect, &paint);
// Test that bitmap blurring using a subrect
// renders correctly
@@ -83,7 +83,7 @@ protected:
SkBlurMaskFilter::kHighQuality_BlurFlag |
SkBlurMaskFilter::kIgnoreTransform_BlurFlag);
paint.setMaskFilter(mf)->unref();
- canvas->drawImageRect(image, &srcRect, dstRect, &paint);
+ image->draw(canvas, &srcRect, dstRect, &paint);
// Blur and a rotation + NULL src rect
// This should not trigger the texture domain code
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index afd7fbef88..dcc7047dbc 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -12,7 +12,6 @@
#include "SkDraw.h"
#include "SkDrawFilter.h"
#include "SkDrawLooper.h"
-#include "SkImage.h"
#include "SkMetaData.h"
#include "SkPathOps.h"
#include "SkPatchUtils.h"
@@ -184,7 +183,7 @@ public:
fFilter = NULL;
fLayer = NULL;
fTopLayer = NULL;
-
+
// don't bother initializing fNext
inc_rec();
}
@@ -193,7 +192,7 @@ public:
fFilter = SkSafeRef(prev.fFilter);
fLayer = NULL;
fTopLayer = prev.fTopLayer;
-
+
// don't bother initializing fNext
inc_rec();
}
@@ -293,7 +292,7 @@ public:
// can we be marked as simple?
fIsSimple = !fFilter && !fDoClearImageFilter;
}
-
+
uint32_t oldFlags = paint.getFlags();
fNewPaintFlags = filter_paint_flags(props, oldFlags);
if (fIsSimple && (fNewPaintFlags != oldFlags)) {
@@ -458,7 +457,7 @@ public:
SkNoPixelsBitmapDevice(int width, int height) : INHERITED(make_nopixels(width, height)) {}
private:
-
+
typedef SkBitmapDevice INHERITED;
};
@@ -467,7 +466,7 @@ SkCanvas::SkCanvas(int width, int height)
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
{
inc_canvas();
-
+
this->init(SkNEW_ARGS(SkNoPixelsBitmapDevice, (width, height)), kDefault_InitFlags)->unref();
}
@@ -476,7 +475,7 @@ SkCanvas::SkCanvas(int width, int height, InitFlags flags)
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
{
inc_canvas();
-
+
this->init(SkNEW_ARGS(SkNoPixelsBitmapDevice, (width, height)), flags)->unref();
}
@@ -485,7 +484,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device, const SkSurfaceProps* props, InitFlags
, fProps(SkSurfacePropsCopyOrDefault(props))
{
inc_canvas();
-
+
this->init(device, flags);
}
@@ -494,7 +493,7 @@ SkCanvas::SkCanvas(SkBaseDevice* device)
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
{
inc_canvas();
-
+
this->init(device, kDefault_InitFlags);
}
@@ -503,7 +502,7 @@ SkCanvas::SkCanvas(const SkBitmap& bitmap, const SkSurfaceProps& props)
, fProps(props)
{
inc_canvas();
-
+
SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap)));
this->init(device, kDefault_InitFlags);
}
@@ -513,7 +512,7 @@ SkCanvas::SkCanvas(const SkBitmap& bitmap)
, fProps(SkSurfaceProps::kLegacyFontHost_InitType)
{
inc_canvas();
-
+
SkAutoTUnref<SkBaseDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap)));
this->init(device, kDefault_InitFlags);
}
@@ -1886,17 +1885,6 @@ void SkCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
LOOPER_END
}
-void SkCanvas::drawImage(const SkImage* image, SkScalar left, SkScalar top,
- const SkPaint* paint) {
- image->draw(this, left, top, paint);
-}
-
-void SkCanvas::drawImageRect(const SkImage* image, const SkRect* src,
- const SkRect& dst,
- const SkPaint* paint) {
- image->draw(this, src, dst, paint);
-}
-
void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
const SkPaint* paint) {
SkDEBUGCODE(bitmap.validate();)
diff --git a/src/gpu/GrRecordReplaceDraw.cpp b/src/gpu/GrRecordReplaceDraw.cpp
index b0e00b8a74..932e5be6c4 100644
--- a/src/gpu/GrRecordReplaceDraw.cpp
+++ b/src/gpu/GrRecordReplaceDraw.cpp
@@ -57,12 +57,12 @@ static inline void draw_replacement_bitmap(const GrReplacements::ReplacementInfo
SkRect src = SkRect::Make(ri->fSrcRect);
SkRect dst = SkRect::MakeXYWH(SkIntToScalar(ri->fPos.fX),
SkIntToScalar(ri->fPos.fY),
- SkIntToScalar(ri->fSrcRect.width()),
+ SkIntToScalar(ri->fSrcRect.width()),
SkIntToScalar(ri->fSrcRect.height()));
canvas->save();
canvas->setMatrix(initialMatrix);
- canvas->drawImageRect(ri->fImage, &src, dst, ri->fPaint);
+ ri->fImage->draw(canvas, &src, dst, ri->fPaint);
canvas->restore();
}
diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp
index b10782a0ef..861515dd83 100644
--- a/src/image/SkSurface.cpp
+++ b/src/image/SkSurface.cpp
@@ -76,7 +76,7 @@ SkSurface_Base::~SkSurface_Base() {
void SkSurface_Base::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) {
SkImage* image = this->newImageSnapshot();
if (image) {
- canvas->drawImage(image, x, y, paint);
+ image->draw(canvas, x, y, paint);
image->unref();
}
}
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index 9880fe4408..d41a8faaca 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -456,7 +456,7 @@ static int lcanvas_drawImage(lua_State* L) {
paint.setAlpha(SkScalarRoundToInt(lua2scalar(L, 5) * 255));
paintPtr = &paint;
}
- canvas->drawImage(image, x, y, paintPtr);
+ image->draw(canvas, x, y, paintPtr);
return 0;
}
diff --git a/tests/CachedDecodingPixelRefTest.cpp b/tests/CachedDecodingPixelRefTest.cpp
index b3eb5327d9..92e9d78549 100644
--- a/tests/CachedDecodingPixelRefTest.cpp
+++ b/tests/CachedDecodingPixelRefTest.cpp
@@ -350,7 +350,7 @@ DEF_TEST(Image_NewFromGenerator, r) {
SkCanvas canvas(bitmap);
const SkColor kDefaultColor = 0xffabcdef;
canvas.clear(kDefaultColor);
- canvas.drawImage(image, 0, 0, NULL);
+ image->draw(&canvas, 0, 0, NULL);
if (TestImageGenerator::kSucceedGetPixels_TestType == test) {
REPORTER_ASSERT(
r, TestImageGenerator::Color() == *bitmap.getAddr32(0, 0));