| 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 #include "SkBitmapDevice.h" | 8 #include "SkBitmapDevice.h" |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkCanvasPriv.h" | 10 #include "SkCanvasPriv.h" |
| (...skipping 2239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2250 iter.fDevice->drawImage(iter, image, x, y, pnt); | 2250 iter.fDevice->drawImage(iter, image, x, y, pnt); |
| 2251 } | 2251 } |
| 2252 } | 2252 } |
| 2253 | 2253 |
| 2254 LOOPER_END | 2254 LOOPER_END |
| 2255 } | 2255 } |
| 2256 | 2256 |
| 2257 void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
Rect& dst, | 2257 void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
Rect& dst, |
| 2258 const SkPaint* paint, SrcRectConstraint constrain
t) { | 2258 const SkPaint* paint, SrcRectConstraint constrain
t) { |
| 2259 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); | 2259 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); |
| 2260 SkRect storage; | |
| 2261 const SkRect* bounds = &dst; | |
| 2262 if (nullptr == paint || paint->canComputeFastBounds()) { | 2260 if (nullptr == paint || paint->canComputeFastBounds()) { |
| 2263 storage = dst; | 2261 SkRect storage = dst; |
| 2264 if (paint) { | 2262 if (paint) { |
| 2265 paint->computeFastBounds(dst, &storage); | 2263 paint->computeFastBounds(dst, &storage); |
| 2266 } | 2264 } |
| 2267 if (this->quickReject(storage)) { | 2265 if (this->quickReject(storage)) { |
| 2268 return; | 2266 return; |
| 2269 } | 2267 } |
| 2270 } | 2268 } |
| 2271 SkLazyPaint lazy; | 2269 SkLazyPaint lazy; |
| 2272 if (nullptr == paint) { | 2270 if (nullptr == paint) { |
| 2273 paint = lazy.init(); | 2271 paint = lazy.init(); |
| 2274 } | 2272 } |
| 2275 | 2273 |
| 2276 LOOPER_BEGIN_CHECK_COMPLETE_OVERWRITE(*paint, SkDrawFilter::kBitmap_Type, bo
unds, | 2274 LOOPER_BEGIN_CHECK_COMPLETE_OVERWRITE(*paint, SkDrawFilter::kBitmap_Type, &d
st, |
| 2277 image->isOpaque()) | 2275 image->isOpaque()) |
| 2278 | 2276 |
| 2279 while (iter.next()) { | 2277 while (iter.next()) { |
| 2280 iter.fDevice->drawImageRect(iter, image, src, dst, looper.paint(), const
raint); | 2278 iter.fDevice->drawImageRect(iter, image, src, dst, looper.paint(), const
raint); |
| 2281 } | 2279 } |
| 2282 | 2280 |
| 2283 LOOPER_END | 2281 LOOPER_END |
| 2284 } | 2282 } |
| 2285 | 2283 |
| 2286 void SkCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, cons
t SkPaint* paint) { | 2284 void SkCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, cons
t SkPaint* paint) { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2331 } | 2329 } |
| 2332 | 2330 |
| 2333 // this one is non-virtual, so it can be called safely by other canvas apis | 2331 // this one is non-virtual, so it can be called safely by other canvas apis |
| 2334 void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, | 2332 void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, |
| 2335 const SkRect& dst, const SkPaint* paint, | 2333 const SkRect& dst, const SkPaint* paint, |
| 2336 SrcRectConstraint constraint) { | 2334 SrcRectConstraint constraint) { |
| 2337 if (bitmap.drawsNothing() || dst.isEmpty()) { | 2335 if (bitmap.drawsNothing() || dst.isEmpty()) { |
| 2338 return; | 2336 return; |
| 2339 } | 2337 } |
| 2340 | 2338 |
| 2341 SkRect storage; | |
| 2342 const SkRect* bounds = &dst; | |
| 2343 if (nullptr == paint || paint->canComputeFastBounds()) { | 2339 if (nullptr == paint || paint->canComputeFastBounds()) { |
| 2340 SkRect storage; |
| 2344 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { | 2341 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { |
| 2345 return; | 2342 return; |
| 2346 } | 2343 } |
| 2347 } | 2344 } |
| 2348 | 2345 |
| 2349 SkLazyPaint lazy; | 2346 SkLazyPaint lazy; |
| 2350 if (nullptr == paint) { | 2347 if (nullptr == paint) { |
| 2351 paint = lazy.init(); | 2348 paint = lazy.init(); |
| 2352 } | 2349 } |
| 2353 | 2350 |
| 2354 LOOPER_BEGIN_CHECK_COMPLETE_OVERWRITE(*paint, SkDrawFilter::kBitmap_Type, bo
unds, | 2351 LOOPER_BEGIN_CHECK_COMPLETE_OVERWRITE(*paint, SkDrawFilter::kBitmap_Type, &d
st, |
| 2355 bitmap.isOpaque()) | 2352 bitmap.isOpaque()) |
| 2356 | 2353 |
| 2357 while (iter.next()) { | 2354 while (iter.next()) { |
| 2358 iter.fDevice->drawBitmapRect(iter, bitmap, src, dst, looper.paint(), con
straint); | 2355 iter.fDevice->drawBitmapRect(iter, bitmap, src, dst, looper.paint(), con
straint); |
| 2359 } | 2356 } |
| 2360 | 2357 |
| 2361 LOOPER_END | 2358 LOOPER_END |
| 2362 } | 2359 } |
| 2363 | 2360 |
| 2364 void SkCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const
SkRect& dst, | 2361 void SkCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const
SkRect& dst, |
| 2365 const SkPaint* paint, SrcRectConstraint constrai
nt) { | 2362 const SkPaint* paint, SrcRectConstraint constrai
nt) { |
| 2366 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawBitmapRectToRect()")
; | 2363 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawBitmapRectToRect()")
; |
| 2367 SkDEBUGCODE(bitmap.validate();) | 2364 SkDEBUGCODE(bitmap.validate();) |
| 2368 this->internalDrawBitmapRect(bitmap, src, dst, paint, constraint); | 2365 this->internalDrawBitmapRect(bitmap, src, dst, paint, constraint); |
| 2369 } | 2366 } |
| 2370 | 2367 |
| 2371 void SkCanvas::onDrawImageNine(const SkImage* image, const SkIRect& center, cons
t SkRect& dst, | 2368 void SkCanvas::onDrawImageNine(const SkImage* image, const SkIRect& center, cons
t SkRect& dst, |
| 2372 const SkPaint* paint) { | 2369 const SkPaint* paint) { |
| 2373 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageNine()"); | 2370 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageNine()"); |
| 2374 | 2371 |
| 2375 SkRect storage; | |
| 2376 const SkRect* bounds = &dst; | |
| 2377 if (nullptr == paint || paint->canComputeFastBounds()) { | 2372 if (nullptr == paint || paint->canComputeFastBounds()) { |
| 2373 SkRect storage; |
| 2378 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { | 2374 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { |
| 2379 return; | 2375 return; |
| 2380 } | 2376 } |
| 2381 } | 2377 } |
| 2382 | 2378 |
| 2383 SkLazyPaint lazy; | 2379 SkLazyPaint lazy; |
| 2384 if (nullptr == paint) { | 2380 if (nullptr == paint) { |
| 2385 paint = lazy.init(); | 2381 paint = lazy.init(); |
| 2386 } | 2382 } |
| 2387 | 2383 |
| 2388 LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, bounds) | 2384 LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, &dst) |
| 2389 | 2385 |
| 2390 while (iter.next()) { | 2386 while (iter.next()) { |
| 2391 iter.fDevice->drawImageNine(iter, image, center, dst, looper.paint()); | 2387 iter.fDevice->drawImageNine(iter, image, center, dst, looper.paint()); |
| 2392 } | 2388 } |
| 2393 | 2389 |
| 2394 LOOPER_END | 2390 LOOPER_END |
| 2395 } | 2391 } |
| 2396 | 2392 |
| 2397 void SkCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, c
onst SkRect& dst, | 2393 void SkCanvas::onDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, c
onst SkRect& dst, |
| 2398 const SkPaint* paint) { | 2394 const SkPaint* paint) { |
| 2399 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawBitmapNine()"); | 2395 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawBitmapNine()"); |
| 2400 SkDEBUGCODE(bitmap.validate();) | 2396 SkDEBUGCODE(bitmap.validate();) |
| 2401 | 2397 |
| 2402 SkRect storage; | |
| 2403 const SkRect* bounds = &dst; | |
| 2404 if (nullptr == paint || paint->canComputeFastBounds()) { | 2398 if (nullptr == paint || paint->canComputeFastBounds()) { |
| 2399 SkRect storage; |
| 2405 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { | 2400 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { |
| 2406 return; | 2401 return; |
| 2407 } | 2402 } |
| 2408 } | 2403 } |
| 2409 | 2404 |
| 2410 SkLazyPaint lazy; | 2405 SkLazyPaint lazy; |
| 2411 if (nullptr == paint) { | 2406 if (nullptr == paint) { |
| 2412 paint = lazy.init(); | 2407 paint = lazy.init(); |
| 2413 } | 2408 } |
| 2414 | 2409 |
| 2415 LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, bounds) | 2410 LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, &dst) |
| 2416 | 2411 |
| 2417 while (iter.next()) { | 2412 while (iter.next()) { |
| 2418 iter.fDevice->drawBitmapNine(iter, bitmap, center, dst, looper.paint()); | 2413 iter.fDevice->drawBitmapNine(iter, bitmap, center, dst, looper.paint()); |
| 2419 } | 2414 } |
| 2420 | 2415 |
| 2421 LOOPER_END | 2416 LOOPER_END |
| 2422 } | 2417 } |
| 2423 | 2418 |
| 2424 class SkDeviceFilteredPaint { | 2419 class SkDeviceFilteredPaint { |
| 2425 public: | 2420 public: |
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3003 } | 2998 } |
| 3004 | 2999 |
| 3005 if (matrix) { | 3000 if (matrix) { |
| 3006 canvas->concat(*matrix); | 3001 canvas->concat(*matrix); |
| 3007 } | 3002 } |
| 3008 } | 3003 } |
| 3009 | 3004 |
| 3010 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 3005 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
| 3011 fCanvas->restoreToCount(fSaveCount); | 3006 fCanvas->restoreToCount(fSaveCount); |
| 3012 } | 3007 } |
| OLD | NEW |