19bde918754bc292469d801f156f3b626eb3db780msarett/*
29bde918754bc292469d801f156f3b626eb3db780msarett * Copyright 2015 Google Inc.
39bde918754bc292469d801f156f3b626eb3db780msarett *
49bde918754bc292469d801f156f3b626eb3db780msarett * Use of this source code is governed by a BSD-style license that can be
59bde918754bc292469d801f156f3b626eb3db780msarett * found in the LICENSE file.
69bde918754bc292469d801f156f3b626eb3db780msarett */
79bde918754bc292469d801f156f3b626eb3db780msarett
89bde918754bc292469d801f156f3b626eb3db780msarett#include "SkCodec.h"
99bde918754bc292469d801f156f3b626eb3db780msarett#include "SkImageInfo.h"
109bde918754bc292469d801f156f3b626eb3db780msarett#include "SkStream.h"
119bde918754bc292469d801f156f3b626eb3db780msarett#include "SkTypes.h"
129bde918754bc292469d801f156f3b626eb3db780msarett
139bde918754bc292469d801f156f3b626eb3db780msarett/*
149bde918754bc292469d801f156f3b626eb3db780msarett * This class implements the decoding for bmp images
159bde918754bc292469d801f156f3b626eb3db780msarett */
169bde918754bc292469d801f156f3b626eb3db780msarettclass SkIcoCodec : public SkCodec {
179bde918754bc292469d801f156f3b626eb3db780msarettpublic:
189bde918754bc292469d801f156f3b626eb3db780msarett
199bde918754bc292469d801f156f3b626eb3db780msarett    /*
209bde918754bc292469d801f156f3b626eb3db780msarett     * Checks the start of the stream to see if the image is a Ico or Cur
219bde918754bc292469d801f156f3b626eb3db780msarett     */
229bde918754bc292469d801f156f3b626eb3db780msarett    static bool IsIco(SkStream*);
239bde918754bc292469d801f156f3b626eb3db780msarett
249bde918754bc292469d801f156f3b626eb3db780msarett    /*
259bde918754bc292469d801f156f3b626eb3db780msarett     * Assumes IsIco was called and returned true
269bde918754bc292469d801f156f3b626eb3db780msarett     * Creates an Ico decoder
279bde918754bc292469d801f156f3b626eb3db780msarett     * Reads enough of the stream to determine the image format
289bde918754bc292469d801f156f3b626eb3db780msarett     */
299bde918754bc292469d801f156f3b626eb3db780msarett    static SkCodec* NewFromStream(SkStream*);
309bde918754bc292469d801f156f3b626eb3db780msarett
319bde918754bc292469d801f156f3b626eb3db780msarettprotected:
329bde918754bc292469d801f156f3b626eb3db780msarett
339bde918754bc292469d801f156f3b626eb3db780msarett    /*
349bde918754bc292469d801f156f3b626eb3db780msarett     * Chooses the best dimensions given the desired scale
359bde918754bc292469d801f156f3b626eb3db780msarett     */
3636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onGetScaledDimensions(float desiredScale) const override;
379bde918754bc292469d801f156f3b626eb3db780msarett
389bde918754bc292469d801f156f3b626eb3db780msarett    /*
399bde918754bc292469d801f156f3b626eb3db780msarett     * Initiates the Ico decode
409bde918754bc292469d801f156f3b626eb3db780msarett     */
419bde918754bc292469d801f156f3b626eb3db780msarett    Result onGetPixels(const SkImageInfo& dstInfo, void* dst,
429bde918754bc292469d801f156f3b626eb3db780msarett                       size_t dstRowBytes, const Options&, SkPMColor*, int*)
4336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein                       override;
449bde918754bc292469d801f156f3b626eb3db780msarett
4536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkEncodedFormat onGetEncodedFormat() const override {
469bde918754bc292469d801f156f3b626eb3db780msarett        return kICO_SkEncodedFormat;
479bde918754bc292469d801f156f3b626eb3db780msarett    }
489bde918754bc292469d801f156f3b626eb3db780msarett
499bde918754bc292469d801f156f3b626eb3db780msarettprivate:
509bde918754bc292469d801f156f3b626eb3db780msarett
519bde918754bc292469d801f156f3b626eb3db780msarett    /*
529bde918754bc292469d801f156f3b626eb3db780msarett     * Constructor called by NewFromStream
539bde918754bc292469d801f156f3b626eb3db780msarett     * @param embeddedCodecs codecs for the embedded images, takes ownership
549bde918754bc292469d801f156f3b626eb3db780msarett     */
559bde918754bc292469d801f156f3b626eb3db780msarett    SkIcoCodec(const SkImageInfo& srcInfo,
569bde918754bc292469d801f156f3b626eb3db780msarett               SkTArray<SkAutoTDelete<SkCodec>, true>* embeddedCodecs);
579bde918754bc292469d801f156f3b626eb3db780msarett
589bde918754bc292469d801f156f3b626eb3db780msarett    SkAutoTDelete<SkTArray<SkAutoTDelete<SkCodec>, true>>
599bde918754bc292469d801f156f3b626eb3db780msarett            fEmbeddedCodecs; // owned
609bde918754bc292469d801f156f3b626eb3db780msarett
619bde918754bc292469d801f156f3b626eb3db780msarett    typedef SkCodec INHERITED;
629bde918754bc292469d801f156f3b626eb3db780msarett};
63