12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef SKIA_EXT_LAZY_PIXEL_REF_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define SKIA_EXT_LAZY_PIXEL_REF_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkPixelRef.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkRect.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace skia { 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class extends SkPixelRef to facilitate lazy image decoding on the impl 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// thread. 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SK_API LazyPixelRef : public SkPixelRef { 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) explicit LazyPixelRef(const SkImageInfo& info); 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~LazyPixelRef(); 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) struct PrepareParams { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Clipping rect for this pixel ref. 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkIRect clip_rect; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Request the ImageDecodingStore to prepare image decoding for the 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // given clipping rect. Returns true is succeeded, or false otherwise. 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool PrepareToDecode(const PrepareParams& params) = 0; 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Returns true if this pixel ref is already in the ImageDecodingStore's 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // cache, false otherwise. Much cheaper than PrepareToDecode(). 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual bool MaybeDecoded() = 0; 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Start decoding the image. 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void Decode() = 0; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace skia 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // SKIA_EXT_LAZY_PIXEL_REF_H_ 40