| Index: src/lazy/SkLazyCachingPixelRef.h
|
| diff --git a/src/lazy/SkLazyCachingPixelRef.h b/src/lazy/SkLazyCachingPixelRef.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c13a2cd02b4e4efbf183d7298dad457e9c47d2f8
|
| --- /dev/null
|
| +++ b/src/lazy/SkLazyCachingPixelRef.h
|
| @@ -0,0 +1,99 @@
|
| +/*
|
| + * Copyright 2013 Google Inc.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +#ifndef SkLazyCachingPixelRef_DEFINED
|
| +#define SkLazyCachingPixelRef_DEFINED
|
| +
|
| +#include "SkBitmapFactory.h"
|
| +#include "SkCachingPixelRef.h"
|
| +
|
| +class SkData;
|
| +
|
| +/**
|
| + * PixelRef which defers decoding until SkBitmap::lockPixels() is
|
| + * called. Makes use of a supplied decode procedure. Will decode at
|
| + * the procedure's preferred size.
|
| + */
|
| +class SkLazyCachingPixelRef : public SkCachingPixelRef {
|
| +public:
|
| + /**
|
| + * @param data Encoded data representing the pixels. NULL is
|
| + * equivalent to an empty data, and will be passed to
|
| + * DecodeProc with length zero.
|
| + *
|
| + * @param procedure Called to decode the pixels when
|
| + * needed. If NULL, use SkImageDecoder::DecodeMemoryToTarget.
|
| + */
|
| + SkLazyCachingPixelRef(SkData* data,
|
| + SkBitmapFactory::DecodeProc procedure);
|
| +
|
| + virtual ~SkLazyCachingPixelRef();
|
| +
|
| + virtual SkData* onRefEncodedData() SK_OVERRIDE { return SkSafeRef(fData); }
|
| +
|
| + /**
|
| + * A simplified version of SkBitmapFactory. Installs a new
|
| + * SkLazyCachingPixelRef into the provided bitmap. Will
|
| + * immediately call onDecodeInfo() to configure the bitmap, but
|
| + * will defer decoding until the first time the bitmap's pixels
|
| + * are locked.
|
| + *
|
| + * @param data Encoded data representing the pixels. NULL is
|
| + * equivalent to an empty data, and will be passed to
|
| + * DecodeProc with length zero.
|
| + *
|
| + * @param procedure Called to decode the pixels when
|
| + * needed. If NULL, use SkImageDecoder::DecodeMemoryToTarget.
|
| + *
|
| + * @param destination Bitmap that will be modified on success.
|
| + *
|
| + * @returns true on success.
|
| + */
|
| + static bool Install(SkBitmapFactory::DecodeProc procedure,
|
| + SkData* data,
|
| + SkBitmap* destination);
|
| +
|
| + // No need to flatten this object. When flattening an SkBitmap,
|
| + // SkOrderedWriteBuffer will check the encoded data and write that
|
| + // instead.
|
| + // Future implementations of SkFlattenableWriteBuffer will need to
|
| + // special case for onRefEncodedData as well.
|
| + SK_DECLARE_UNFLATTENABLE_OBJECT()
|
| +
|
| +protected:
|
| + /**
|
| + * Return some information about the pixels, allowing this class
|
| + * to allocate pixels. @return false if anything goes wrong.
|
| + *
|
| + * This implementation calls SkBitmapFactory::DecodeProc with a
|
| + * NULL target.
|
| + */
|
| + virtual bool onDecodeInfo(SkImageInfo* info) SK_OVERRIDE;
|
| + /**
|
| + * Decode into the given pixels, a block of memory of size
|
| + * (info.fHeight * rowBytes) bytes.
|
| + *
|
| + * @param info Should be identical to the info returned by
|
| + * onDecodeInfo so that the implementation can confirm
|
| + * that the caller knows what its asking for (config,
|
| + * size).
|
| + *
|
| + * @return false if anything goes wrong.
|
| + */
|
| + virtual bool onDecodePixels(const SkImageInfo& info,
|
| + void* pixels,
|
| + size_t rowBytes) SK_OVERRIDE;
|
| +
|
| +private:
|
| + SkData* fData;
|
| + SkBitmapFactory::DecodeProc fDecodeProc;
|
| +
|
| + typedef SkCachingPixelRef INHERITED;
|
| +};
|
| +
|
| +#endif // SkLazyCachingPixelRef_DEFINED
|
| +
|
|
|