OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
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 | 8 |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" |
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 return device; | 561 return device; |
562 } | 562 } |
563 | 563 |
564 bool SkCanvas::readPixels(SkBitmap* bitmap, int x, int y) { | 564 bool SkCanvas::readPixels(SkBitmap* bitmap, int x, int y) { |
565 if (kUnknown_SkColorType == bitmap->colorType() || bitmap->getTexture()) { | 565 if (kUnknown_SkColorType == bitmap->colorType() || bitmap->getTexture()) { |
566 return false; | 566 return false; |
567 } | 567 } |
568 | 568 |
569 bool weAllocated = false; | 569 bool weAllocated = false; |
570 if (NULL == bitmap->pixelRef()) { | 570 if (NULL == bitmap->pixelRef()) { |
571 if (!bitmap->allocPixels()) { | 571 if (!bitmap->tryAllocPixels()) { |
572 return false; | 572 return false; |
573 } | 573 } |
574 weAllocated = true; | 574 weAllocated = true; |
575 } | 575 } |
576 | 576 |
577 SkBitmap bm(*bitmap); | 577 SkBitmap bm(*bitmap); |
578 bm.lockPixels(); | 578 bm.lockPixels(); |
579 if (bm.getPixels() && this->readPixels(bm.info(), bm.getPixels(), bm.rowByte
s(), x, y)) { | 579 if (bm.getPixels() && this->readPixels(bm.info(), bm.getPixels(), bm.rowByte
s(), x, y)) { |
580 return true; | 580 return true; |
581 } | 581 } |
582 | 582 |
583 if (weAllocated) { | 583 if (weAllocated) { |
584 bitmap->setPixelRef(NULL); | 584 bitmap->setPixelRef(NULL); |
585 } | 585 } |
586 return false; | 586 return false; |
587 } | 587 } |
588 | 588 |
589 bool SkCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) { | 589 bool SkCanvas::readPixels(const SkIRect& srcRect, SkBitmap* bitmap) { |
590 SkIRect r = srcRect; | 590 SkIRect r = srcRect; |
591 const SkISize size = this->getBaseLayerSize(); | 591 const SkISize size = this->getBaseLayerSize(); |
592 if (!r.intersect(0, 0, size.width(), size.height())) { | 592 if (!r.intersect(0, 0, size.width(), size.height())) { |
593 bitmap->reset(); | 593 bitmap->reset(); |
594 return false; | 594 return false; |
595 } | 595 } |
596 | 596 |
597 if (!bitmap->allocN32Pixels(r.width(), r.height())) { | 597 if (!bitmap->tryAllocN32Pixels(r.width(), r.height())) { |
598 // bitmap will already be reset. | 598 // bitmap will already be reset. |
599 return false; | 599 return false; |
600 } | 600 } |
601 if (!this->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes(
), r.x(), r.y())) { | 601 if (!this->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes(
), r.x(), r.y())) { |
602 bitmap->reset(); | 602 bitmap->reset(); |
603 return false; | 603 return false; |
604 } | 604 } |
605 return true; | 605 return true; |
606 } | 606 } |
607 | 607 |
(...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
999 | 999 |
1000 void* SkCanvas::onAccessTopLayerPixels(SkImageInfo* info, size_t* rowBytes) { | 1000 void* SkCanvas::onAccessTopLayerPixels(SkImageInfo* info, size_t* rowBytes) { |
1001 SkBaseDevice* dev = this->getTopDevice(); | 1001 SkBaseDevice* dev = this->getTopDevice(); |
1002 return dev ? dev->accessPixels(info, rowBytes) : NULL; | 1002 return dev ? dev->accessPixels(info, rowBytes) : NULL; |
1003 } | 1003 } |
1004 | 1004 |
1005 SkAutoROCanvasPixels::SkAutoROCanvasPixels(SkCanvas* canvas) { | 1005 SkAutoROCanvasPixels::SkAutoROCanvasPixels(SkCanvas* canvas) { |
1006 fAddr = canvas->peekPixels(&fInfo, &fRowBytes); | 1006 fAddr = canvas->peekPixels(&fInfo, &fRowBytes); |
1007 if (NULL == fAddr) { | 1007 if (NULL == fAddr) { |
1008 fInfo = canvas->imageInfo(); | 1008 fInfo = canvas->imageInfo(); |
1009 if (kUnknown_SkColorType == fInfo.colorType() || !fBitmap.allocPixels(fI
nfo)) { | 1009 if (kUnknown_SkColorType == fInfo.colorType() || !fBitmap.tryAllocPixels
(fInfo)) { |
1010 return; // failure, fAddr is NULL | 1010 return; // failure, fAddr is NULL |
1011 } | 1011 } |
1012 if (!canvas->readPixels(&fBitmap, 0, 0)) { | 1012 if (!canvas->readPixels(&fBitmap, 0, 0)) { |
1013 return; // failure, fAddr is NULL | 1013 return; // failure, fAddr is NULL |
1014 } | 1014 } |
1015 fAddr = fBitmap.getPixels(); | 1015 fAddr = fBitmap.getPixels(); |
1016 fRowBytes = fBitmap.rowBytes(); | 1016 fRowBytes = fBitmap.rowBytes(); |
1017 } | 1017 } |
1018 SkASSERT(fAddr); // success | 1018 SkASSERT(fAddr); // success |
1019 } | 1019 } |
(...skipping 1508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2528 | 2528 |
2529 return true; | 2529 return true; |
2530 } | 2530 } |
2531 | 2531 |
2532 SkCanvas* SkCanvas::NewRaster(const SkImageInfo& info) { | 2532 SkCanvas* SkCanvas::NewRaster(const SkImageInfo& info) { |
2533 if (!supported_for_raster_canvas(info)) { | 2533 if (!supported_for_raster_canvas(info)) { |
2534 return NULL; | 2534 return NULL; |
2535 } | 2535 } |
2536 | 2536 |
2537 SkBitmap bitmap; | 2537 SkBitmap bitmap; |
2538 if (!bitmap.allocPixels(info)) { | 2538 if (!bitmap.tryAllocPixels(info)) { |
2539 return NULL; | 2539 return NULL; |
2540 } | 2540 } |
2541 | 2541 |
2542 // should this functionality be moved into allocPixels()? | 2542 // should this functionality be moved into allocPixels()? |
2543 if (!bitmap.info().isOpaque()) { | 2543 if (!bitmap.info().isOpaque()) { |
2544 bitmap.eraseColor(0); | 2544 bitmap.eraseColor(0); |
2545 } | 2545 } |
2546 return SkNEW_ARGS(SkCanvas, (bitmap)); | 2546 return SkNEW_ARGS(SkCanvas, (bitmap)); |
2547 } | 2547 } |
2548 | 2548 |
(...skipping 27 matching lines...) Expand all Loading... |
2576 } | 2576 } |
2577 | 2577 |
2578 if (NULL != matrix) { | 2578 if (NULL != matrix) { |
2579 canvas->concat(*matrix); | 2579 canvas->concat(*matrix); |
2580 } | 2580 } |
2581 } | 2581 } |
2582 | 2582 |
2583 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 2583 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
2584 fCanvas->restoreToCount(fSaveCount); | 2584 fCanvas->restoreToCount(fSaveCount); |
2585 } | 2585 } |
OLD | NEW |