| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkBigPicture.h" | 8 #include "SkBigPicture.h" |
| 9 #include "SkCanvasPriv.h" | 9 #include "SkCanvasPriv.h" |
| 10 #include "SkImage.h" | 10 #include "SkImage.h" |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 const SkRect& dst, | 201 const SkRect& dst, |
| 202 const SkPaint* paint) { | 202 const SkPaint* paint) { |
| 203 sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); | 203 sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); |
| 204 if (image) { | 204 if (image) { |
| 205 this->onDrawImageNine(image.get(), center, dst, paint); | 205 this->onDrawImageNine(image.get(), center, dst, paint); |
| 206 } | 206 } |
| 207 } | 207 } |
| 208 | 208 |
| 209 void SkRecorder::onDrawImage(const SkImage* image, SkScalar left, SkScalar top, | 209 void SkRecorder::onDrawImage(const SkImage* image, SkScalar left, SkScalar top, |
| 210 const SkPaint* paint) { | 210 const SkPaint* paint) { |
| 211 APPEND(DrawImage, this->copy(paint), image, left, top); | 211 APPEND(DrawImage, this->copy(paint), sk_ref_sp(image), left, top); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void SkRecorder::onDrawImageRect(const SkImage* image, const SkRect* src, const
SkRect& dst, | 214 void SkRecorder::onDrawImageRect(const SkImage* image, const SkRect* src, const
SkRect& dst, |
| 215 const SkPaint* paint, SrcRectConstraint constra
int) { | 215 const SkPaint* paint, SrcRectConstraint constra
int) { |
| 216 APPEND(DrawImageRect, this->copy(paint), image, this->copy(src), dst, constr
aint); | 216 APPEND(DrawImageRect, this->copy(paint), sk_ref_sp(image), this->copy(src),
dst, constraint); |
| 217 } | 217 } |
| 218 | 218 |
| 219 void SkRecorder::onDrawImageNine(const SkImage* image, const SkIRect& center, | 219 void SkRecorder::onDrawImageNine(const SkImage* image, const SkIRect& center, |
| 220 const SkRect& dst, const SkPaint* paint) { | 220 const SkRect& dst, const SkPaint* paint) { |
| 221 APPEND(DrawImageNine, this->copy(paint), image, center, dst); | 221 APPEND(DrawImageNine, this->copy(paint), sk_ref_sp(image), center, dst); |
| 222 } | 222 } |
| 223 | 223 |
| 224 void SkRecorder::onDrawText(const void* text, size_t byteLength, | 224 void SkRecorder::onDrawText(const void* text, size_t byteLength, |
| 225 SkScalar x, SkScalar y, const SkPaint& paint) { | 225 SkScalar x, SkScalar y, const SkPaint& paint) { |
| 226 APPEND(DrawText, | 226 APPEND(DrawText, |
| 227 paint, this->copy((const char*)text, byteLength), byteLength, x, y); | 227 paint, this->copy((const char*)text, byteLength), byteLength, x, y); |
| 228 } | 228 } |
| 229 | 229 |
| 230 void SkRecorder::onDrawPosText(const void* text, size_t byteLength, | 230 void SkRecorder::onDrawPosText(const void* text, size_t byteLength, |
| 231 const SkPoint pos[], const SkPaint& paint) { | 231 const SkPoint pos[], const SkPaint& paint) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 paint, | 264 paint, |
| 265 this->copy((const char*)text, byteLength), | 265 this->copy((const char*)text, byteLength), |
| 266 byteLength, | 266 byteLength, |
| 267 this->copy(xform, paint.countText(text, byteLength)), | 267 this->copy(xform, paint.countText(text, byteLength)), |
| 268 this->copy(cull)); | 268 this->copy(cull)); |
| 269 } | 269 } |
| 270 | 270 |
| 271 void SkRecorder::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, | 271 void SkRecorder::onDrawTextBlob(const SkTextBlob* blob, SkScalar x, SkScalar y, |
| 272 const SkPaint& paint) { | 272 const SkPaint& paint) { |
| 273 TRY_MINIRECORDER(drawTextBlob, blob, x, y, paint); | 273 TRY_MINIRECORDER(drawTextBlob, blob, x, y, paint); |
| 274 APPEND(DrawTextBlob, paint, blob, x, y); | 274 APPEND(DrawTextBlob, paint, sk_ref_sp(blob), x, y); |
| 275 } | 275 } |
| 276 | 276 |
| 277 void SkRecorder::onDrawPicture(const SkPicture* pic, const SkMatrix* matrix, con
st SkPaint* paint) { | 277 void SkRecorder::onDrawPicture(const SkPicture* pic, const SkMatrix* matrix, con
st SkPaint* paint) { |
| 278 if (fDrawPictureMode == Record_DrawPictureMode) { | 278 if (fDrawPictureMode == Record_DrawPictureMode) { |
| 279 fApproxBytesUsedBySubPictures += SkPictureUtils::ApproximateBytesUsed(pi
c); | 279 fApproxBytesUsedBySubPictures += SkPictureUtils::ApproximateBytesUsed(pi
c); |
| 280 APPEND(DrawPicture, this->copy(paint), pic, matrix ? *matrix : SkMatrix:
:I()); | 280 APPEND(DrawPicture, this->copy(paint), sk_ref_sp(pic), matrix ? *matrix
: SkMatrix::I()); |
| 281 } else { | 281 } else { |
| 282 SkASSERT(fDrawPictureMode == Playback_DrawPictureMode); | 282 SkASSERT(fDrawPictureMode == Playback_DrawPictureMode); |
| 283 SkAutoCanvasMatrixPaint acmp(this, matrix, paint, pic->cullRect()); | 283 SkAutoCanvasMatrixPaint acmp(this, matrix, paint, pic->cullRect()); |
| 284 pic->playback(this); | 284 pic->playback(this); |
| 285 } | 285 } |
| 286 } | 286 } |
| 287 | 287 |
| 288 void SkRecorder::onDrawShadowedPicture(const SkPicture* pic, | 288 void SkRecorder::onDrawShadowedPicture(const SkPicture* pic, |
| 289 const SkMatrix* matrix, | 289 const SkMatrix* matrix, |
| 290 const SkPaint* paint) { | 290 const SkPaint* paint) { |
| 291 if (fDrawPictureMode == Record_DrawPictureMode) { | 291 if (fDrawPictureMode == Record_DrawPictureMode) { |
| 292 fApproxBytesUsedBySubPictures += SkPictureUtils::ApproximateBytesUsed(pi
c); | 292 fApproxBytesUsedBySubPictures += SkPictureUtils::ApproximateBytesUsed(pi
c); |
| 293 APPEND(DrawShadowedPicture, this->copy(paint), pic, matrix ? *matrix : S
kMatrix::I()); | 293 APPEND(DrawShadowedPicture, this->copy(paint), |
| 294 sk_ref_sp(pic), |
| 295 matrix ? *matrix : SkMatrix::I()); |
| 294 } else { | 296 } else { |
| 295 SkASSERT(fDrawPictureMode == Playback_DrawPictureMode); | 297 SkASSERT(fDrawPictureMode == Playback_DrawPictureMode); |
| 296 SkAutoCanvasMatrixPaint acmp(this, matrix, paint, pic->cullRect()); | 298 SkAutoCanvasMatrixPaint acmp(this, matrix, paint, pic->cullRect()); |
| 297 pic->playback(this); | 299 pic->playback(this); |
| 298 } | 300 } |
| 299 } | 301 } |
| 300 | 302 |
| 301 | 303 |
| 302 void SkRecorder::onDrawVertices(VertexMode vmode, | 304 void SkRecorder::onDrawVertices(VertexMode vmode, |
| 303 int vertexCount, const SkPoint vertices[], | 305 int vertexCount, const SkPoint vertices[], |
| 304 const SkPoint texs[], const SkColor colors[], | 306 const SkPoint texs[], const SkColor colors[], |
| 305 SkXfermode* xmode, | 307 SkXfermode* xmode, |
| 306 const uint16_t indices[], int indexCount, const
SkPaint& paint) { | 308 const uint16_t indices[], int indexCount, const
SkPaint& paint) { |
| 307 APPEND(DrawVertices, paint, | 309 APPEND(DrawVertices, paint, |
| 308 vmode, | 310 vmode, |
| 309 vertexCount, | 311 vertexCount, |
| 310 this->copy(vertices, vertexCount), | 312 this->copy(vertices, vertexCount), |
| 311 texs ? this->copy(texs, vertexCount) : nullptr, | 313 texs ? this->copy(texs, vertexCount) : nullptr, |
| 312 colors ? this->copy(colors, vertexCount) : nullptr, | 314 colors ? this->copy(colors, vertexCount) : nullptr, |
| 313 xmode, | 315 sk_ref_sp(xmode), |
| 314 this->copy(indices, indexCount), | 316 this->copy(indices, indexCount), |
| 315 indexCount); | 317 indexCount); |
| 316 } | 318 } |
| 317 | 319 |
| 318 void SkRecorder::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], | 320 void SkRecorder::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], |
| 319 const SkPoint texCoords[4], SkXfermode* xmode, cons
t SkPaint& paint) { | 321 const SkPoint texCoords[4], SkXfermode* xmode, cons
t SkPaint& paint) { |
| 320 APPEND(DrawPatch, paint, | 322 APPEND(DrawPatch, paint, |
| 321 cubics ? this->copy(cubics, SkPatchUtils::kNumCtrlPts) : nullptr, | 323 cubics ? this->copy(cubics, SkPatchUtils::kNumCtrlPts) : nullptr, |
| 322 colors ? this->copy(colors, SkPatchUtils::kNumCorners) : nullptr, | 324 colors ? this->copy(colors, SkPatchUtils::kNumCorners) : nullptr, |
| 323 texCoords ? this->copy(texCoords, SkPatchUtils::kNumCorners) : nullpt
r, | 325 texCoords ? this->copy(texCoords, SkPatchUtils::kNumCorners) : nullpt
r, |
| 324 xmode); | 326 sk_ref_sp(xmode)); |
| 325 } | 327 } |
| 326 | 328 |
| 327 void SkRecorder::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], cons
t SkRect tex[], | 329 void SkRecorder::onDrawAtlas(const SkImage* atlas, const SkRSXform xform[], cons
t SkRect tex[], |
| 328 const SkColor colors[], int count, SkXfermode::Mode
mode, | 330 const SkColor colors[], int count, SkXfermode::Mode
mode, |
| 329 const SkRect* cull, const SkPaint* paint) { | 331 const SkRect* cull, const SkPaint* paint) { |
| 330 APPEND(DrawAtlas, this->copy(paint), | 332 APPEND(DrawAtlas, this->copy(paint), |
| 331 atlas, | 333 sk_ref_sp(atlas), |
| 332 this->copy(xform, count), | 334 this->copy(xform, count), |
| 333 this->copy(tex, count), | 335 this->copy(tex, count), |
| 334 this->copy(colors, count), | 336 this->copy(colors, count), |
| 335 count, | 337 count, |
| 336 mode, | 338 mode, |
| 337 this->copy(cull)); | 339 this->copy(cull)); |
| 338 } | 340 } |
| 339 | 341 |
| 340 void SkRecorder::onDrawAnnotation(const SkRect& rect, const char key[], SkData*
value) { | 342 void SkRecorder::onDrawAnnotation(const SkRect& rect, const char key[], SkData*
value) { |
| 341 APPEND(DrawAnnotation, rect, SkString(key), value); | 343 APPEND(DrawAnnotation, rect, SkString(key), sk_ref_sp(value)); |
| 342 } | 344 } |
| 343 | 345 |
| 344 void SkRecorder::willSave() { | 346 void SkRecorder::willSave() { |
| 345 APPEND(Save); | 347 APPEND(Save); |
| 346 } | 348 } |
| 347 | 349 |
| 348 SkCanvas::SaveLayerStrategy SkRecorder::getSaveLayerStrategy(const SaveLayerRec&
rec) { | 350 SkCanvas::SaveLayerStrategy SkRecorder::getSaveLayerStrategy(const SaveLayerRec&
rec) { |
| 349 APPEND(SaveLayer, | 351 APPEND(SaveLayer, this->copy(rec.fBounds) |
| 350 this->copy(rec.fBounds), this->copy(rec.fPaint), rec.fBackdrop, rec.f
SaveLayerFlags); | 352 , this->copy(rec.fPaint) |
| 353 , sk_ref_sp(rec.fBackdrop) |
| 354 , rec.fSaveLayerFlags); |
| 351 return SkCanvas::kNoLayer_SaveLayerStrategy; | 355 return SkCanvas::kNoLayer_SaveLayerStrategy; |
| 352 } | 356 } |
| 353 | 357 |
| 354 void SkRecorder::didRestore() { | 358 void SkRecorder::didRestore() { |
| 355 APPEND(Restore, this->devBounds(), this->getTotalMatrix()); | 359 APPEND(Restore, this->devBounds(), this->getTotalMatrix()); |
| 356 } | 360 } |
| 357 | 361 |
| 358 void SkRecorder::didConcat(const SkMatrix& matrix) { | 362 void SkRecorder::didConcat(const SkMatrix& matrix) { |
| 359 APPEND(Concat, matrix); | 363 APPEND(Concat, matrix); |
| 360 } | 364 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 388 } | 392 } |
| 389 | 393 |
| 390 void SkRecorder::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { | 394 void SkRecorder::onClipRegion(const SkRegion& deviceRgn, SkRegion::Op op) { |
| 391 INHERITED(onClipRegion, deviceRgn, op); | 395 INHERITED(onClipRegion, deviceRgn, op); |
| 392 APPEND(ClipRegion, this->devBounds(), deviceRgn, op); | 396 APPEND(ClipRegion, this->devBounds(), deviceRgn, op); |
| 393 } | 397 } |
| 394 | 398 |
| 395 sk_sp<SkSurface> SkRecorder::onNewSurface(const SkImageInfo&, const SkSurfacePro
ps&) { | 399 sk_sp<SkSurface> SkRecorder::onNewSurface(const SkImageInfo&, const SkSurfacePro
ps&) { |
| 396 return nullptr; | 400 return nullptr; |
| 397 } | 401 } |
| OLD | NEW |