Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: src/core/SkCanvas.cpp

Issue 468193003: Start tracking the CTM while filling the BBH in SkRecordDraw. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/core/SkCanvas.h ('k') | src/core/SkRecordDraw.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 877 matching lines...) Expand 10 before | Expand all | Expand 10 after
888 tmpPaint.setAlpha(alpha); 888 tmpPaint.setAlpha(alpha);
889 return this->saveLayer(bounds, &tmpPaint, flags); 889 return this->saveLayer(bounds, &tmpPaint, flags);
890 } 890 }
891 } 891 }
892 892
893 void SkCanvas::restore() { 893 void SkCanvas::restore() {
894 // check for underflow 894 // check for underflow
895 if (fMCStack.count() > 1) { 895 if (fMCStack.count() > 1) {
896 this->willRestore(); 896 this->willRestore();
897 this->internalRestore(); 897 this->internalRestore();
898 this->didRestore();
898 } 899 }
899 } 900 }
900 901
901 void SkCanvas::internalRestore() { 902 void SkCanvas::internalRestore() {
902 SkASSERT(fMCStack.count() != 0); 903 SkASSERT(fMCStack.count() != 0);
903 904
904 fDeviceCMDirty = true; 905 fDeviceCMDirty = true;
905 fCachedLocalClipBoundsDirty = true; 906 fCachedLocalClipBoundsDirty = true;
906 907
907 fClipStack.restore(); 908 fClipStack.restore();
(...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after
2253 } 2254 }
2254 2255
2255 LOOPER_END 2256 LOOPER_END
2256 } 2257 }
2257 2258
2258 void SkCanvas::drawPatch(const SkPoint cubics[12], const SkColor colors[4], 2259 void SkCanvas::drawPatch(const SkPoint cubics[12], const SkColor colors[4],
2259 const SkPoint texCoords[4], SkXfermode* xmode, const Sk Paint& paint) { 2260 const SkPoint texCoords[4], SkXfermode* xmode, const Sk Paint& paint) {
2260 if (NULL == cubics) { 2261 if (NULL == cubics) {
2261 return; 2262 return;
2262 } 2263 }
2263 2264
2264 // Since a patch is always within the convex hull of the control points, we discard it when its 2265 // Since a patch is always within the convex hull of the control points, we discard it when its
2265 // bounding rectangle is completely outside the current clip. 2266 // bounding rectangle is completely outside the current clip.
2266 SkRect bounds; 2267 SkRect bounds;
2267 bounds.set(cubics, SkPatchUtils::kNumCtrlPts); 2268 bounds.set(cubics, SkPatchUtils::kNumCtrlPts);
2268 if (this->quickReject(bounds)) { 2269 if (this->quickReject(bounds)) {
2269 return; 2270 return;
2270 } 2271 }
2271 2272
2272 this->onDrawPatch(cubics, colors, texCoords, xmode, paint); 2273 this->onDrawPatch(cubics, colors, texCoords, xmode, paint);
2273 } 2274 }
2274 2275
2275 void SkCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4], 2276 void SkCanvas::onDrawPatch(const SkPoint cubics[12], const SkColor colors[4],
2276 const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) { 2277 const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint) {
2277 2278
2278 LOOPER_BEGIN(paint, SkDrawFilter::kPath_Type, NULL) 2279 LOOPER_BEGIN(paint, SkDrawFilter::kPath_Type, NULL)
2279 2280
2280 while (iter.next()) { 2281 while (iter.next()) {
2281 iter.fDevice->drawPatch(iter, cubics, colors, texCoords, xmode, paint); 2282 iter.fDevice->drawPatch(iter, cubics, colors, texCoords, xmode, paint);
2282 } 2283 }
2283 2284
2284 LOOPER_END 2285 LOOPER_END
2285 } 2286 }
2286 2287
2287 ////////////////////////////////////////////////////////////////////////////// 2288 //////////////////////////////////////////////////////////////////////////////
2288 // These methods are NOT virtual, and therefore must call back into virtual 2289 // These methods are NOT virtual, and therefore must call back into virtual
2289 // methods, rather than actually drawing themselves. 2290 // methods, rather than actually drawing themselves.
2290 ////////////////////////////////////////////////////////////////////////////// 2291 //////////////////////////////////////////////////////////////////////////////
2291 2292
2292 void SkCanvas::drawARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b, 2293 void SkCanvas::drawARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b,
2293 SkXfermode::Mode mode) { 2294 SkXfermode::Mode mode) {
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
2543 { 2544 {
2544 if (NULL != paint) { 2545 if (NULL != paint) {
2545 SkRect bounds = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heigh t)); 2546 SkRect bounds = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heigh t));
2546 if (matrix) { 2547 if (matrix) {
2547 matrix->mapRect(&bounds); 2548 matrix->mapRect(&bounds);
2548 } 2549 }
2549 canvas->saveLayer(&bounds, paint); 2550 canvas->saveLayer(&bounds, paint);
2550 } else if (NULL != matrix) { 2551 } else if (NULL != matrix) {
2551 canvas->save(); 2552 canvas->save();
2552 } 2553 }
2553 2554
2554 if (NULL != matrix) { 2555 if (NULL != matrix) {
2555 canvas->concat(*matrix); 2556 canvas->concat(*matrix);
2556 } 2557 }
2557 } 2558 }
2558 2559
2559 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() { 2560 SkAutoCanvasMatrixPaint::~SkAutoCanvasMatrixPaint() {
2560 fCanvas->restoreToCount(fSaveCount); 2561 fCanvas->restoreToCount(fSaveCount);
2561 } 2562 }
OLDNEW
« no previous file with comments | « include/core/SkCanvas.h ('k') | src/core/SkRecordDraw.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698