158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/* 258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc. 358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * 458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file. 658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#ifndef SkPDFResourceDict_DEFINED 958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#define SkPDFResourceDict_DEFINED 1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkPDFTypes.h" 1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkTDArray.h" 1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkTSet.h" 1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkTypes.h" 1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/** \class SkPDFResourceDict 1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger A resource dictionary, which maintains the relevant sub-dicts and 1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger allows generation of a list of referenced SkPDFObjects inserted with 2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger insertResourceAsRef. 2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger*/ 2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkPDFResourceDict : public SkPDFDict { 2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic: 2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SK_DECLARE_INST_COUNT(SkPDFResourceDict) 2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger enum SkPDFResourceType{ 2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kExtGState_ResourceType, 2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kPattern_ResourceType, 2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kXObject_ResourceType, 3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kFont_ResourceType, 3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger // These additional types are defined by the spec, but not 3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger // currently used by Skia: ColorSpace, Shading, Properties 3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger kResourceTypeCount 3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger }; 3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger /** Create a PDF resource dictionary. 3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * The full set of ProcSet entries is automatically created for backwards 3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * compatibility, as recommended by the PDF spec. 3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPDFResourceDict(); 4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger /** Add the value SkPDFObject as a reference to the resource dictionary 4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * with the give type and key. 4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * The relevant sub-dicts will be automatically generated, and the 4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * resource will be named by concatenating a type-specific prefix and 4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * the input key. 4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * This object will be part of the resource list when requested later. 4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param type The type of resource being entered, like 4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * kPattern_ResourceType or kExtGState_ResourceType. 5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param key The resource key, should be unique within its type. 5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param value The resource itself. 5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @return The value argument is returned. 5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 5458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPDFObject* insertResourceAsReference(SkPDFResourceType type, int key, 5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPDFObject* value); 5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger /** 5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Gets resources inserted into this dictionary as a reference. 5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * 6058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param knownResourceObjects Set containing currently known resources. 6158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Resources in the dict and this set will not be added to the output. 6258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param newResourceObjects Output set to which non-preexisting resources 6358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * will be added. 6458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param recursive Whether or not to add resources of resources. 6558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 6658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger void getReferencedResources( 6758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger const SkTSet<SkPDFObject*>& knownResourceObjects, 6858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkTSet<SkPDFObject*>* newResourceObjects, 6958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger bool recursive) const; 7058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 7158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger /** 7258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Returns the name for the resource that will be generated by the resource 7358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * dict. 7458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * 7558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param type The type of resource being entered, like 7658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * kPattern_ResourceType or kExtGState_ResourceType. 7758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param key The resource key, should be unique within its type. 7858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 7958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger static SkString getResourceName(SkPDFResourceType type, int key); 8058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 8158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate: 8258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger /** Add the value to the dictionary with the given key. Refs value. 8358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * The relevant sub-dicts will be automatically generated, and the 8458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * resource will be named by concatenating a type-specific prefix and 8558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * the input key. 8658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * The object will NOT be part of the resource list when requested later. 8758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param type The type of resource being entered. 8858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param key The resource key, should be unique within its type. 8958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @param value The resource itself. 9058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * @return The value argument is returned. 9158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */ 9258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPDFObject* insertResource(SkPDFResourceType type, int key, 9358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkPDFObject* value); 9458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 9558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkTSet<SkPDFObject*> fResources; 9658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 9758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger SkTDArray<SkPDFDict*> fTypes; 9858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger}; 9958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger 10058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif 101