/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkPDFResourceDict_DEFINED
#define SkPDFResourceDict_DEFINED

#include "SkPDFTypes.h"
#include "SkTDArray.h"
#include "SkTypes.h"

/** \class SkPDFResourceDict

    A resource dictionary, which maintains the relevant sub-dicts and
    allows generation of a list of referenced SkPDFObjects inserted with
    insertResourceAsRef.
*/
class SkPDFResourceDict {
public:
    enum SkPDFResourceType {
        kExtGState_ResourceType,
        kPattern_ResourceType,
        kXObject_ResourceType,
        kFont_ResourceType,
        // These additional types are defined by the spec, but not
        // currently used by Skia: ColorSpace, Shading, Properties
        kResourceTypeCount
    };

    /** Create a PDF resource dictionary.
     *  The full set of ProcSet entries is automatically created for backwards
     *  compatibility, as recommended by the PDF spec.
     *
     *  Any arguments can be NULL.
     */
    static SkPDFDict* Create(
        const SkTDArray<SkPDFObject*>* gStateResources,
        const SkTDArray<SkPDFObject*>* patternResources,
        const SkTDArray<SkPDFObject*>* xObjectResources,
        const SkTDArray<SkPDFObject*>* fontResources);

    /**
     * Returns the name for the resource that will be generated by the resource
     * dict.
     *
     *  @param type  The type of resource being entered, like
     *    kPattern_ResourceType or kExtGState_ResourceType.
     *  @param key   The resource key, should be unique within its type.
     */
    static SkString getResourceName(SkPDFResourceType type, int key);
};

#endif
