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