| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "SkCodec.h" |
| #include "SkImageInfo.h" |
| #include "SkStream.h" |
| #include "SkTypes.h" |
| |
| /* |
| * This class implements the decoding for bmp images |
| */ |
| class SkIcoCodec : public SkCodec { |
| public: |
| |
| /* |
| * Checks the start of the stream to see if the image is a Ico or Cur |
| */ |
| static bool IsIco(SkStream*); |
| |
| /* |
| * Assumes IsIco was called and returned true |
| * Creates an Ico decoder |
| * Reads enough of the stream to determine the image format |
| */ |
| static SkCodec* NewFromStream(SkStream*); |
| |
| protected: |
| |
| /* |
| * Chooses the best dimensions given the desired scale |
| */ |
| SkISize onGetScaledDimensions(float desiredScale) const override; |
| |
| /* |
| * Initiates the Ico decode |
| */ |
| Result onGetPixels(const SkImageInfo& dstInfo, void* dst, |
| size_t dstRowBytes, const Options&, SkPMColor*, int*) |
| override; |
| |
| SkEncodedFormat onGetEncodedFormat() const override { |
| return kICO_SkEncodedFormat; |
| } |
| |
| private: |
| |
| /* |
| * Constructor called by NewFromStream |
| * @param embeddedCodecs codecs for the embedded images, takes ownership |
| */ |
| SkIcoCodec(const SkImageInfo& srcInfo, |
| SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs); |
| |
| SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>> |
| fEmbeddedCodecs; // owned |
| |
| typedef SkCodec INHERITED; |
| }; |