OLD | NEW |
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 1536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1547 fCanvas = NULL; | 1547 fCanvas = NULL; |
1548 } | 1548 } |
1549 } | 1549 } |
1550 | 1550 |
1551 private: | 1551 private: |
1552 SkCanvas* fCanvas; | 1552 SkCanvas* fCanvas; |
1553 int fSaveCount; | 1553 int fSaveCount; |
1554 }; | 1554 }; |
1555 #define SkAutoCanvasRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoCanvasRestore) | 1555 #define SkAutoCanvasRestore(...) SK_REQUIRE_LOCAL_VAR(SkAutoCanvasRestore) |
1556 | 1556 |
1557 /** | |
1558 * If the caller wants read-only access to the pixels in a canvas, it can just | |
1559 * call canvas->peekPixels(), since that is the fastest way to "peek" at the | |
1560 * pixels on a raster-backed canvas. | |
1561 * | |
1562 * If the canvas has pixels, but they are not readily available to the CPU | |
1563 * (e.g. gpu-backed), then peekPixels() will fail, but readPixels() will | |
1564 * succeed (though be slower, since it will return a copy of the pixels). | |
1565 * | |
1566 * SkAutoROCanvasPixels encapsulates these two techniques, trying first to call | |
1567 * peekPixels() (for performance), but if that fails, calling readPixels() and | |
1568 * storing the copy locally. | |
1569 * | |
1570 * The caller must respect the restrictions associated with peekPixels(), since | |
1571 * that may have been called: The returned information is invalidated if... | |
1572 * - any API is called on the canvas (or its parent surface if present) | |
1573 * - the canvas goes out of scope | |
1574 */ | |
1575 class SkAutoROCanvasPixels : SkNoncopyable { | |
1576 public: | |
1577 SkAutoROCanvasPixels(SkCanvas* canvas); | |
1578 | |
1579 // returns NULL on failure | |
1580 const void* addr() const { return fAddr; } | |
1581 | |
1582 // undefined if addr() == NULL | |
1583 size_t rowBytes() const { return fRowBytes; } | |
1584 | |
1585 // undefined if addr() == NULL | |
1586 const SkImageInfo& info() const { return fInfo; } | |
1587 | |
1588 // helper that, if returns true, installs the pixels into the bitmap. Note | |
1589 // that the bitmap may reference the address returned by peekPixels(), so | |
1590 // the caller must respect the restrictions associated with peekPixels(). | |
1591 bool asROBitmap(SkBitmap*) const; | |
1592 | |
1593 private: | |
1594 SkBitmap fBitmap; // used if peekPixels() fails | |
1595 const void* fAddr; // NULL on failure | |
1596 SkImageInfo fInfo; | |
1597 size_t fRowBytes; | |
1598 }; | |
1599 | |
1600 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS | 1557 #ifdef SK_SUPPORT_LEGACY_SAVEFLAGS |
1601 static inline SkCanvas::SaveFlags operator|(const SkCanvas::SaveFlags lhs, | 1558 static inline SkCanvas::SaveFlags operator|(const SkCanvas::SaveFlags lhs, |
1602 const SkCanvas::SaveFlags rhs) { | 1559 const SkCanvas::SaveFlags rhs) { |
1603 return static_cast<SkCanvas::SaveFlags>(static_cast<int>(lhs) | static_cast<
int>(rhs)); | 1560 return static_cast<SkCanvas::SaveFlags>(static_cast<int>(lhs) | static_cast<
int>(rhs)); |
1604 } | 1561 } |
1605 | 1562 |
1606 static inline SkCanvas::SaveFlags& operator|=(SkCanvas::SaveFlags& lhs, | 1563 static inline SkCanvas::SaveFlags& operator|=(SkCanvas::SaveFlags& lhs, |
1607 const SkCanvas::SaveFlags rhs) { | 1564 const SkCanvas::SaveFlags rhs) { |
1608 lhs = lhs | rhs; | 1565 lhs = lhs | rhs; |
1609 return lhs; | 1566 return lhs; |
1610 } | 1567 } |
1611 #endif | 1568 #endif |
1612 | 1569 |
1613 class SkCanvasClipVisitor { | 1570 class SkCanvasClipVisitor { |
1614 public: | 1571 public: |
1615 virtual ~SkCanvasClipVisitor(); | 1572 virtual ~SkCanvasClipVisitor(); |
1616 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; | 1573 virtual void clipRect(const SkRect&, SkRegion::Op, bool antialias) = 0; |
1617 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; | 1574 virtual void clipRRect(const SkRRect&, SkRegion::Op, bool antialias) = 0; |
1618 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; | 1575 virtual void clipPath(const SkPath&, SkRegion::Op, bool antialias) = 0; |
1619 }; | 1576 }; |
1620 | 1577 |
1621 #endif | 1578 #endif |
OLD | NEW |