diff options
Diffstat (limited to 'chromium/third_party/skia/include/utils/SkPictureUtils.h')
-rw-r--r-- | chromium/third_party/skia/include/utils/SkPictureUtils.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/chromium/third_party/skia/include/utils/SkPictureUtils.h b/chromium/third_party/skia/include/utils/SkPictureUtils.h index 5e6b051f454..c35aca81e2a 100644 --- a/chromium/third_party/skia/include/utils/SkPictureUtils.h +++ b/chromium/third_party/skia/include/utils/SkPictureUtils.h @@ -9,6 +9,7 @@ #define SkPictureUtils_DEFINED #include "SkPicture.h" +#include "SkTDArray.h" class SkData; struct SkRect; @@ -26,6 +27,57 @@ public: * and remains unchanged. */ static SkData* GatherPixelRefs(SkPicture* pict, const SkRect& area); + + /** + * SkPixelRefContainer provides a base class for more elaborate pixel ref + * query structures (e.g., rtrees, quad-trees, etc.) + */ + class SkPixelRefContainer : public SkRefCnt { + public: + virtual void add(SkPixelRef* pr, const SkRect& rect) = 0; + + // The returned array may contain duplicates + virtual void query(const SkRect& queryRect, SkTDArray<SkPixelRef*> *result) = 0; + + private: + typedef SkRefCnt INHERITED; + }; + + // Simple query structure that just stores a linked list of pixel refs + // and rects. + class SkPixelRefsAndRectsList : public SkPixelRefContainer { + public: + virtual void add(SkPixelRef* pr, const SkRect& rect) SK_OVERRIDE { + PixelRefAndRect *dst = fArray.append(); + + dst->fPixelRef = pr; + dst->fRect = rect; + } + + virtual void query(const SkRect& queryRect, SkTDArray<SkPixelRef*> *result) SK_OVERRIDE { + for (int i = 0; i < fArray.count(); ++i) { + if (SkRect::Intersects(fArray[i].fRect, queryRect)) { + *result->append() = fArray[i].fPixelRef; + } + } + } + + private: + struct PixelRefAndRect { + SkPixelRef* fPixelRef; + SkRect fRect; + }; + + SkTDArray<PixelRefAndRect> fArray; + + typedef SkPixelRefContainer INHERITED; + }; + + /** + * Fill the provided pixel ref container with the picture's pixel ref + * and rect information. + */ + static void GatherPixelRefsAndRects(SkPicture* pict, SkPixelRefContainer* prCont); }; #endif |