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

Side by Side Diff: include/core/SkCanvas.h

Issue 1236023004: have canvas send discard instead of retain if the draw would overwrite everything (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 5 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 | « no previous file | src/core/SkCanvas.cpp » ('j') | src/core/SkCanvas.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 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 #ifndef SkCanvas_DEFINED 8 #ifndef SkCanvas_DEFINED
9 #define SkCanvas_DEFINED 9 #define SkCanvas_DEFINED
10 10
(...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1348 virtual SkCanvas* canvasForDrawIter(); 1348 virtual SkCanvas* canvasForDrawIter();
1349 1349
1350 // Clip rectangle bounds. Called internally by saveLayer. 1350 // Clip rectangle bounds. Called internally by saveLayer.
1351 // returns false if the entire rectangle is entirely clipped out 1351 // returns false if the entire rectangle is entirely clipped out
1352 // If non-NULL, The imageFilter parameter will be used to expand the clip 1352 // If non-NULL, The imageFilter parameter will be used to expand the clip
1353 // and offscreen bounds for any margin required by the filter DAG. 1353 // and offscreen bounds for any margin required by the filter DAG.
1354 bool clipRectBounds(const SkRect* bounds, SaveFlags flags, 1354 bool clipRectBounds(const SkRect* bounds, SaveFlags flags,
1355 SkIRect* intersection, 1355 SkIRect* intersection,
1356 const SkImageFilter* imageFilter = NULL); 1356 const SkImageFilter* imageFilter = NULL);
1357 1357
1358 private:
1359 enum ShaderOverrideOpacity {
1360 kNone_ShaderOverrideOpacity, //!< there is no overriding shader ( bitmap or image)
1361 kOpaque_ShaderOverrideOpacity, //!< the overriding shader is opaque
1362 kNotOpaque_ShaderOverrideOpacity, //!< the overriding shader may not b e opaque
1363 };
1364
1358 // notify our surface (if we have one) that we are about to draw, so it 1365 // notify our surface (if we have one) that we are about to draw, so it
1359 // can perform copy-on-write or invalidate any cached images 1366 // can perform copy-on-write or invalidate any cached images
robertphillips 2015/07/20 15:15:29 willOverwriteEntireSurface (no extra 's') ?
1360 void predrawNotify(); 1367 void predrawNotify(bool willOverwritesEntireSurface = false);
1368 void predrawNotify(const SkRect* rect, const SkPaint* paint, ShaderOverrideO pacity);
1369 void predrawNotify(const SkRect* rect, const SkPaint* paint, bool shaderOver rideIsOpaque) {
1370 this->predrawNotify(rect, paint, shaderOverrideIsOpaque ? kOpaque_Shader OverrideOpacity
1371 : kNotOpaque_Sha derOverrideOpacity);
1372 }
1361 1373
1362 private:
1363 class MCRec; 1374 class MCRec;
1364 1375
1365 SkAutoTUnref<SkClipStack> fClipStack; 1376 SkAutoTUnref<SkClipStack> fClipStack;
1366 SkDeque fMCStack; 1377 SkDeque fMCStack;
1367 // points to top of stack 1378 // points to top of stack
1368 MCRec* fMCRec; 1379 MCRec* fMCRec;
1369 // the first N recs that can fit here mean we won't call malloc 1380 // the first N recs that can fit here mean we won't call malloc
1370 enum { 1381 enum {
1371 kMCRecSize = 128, // most recent measurement 1382 kMCRecSize = 128, // most recent measurement
1372 kMCRecCount = 8, // common depth for save/restores 1383 kMCRecCount = 8, // common depth for save/restores
(...skipping 24 matching lines...) Expand all
1397 1408
1398 friend class SkDrawIter; // needs setupDrawForLayerDevice() 1409 friend class SkDrawIter; // needs setupDrawForLayerDevice()
1399 friend class AutoDrawLooper; 1410 friend class AutoDrawLooper;
1400 friend class SkLua; // needs top layer size and offset 1411 friend class SkLua; // needs top layer size and offset
1401 friend class SkDebugCanvas; // needs experimental fAllowSimplifyClip 1412 friend class SkDebugCanvas; // needs experimental fAllowSimplifyClip
1402 friend class SkDeferredDevice; // needs getTopDevice() 1413 friend class SkDeferredDevice; // needs getTopDevice()
1403 friend class SkSurface_Raster; // needs getDevice() 1414 friend class SkSurface_Raster; // needs getDevice()
1404 friend class SkRecorder; // InitFlags 1415 friend class SkRecorder; // InitFlags
1405 friend class SkNoSaveLayerCanvas; // InitFlags 1416 friend class SkNoSaveLayerCanvas; // InitFlags
1406 friend class SkPictureImageFilter; // SkCanvas(SkBaseDevice*, SkSurfaceProp s*, InitFlags) 1417 friend class SkPictureImageFilter; // SkCanvas(SkBaseDevice*, SkSurfaceProp s*, InitFlags)
1418 friend class SkPictureRecord; // predrawNotify (why does it need it? <reed >)
1407 1419
1408 enum InitFlags { 1420 enum InitFlags {
1409 kDefault_InitFlags = 0, 1421 kDefault_InitFlags = 0,
1410 kConservativeRasterClip_InitFlag = 1 << 0, 1422 kConservativeRasterClip_InitFlag = 1 << 0,
1411 }; 1423 };
1412 SkCanvas(const SkIRect& bounds, InitFlags); 1424 SkCanvas(const SkIRect& bounds, InitFlags);
1413 SkCanvas(SkBaseDevice* device, InitFlags); 1425 SkCanvas(SkBaseDevice* device, InitFlags);
1414 1426
1415 void resetForNextPicture(const SkIRect& bounds); 1427 void resetForNextPicture(const SkIRect& bounds);
1416 1428
(...skipping 29 matching lines...) Expand all
1446 void internalRestore(); 1458 void internalRestore();
1447 static void DrawRect(const SkDraw& draw, const SkPaint& paint, 1459 static void DrawRect(const SkDraw& draw, const SkPaint& paint,
1448 const SkRect& r, SkScalar textSize); 1460 const SkRect& r, SkScalar textSize);
1449 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint, 1461 static void DrawTextDecorations(const SkDraw& draw, const SkPaint& paint,
1450 const char text[], size_t byteLength, 1462 const char text[], size_t byteLength,
1451 SkScalar x, SkScalar y); 1463 SkScalar x, SkScalar y);
1452 1464
1453 // only for canvasutils 1465 // only for canvasutils
1454 const SkRegion& internal_private_getTotalClip() const; 1466 const SkRegion& internal_private_getTotalClip() const;
1455 1467
1468 /*
1469 * Returns true if drawing the specified rect (or all if it is null) with t he specified
1470 * paint (or default if null) would overwrite the entire root device of the canvas
1471 * (i.e. the canvas' surface if it had one).
1472 */
1473 bool wouldOverwriteEntireSurface(const SkRect*, const SkPaint*, ShaderOverri deOpacity) const;
1474
1475
1456 /* These maintain a cache of the clip bounds in local coordinates, 1476 /* These maintain a cache of the clip bounds in local coordinates,
1457 (converted to 2s-compliment if floats are slow). 1477 (converted to 2s-compliment if floats are slow).
1458 */ 1478 */
1459 mutable SkRect fCachedLocalClipBounds; 1479 mutable SkRect fCachedLocalClipBounds;
1460 mutable bool fCachedLocalClipBoundsDirty; 1480 mutable bool fCachedLocalClipBoundsDirty;
1461 bool fAllowSoftClip; 1481 bool fAllowSoftClip;
1462 bool fAllowSimplifyClip; 1482 bool fAllowSimplifyClip;
1463 bool fConservativeRasterClip; 1483 bool fConservativeRasterClip;
1464 1484
1465 const SkRect& getLocalClipBounds() const { 1485 const SkRect& getLocalClipBounds() const {
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 1605
1586 class SkCanvasClipVisitor { 1606 class SkCanvasClipVisitor {
1587 public: 1607 public:
1588 virtual ~SkCanvasClipVisitor(); 1608 virtual ~SkCanvasClipVisitor();
1589 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; 1609 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0;
1590 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; 1610 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0;
1591 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; 1611 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0;
1592 }; 1612 };
1593 1613
1594 #endif 1614 #endif
OLDNEW
« no previous file with comments | « no previous file | src/core/SkCanvas.cpp » ('j') | src/core/SkCanvas.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698