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" |
11 #include "SkClipStack.h" | 11 #include "SkClipStack.h" |
12 #include "SkColorFilter.h" | 12 #include "SkColorFilter.h" |
13 #include "SkDraw.h" | 13 #include "SkDraw.h" |
14 #include "SkDrawable.h" | 14 #include "SkDrawable.h" |
15 #include "SkDrawFilter.h" | 15 #include "SkDrawFilter.h" |
16 #include "SkDrawLooper.h" | 16 #include "SkDrawLooper.h" |
17 #include "SkErrorInternals.h" | 17 #include "SkErrorInternals.h" |
18 #include "SkImage.h" | 18 #include "SkImage.h" |
19 #include "SkImage_Base.h" | 19 #include "SkImage_Base.h" |
20 #include "SkImageFilter.h" | 20 #include "SkImageFilter.h" |
21 #include "SkImageFilterCache.h" | 21 #include "SkImageFilterCache.h" |
| 22 #include "SkLatticeIter.h" |
22 #include "SkMatrixUtils.h" | 23 #include "SkMatrixUtils.h" |
23 #include "SkMetaData.h" | 24 #include "SkMetaData.h" |
24 #include "SkNinePatchIter.h" | |
25 #include "SkPaintPriv.h" | 25 #include "SkPaintPriv.h" |
26 #include "SkPatchUtils.h" | 26 #include "SkPatchUtils.h" |
27 #include "SkPicture.h" | 27 #include "SkPicture.h" |
28 #include "SkRasterClip.h" | 28 #include "SkRasterClip.h" |
29 #include "SkReadPixelsRec.h" | 29 #include "SkReadPixelsRec.h" |
30 #include "SkRRect.h" | 30 #include "SkRRect.h" |
31 #include "SkSmallAllocator.h" | 31 #include "SkSmallAllocator.h" |
32 #include "SkSpecialImage.h" | 32 #include "SkSpecialImage.h" |
33 #include "SkSurface_Base.h" | 33 #include "SkSurface_Base.h" |
34 #include "SkTextBlob.h" | 34 #include "SkTextBlob.h" |
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1978 this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()),
dst, paint, | 1978 this->drawImageRect(image, SkRect::MakeIWH(image->width(), image->height()),
dst, paint, |
1979 constraint); | 1979 constraint); |
1980 } | 1980 } |
1981 | 1981 |
1982 void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const
SkRect& dst, | 1982 void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const
SkRect& dst, |
1983 const SkPaint* paint) { | 1983 const SkPaint* paint) { |
1984 RETURN_ON_NULL(image); | 1984 RETURN_ON_NULL(image); |
1985 if (dst.isEmpty()) { | 1985 if (dst.isEmpty()) { |
1986 return; | 1986 return; |
1987 } | 1987 } |
1988 if (!SkNinePatchIter::Valid(image->width(), image->height(), center)) { | 1988 if (!SkLatticeIter::Valid(image->width(), image->height(), center)) { |
1989 this->drawImageRect(image, dst, paint); | 1989 this->drawImageRect(image, dst, paint); |
1990 } | 1990 } |
1991 this->onDrawImageNine(image, center, dst, paint); | 1991 this->onDrawImageNine(image, center, dst, paint); |
1992 } | 1992 } |
1993 | 1993 |
1994 void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar dx, SkScalar dy, cons
t SkPaint* paint) { | 1994 void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar dx, SkScalar dy, cons
t SkPaint* paint) { |
1995 if (bitmap.drawsNothing()) { | 1995 if (bitmap.drawsNothing()) { |
1996 return; | 1996 return; |
1997 } | 1997 } |
1998 this->onDrawBitmap(bitmap, dx, dy, paint); | 1998 this->onDrawBitmap(bitmap, dx, dy, paint); |
(...skipping 16 matching lines...) Expand all Loading... |
2015 SrcRectConstraint constraint) { | 2015 SrcRectConstraint constraint) { |
2016 this->drawBitmapRect(bitmap, SkRect::MakeIWH(bitmap.width(), bitmap.height()
), dst, paint, | 2016 this->drawBitmapRect(bitmap, SkRect::MakeIWH(bitmap.width(), bitmap.height()
), dst, paint, |
2017 constraint); | 2017 constraint); |
2018 } | 2018 } |
2019 | 2019 |
2020 void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, con
st SkRect& dst, | 2020 void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, con
st SkRect& dst, |
2021 const SkPaint* paint) { | 2021 const SkPaint* paint) { |
2022 if (bitmap.drawsNothing() || dst.isEmpty()) { | 2022 if (bitmap.drawsNothing() || dst.isEmpty()) { |
2023 return; | 2023 return; |
2024 } | 2024 } |
2025 if (!SkNinePatchIter::Valid(bitmap.width(), bitmap.height(), center)) { | 2025 if (!SkLatticeIter::Valid(bitmap.width(), bitmap.height(), center)) { |
2026 this->drawBitmapRect(bitmap, dst, paint); | 2026 this->drawBitmapRect(bitmap, dst, paint); |
2027 } | 2027 } |
2028 this->onDrawBitmapNine(bitmap, center, dst, paint); | 2028 this->onDrawBitmapNine(bitmap, center, dst, paint); |
2029 } | 2029 } |
2030 | 2030 |
| 2031 void SkCanvas::drawBitmapLattice(const SkBitmap& bitmap, const Lattice& lattice,
const SkRect& dst, |
| 2032 const SkPaint* paint) { |
| 2033 sk_sp<SkImage> image = SkImage::MakeFromBitmap(bitmap); |
| 2034 this->drawImageLattice(image.get(), lattice, dst, paint); |
| 2035 } |
| 2036 |
| 2037 void SkCanvas::drawImageLattice(const SkImage* image, const Lattice& lattice, co
nst SkRect& dst, |
| 2038 const SkPaint* paint) { |
| 2039 RETURN_ON_NULL(image); |
| 2040 if (dst.isEmpty()) { |
| 2041 return; |
| 2042 } |
| 2043 if (!SkLatticeIter::Valid(image->width(), image->height(), lattice)) { |
| 2044 this->drawImageRect(image, dst, paint); |
| 2045 } |
| 2046 this->onDrawImageLattice(image, lattice, dst, paint); |
| 2047 } |
| 2048 |
2031 void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const Sk
Rect tex[], | 2049 void SkCanvas::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const Sk
Rect tex[], |
2032 const SkColor colors[], int count, SkXfermode::Mode mod
e, | 2050 const SkColor colors[], int count, SkXfermode::Mode mod
e, |
2033 const SkRect* cull, const SkPaint* paint) { | 2051 const SkRect* cull, const SkPaint* paint) { |
2034 RETURN_ON_NULL(atlas); | 2052 RETURN_ON_NULL(atlas); |
2035 if (count <= 0) { | 2053 if (count <= 0) { |
2036 return; | 2054 return; |
2037 } | 2055 } |
2038 SkASSERT(atlas); | 2056 SkASSERT(atlas); |
2039 SkASSERT(xform); | 2057 SkASSERT(xform); |
2040 SkASSERT(tex); | 2058 SkASSERT(tex); |
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2325 SkScalarRoundToInt(pt.fX), | 2343 SkScalarRoundToInt(pt.fX), |
2326 SkScalarRoundToInt(pt.fY), pnt); | 2344 SkScalarRoundToInt(pt.fY), pnt); |
2327 } else { | 2345 } else { |
2328 iter.fDevice->drawImage(iter, image, x, y, pnt); | 2346 iter.fDevice->drawImage(iter, image, x, y, pnt); |
2329 } | 2347 } |
2330 } | 2348 } |
2331 | 2349 |
2332 LOOPER_END | 2350 LOOPER_END |
2333 } | 2351 } |
2334 | 2352 |
| 2353 void SkCanvas::onDrawImageLattice(const SkImage* image, const Lattice& lattice,
const SkRect& dst, |
| 2354 const SkPaint* paint) { |
| 2355 if (nullptr == paint || paint->canComputeFastBounds()) { |
| 2356 SkRect storage; |
| 2357 if (this->quickReject(paint ? paint->computeFastBounds(dst, &storage) :
dst)) { |
| 2358 return; |
| 2359 } |
| 2360 } |
| 2361 |
| 2362 SkLazyPaint lazy; |
| 2363 if (nullptr == paint) { |
| 2364 paint = lazy.init(); |
| 2365 } |
| 2366 |
| 2367 LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, &dst) |
| 2368 |
| 2369 while (iter.next()) { |
| 2370 iter.fDevice->drawImageLattice(iter, image, lattice, dst, looper.paint()
); |
| 2371 } |
| 2372 |
| 2373 LOOPER_END |
| 2374 } |
| 2375 |
2335 void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
Rect& dst, | 2376 void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk
Rect& dst, |
2336 const SkPaint* paint, SrcRectConstraint constrain
t) { | 2377 const SkPaint* paint, SrcRectConstraint constrain
t) { |
2337 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); | 2378 TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); |
2338 if (nullptr == paint || paint->canComputeFastBounds()) { | 2379 if (nullptr == paint || paint->canComputeFastBounds()) { |
2339 SkRect storage = dst; | 2380 SkRect storage = dst; |
2340 if (paint) { | 2381 if (paint) { |
2341 paint->computeFastBounds(dst, &storage); | 2382 paint->computeFastBounds(dst, &storage); |
2342 } | 2383 } |
2343 if (this->quickReject(storage)) { | 2384 if (this->quickReject(storage)) { |
2344 return; | 2385 return; |
(...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3123 | 3164 |
3124 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { | 3165 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { |
3125 fCanvas->restoreToCount(fSaveCount); | 3166 fCanvas->restoreToCount(fSaveCount); |
3126 } | 3167 } |
3127 | 3168 |
3128 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API | 3169 #ifdef SK_SUPPORT_LEGACY_NEW_SURFACE_API |
3129 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
rops) { | 3170 SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
rops) { |
3130 return this->makeSurface(info, props).release(); | 3171 return this->makeSurface(info, props).release(); |
3131 } | 3172 } |
3132 #endif | 3173 #endif |
OLD | NEW |