OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 #include "SkDevice.h" | 8 #include "SkDevice.h" |
9 #include "SkDeviceProperties.h" | 9 #include "SkDeviceProperties.h" |
10 #include "SkDraw.h" | 10 #include "SkDraw.h" |
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 } | 364 } |
365 | 365 |
366 void SkDevice::drawPath(const SkDraw& draw, const SkPath& path, | 366 void SkDevice::drawPath(const SkDraw& draw, const SkPath& path, |
367 const SkPaint& paint, const SkMatrix* prePathMatrix, | 367 const SkPaint& paint, const SkMatrix* prePathMatrix, |
368 bool pathIsMutable) { | 368 bool pathIsMutable) { |
369 CHECK_FOR_NODRAW_ANNOTATION(paint); | 369 CHECK_FOR_NODRAW_ANNOTATION(paint); |
370 draw.drawPath(path, paint, prePathMatrix, pathIsMutable); | 370 draw.drawPath(path, paint, prePathMatrix, pathIsMutable); |
371 } | 371 } |
372 | 372 |
373 void SkDevice::drawBitmap(const SkDraw& draw, const SkBitmap& bitmap, | 373 void SkDevice::drawBitmap(const SkDraw& draw, const SkBitmap& bitmap, |
374 const SkIRect* srcRect, | |
375 const SkMatrix& matrix, const SkPaint& paint) { | 374 const SkMatrix& matrix, const SkPaint& paint) { |
376 SkBitmap tmp; // storage if we need a subset of bitmap | 375 draw.drawBitmap(bitmap, matrix, paint); |
377 const SkBitmap* bitmapPtr = &bitmap; | |
378 | |
379 if (srcRect) { | |
380 if (!bitmap.extractSubset(&tmp, *srcRect)) { | |
381 return; // extraction failed | |
382 } | |
383 bitmapPtr = &tmp; | |
384 } | |
385 draw.drawBitmap(*bitmapPtr, matrix, paint); | |
386 } | 376 } |
387 | 377 |
388 void SkDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, | 378 void SkDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, |
389 const SkRect* src, const SkRect& dst, | 379 const SkRect* src, const SkRect& dst, |
390 const SkPaint& paint) { | 380 const SkPaint& paint) { |
391 SkMatrix matrix; | 381 SkMatrix matrix; |
392 SkRect bitmapBounds, tmpSrc, tmpDst; | 382 SkRect bitmapBounds, tmpSrc, tmpDst; |
393 SkBitmap tmpBitmap; | 383 SkBitmap tmpBitmap; |
394 | 384 |
395 bitmapBounds.isetWH(bitmap.width(), bitmap.height()); | 385 bitmapBounds.isetWH(bitmap.width(), bitmap.height()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 extractedBitmapBounds.isetWH(bitmapPtr->width(), bitmapPtr->height()); | 432 extractedBitmapBounds.isetWH(bitmapPtr->width(), bitmapPtr->height()); |
443 if (extractedBitmapBounds == tmpSrc) { | 433 if (extractedBitmapBounds == tmpSrc) { |
444 // no fractional part in src, we can just call drawBitmap | 434 // no fractional part in src, we can just call drawBitmap |
445 goto USE_DRAWBITMAP; | 435 goto USE_DRAWBITMAP; |
446 } | 436 } |
447 } else { | 437 } else { |
448 USE_DRAWBITMAP: | 438 USE_DRAWBITMAP: |
449 // We can go faster by just calling drawBitmap, which will concat the | 439 // We can go faster by just calling drawBitmap, which will concat the |
450 // matrix with the CTM, and try to call drawSprite if it can. If not, | 440 // matrix with the CTM, and try to call drawSprite if it can. If not, |
451 // it will make a shader and call drawRect, as we do below. | 441 // it will make a shader and call drawRect, as we do below. |
452 this->drawBitmap(draw, *bitmapPtr, NULL, matrix, paint); | 442 this->drawBitmap(draw, *bitmapPtr, matrix, paint); |
453 return; | 443 return; |
454 } | 444 } |
455 | 445 |
456 // construct a shader, so we can call drawRect with the dst | 446 // construct a shader, so we can call drawRect with the dst |
457 SkShader* s = SkShader::CreateBitmapShader(*bitmapPtr, | 447 SkShader* s = SkShader::CreateBitmapShader(*bitmapPtr, |
458 SkShader::kClamp_TileMode, | 448 SkShader::kClamp_TileMode, |
459 SkShader::kClamp_TileMode); | 449 SkShader::kClamp_TileMode); |
460 if (NULL == s) { | 450 if (NULL == s) { |
461 return; | 451 return; |
462 } | 452 } |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 paint.getStyle() != SkPaint::kFill_Style || | 523 paint.getStyle() != SkPaint::kFill_Style || |
534 !SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode)) { | 524 !SkXfermode::IsMode(paint.getXfermode(), SkXfermode::kSrcOver_Mode)) { |
535 // turn off lcd | 525 // turn off lcd |
536 flags->fFlags = paint.getFlags() & ~SkPaint::kLCDRenderText_Flag; | 526 flags->fFlags = paint.getFlags() & ~SkPaint::kLCDRenderText_Flag; |
537 flags->fHinting = paint.getHinting(); | 527 flags->fHinting = paint.getHinting(); |
538 return true; | 528 return true; |
539 } | 529 } |
540 // we're cool with the paint as is | 530 // we're cool with the paint as is |
541 return false; | 531 return false; |
542 } | 532 } |
OLD | NEW |