778bcd2c544c966b46d48a7031692cdf3291e1eb
[platform/upstream/libSkiaSharp.git] / src / codec / SkCodec_libico.h
1 /*
2  * Copyright 2015 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7
8 #include "SkCodec.h"
9 #include "SkImageInfo.h"
10 #include "SkStream.h"
11 #include "SkTypes.h"
12
13 /*
14  * This class implements the decoding for bmp images
15  */
16 class SkIcoCodec : public SkCodec {
17 public:
18
19     /*
20      * Checks the start of the stream to see if the image is a Ico or Cur
21      */
22     static bool IsIco(SkStream*);
23
24     /*
25      * Assumes IsIco was called and returned true
26      * Creates an Ico decoder
27      * Reads enough of the stream to determine the image format
28      */
29     static SkCodec* NewFromStream(SkStream*);
30
31 protected:
32
33     /*
34      * Chooses the best dimensions given the desired scale
35      */
36     SkISize onGetScaledDimensions(float desiredScale) const SK_OVERRIDE;
37
38     /*
39      * Initiates the Ico decode
40      */
41     Result onGetPixels(const SkImageInfo& dstInfo, void* dst,
42                        size_t dstRowBytes, const Options&, SkPMColor*, int*)
43                        SK_OVERRIDE;
44
45     SkEncodedFormat onGetEncodedFormat() const SK_OVERRIDE {
46         return kICO_SkEncodedFormat;
47     }
48
49 private:
50
51     /*
52      * Constructor called by NewFromStream
53      * @param embeddedCodecs codecs for the embedded images, takes ownership
54      */
55     SkIcoCodec(const SkImageInfo& srcInfo,
56                SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs);
57
58     SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>>
59             fEmbeddedCodecs; // owned
60
61     typedef SkCodec INHERITED;
62 };