1311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// Use of this source code is governed by a BSD-style license that can be 3311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// found in the LICENSE file. 4311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 5311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#ifndef PPAPI_CPP_TRUETYPE_FONT_H_ 6311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#define PPAPI_CPP_TRUETYPE_FONT_H_ 7311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 8311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "ppapi/c/dev/ppb_truetype_font_dev.h" 9311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "ppapi/c/pp_time.h" 10311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "ppapi/cpp/completion_callback.h" 11311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "ppapi/cpp/pass_ref.h" 12311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#include "ppapi/cpp/resource.h" 13311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 14311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff/// @file 15311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff/// This file defines the API to create a TrueType font object. 16311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 17311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffnamespace pp { 18311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 19311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffclass InstanceHandle; 20311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 21311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// TrueTypeFontDesc_Dev -------------------------------------------------------- 22311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 23311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff/// The <code>TrueTypeFontDesc_Dev</code> class represents a TrueType font 24311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff/// descriptor, used to Create and Describe fonts. 25311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffclass TrueTypeFontDesc_Dev { 26311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff public: 27311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Default constructor for creating a <code>TrueTypeFontDesc_Dev</code> 28311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// object. 29311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDesc_Dev(); 30311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 31311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Constructor that takes an existing <code>PP_TrueTypeFontDesc_Dev</code> 32311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// structure. The 'family' PP_Var field in the structure will be managed by 33311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// this instance. 34311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDesc_Dev(PassRef, const PP_TrueTypeFontDesc_Dev& pp_desc); 35311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 36311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// The copy constructor for <code>TrueTypeFontDesc_Dev</code>. 37311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 38311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] other A reference to a <code>TrueTypeFontDesc_Dev</code>. 39311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDesc_Dev(const TrueTypeFontDesc_Dev& other); 40311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 41311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff ~TrueTypeFontDesc_Dev(); 42311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 43311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDesc_Dev& operator=(const TrueTypeFontDesc_Dev& other); 44311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 45311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const PP_TrueTypeFontDesc_Dev& pp_desc() const { 46311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return desc_; 47311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 48311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 49311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff Var family() const { 50311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return family_; 51311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 52311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_family(const Var& family) { 53311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff family_ = family; 54311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff // The assignment above manages the underlying PP_Vars. Copy the new one 55311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff // into the wrapped desc struct. 56311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.family = family_.pp_var(); 57311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 58311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 59311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontFamily_Dev generic_family() const { 60311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return desc_.generic_family; 61311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 62311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_generic_family(PP_TrueTypeFontFamily_Dev family) { 63311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.generic_family = family; 64311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 65311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 66311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontStyle_Dev style() const { return desc_.style; } 67311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_style(PP_TrueTypeFontStyle_Dev style) { 68311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.style = style; 69311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 70311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 71311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontWeight_Dev weight() const { return desc_.weight; } 72311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_weight(PP_TrueTypeFontWeight_Dev weight) { 73311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.weight = weight; 74311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 75311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 76311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontWidth_Dev width() const { return desc_.width; } 77311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_width(PP_TrueTypeFontWidth_Dev width) { 78311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.width = width; 79311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 80311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 81311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontCharset_Dev charset() const { return desc_.charset; } 82311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff void set_charset(PP_TrueTypeFontCharset_Dev charset) { 83311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff desc_.charset = charset; 84311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 85311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 86311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff private: 87311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff pp::Var family_; // This manages the PP_Var embedded in desc_. 88311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_TrueTypeFontDesc_Dev desc_; 89311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}; 90311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 91311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// TrueTypeFont_Dev ------------------------------------------------------------ 92311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 93311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff/// The <code>TrueTypeFont_Dev</code> class represents a TrueType font resource. 94311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffclass TrueTypeFont_Dev : public Resource { 95311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff public: 96311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Default constructor for creating a <code>TrueTypeFont_Dev</code> object. 97311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFont_Dev(); 98311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 99311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// A constructor used to create a <code>TrueTypeFont_Dev</code> and associate 100311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// it with the provided <code>Instance</code>. 101311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 102311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] instance The instance that owns this resource. 103311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFont_Dev(const InstanceHandle& instance, 104311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const TrueTypeFontDesc_Dev& desc); 105311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 106311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// The copy constructor for <code>TrueTypeFont_Dev</code>. 107311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 108311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] other A reference to a <code>TrueTypeFont_Dev</code>. 109311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFont_Dev(const TrueTypeFont_Dev& other); 110311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 111311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// A constructor used when you have received a PP_Resource as a return 112311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// value that has had its reference count incremented for you. 113311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 114311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] resource A PP_Resource corresponding to a TrueType font. 115311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFont_Dev(PassRef, PP_Resource resource); 116311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 117311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Gets an array of TrueType font family names available on the host. 118311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// These names can be used to create a font from a specific family. 119311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 120311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] instance A <code>InstanceHandle</code> requesting the family 121311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// names. 122311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be 123311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// called upon completion of GetFontFamilies. 124311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 125311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @return If >= 0, the number of family names returned, otherwise an error 126311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// code from <code>pp_errors.h</code>. 127311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static int32_t GetFontFamilies( 128311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const InstanceHandle& instance, 129311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const CompletionCallbackWithOutput<std::vector<Var> >& callback); 130311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 131311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Gets an array of TrueType font descriptors for a given font family. These 132311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// descriptors can be used to create a font in that family and matching the 133311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// descriptor attributes. 134311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 135311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] instance A <code>PP_Instance</code> requesting the font 136311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// descriptors. 137311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] family A <code>Var</code> holding a string specifying the font 138311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// family. 139311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be 140311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// called upon completion of GetFontsInFamily. 141311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 142311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @return If >= 0, the number of font descriptors returned, otherwise an 143311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// error code from <code>pp_errors.h</code>. 144311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static int32_t GetFontsInFamily( 145311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const InstanceHandle& instance, 146311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const Var& family, 147311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const CompletionCallbackWithOutput<std::vector<TrueTypeFontDesc_Dev> >& 148311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff callback); 149311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 150311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Returns a description of the given font resource. This description may 151311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// differ from the description passed to Create, reflecting the host's font 152311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// matching and fallback algorithm. 153311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 154311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] callback A <code>CompletionCallback</code> to be called upon 155311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// completion of Describe. 156311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 157311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @return A return code from <code>pp_errors.h</code>. If an error code is 158311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// returned, the descriptor will be left unchanged. 159311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff int32_t Describe( 160311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const CompletionCallbackWithOutput<TrueTypeFontDesc_Dev>& callback); 161311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 162311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Gets an array of identifying tags for each table in the font. 163311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// These tags can be used to request specific tables using GetTable. 164311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 165311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be 166311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// called upon completion of GetTableTags. 167311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 168311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @return If >= 0, the number of table tags returned, otherwise an error 169311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// code from <code>pp_errors.h</code>. 170311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff int32_t GetTableTags( 171311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const CompletionCallbackWithOutput<std::vector<uint32_t> >& callback); 172311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 173311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// Copies the given font table into client memory. 174311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 175311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] table A 4 byte value indicating which table to copy. 176311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// For example, 'glyf' will cause the outline table to be copied into the 177311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// output array. A zero tag value will cause the entire font to be copied. 178311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] offset The offset into the font table. 179311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] max_data_length The maximum number of bytes to transfer from 180311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// <code>offset</code>. 181311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be 182311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// called upon completion of GetTable. 183311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// 184311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// @return If >= 0, the table size in bytes, otherwise an error code from 185311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff /// <code>pp_errors.h</code>. 186311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff int32_t GetTable( 187311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff uint32_t table, 188311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff int32_t offset, 189311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff int32_t max_data_length, 190311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff const CompletionCallbackWithOutput<std::vector<char> >& callback); 191311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}; 192311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 193311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffnamespace internal { 194311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 195311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// A specialization of CallbackOutputTraits to provide the callback system the 196311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff // information on how to handle pp::TrueTypeFontDesc_Dev. This converts 197311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// PP_TrueTypeFontDesc_Dev to pp::TrueTypeFontDesc_Dev when passing to the 198311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// plugin, and specifically manages the PP_Var embedded in the desc_ field. 199311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdifftemplate<> 200311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffstruct CallbackOutputTraits<TrueTypeFontDesc_Dev> { 201311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff typedef PP_TrueTypeFontDesc_Dev* APIArgType; 202311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff typedef PP_TrueTypeFontDesc_Dev StorageType; 203311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 204311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline APIArgType StorageToAPIArg(StorageType& t) { 205311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return &t; 206311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 207311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 208311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline TrueTypeFontDesc_Dev StorageToPluginArg(StorageType& t) { 209311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return TrueTypeFontDesc_Dev(PASS_REF, t); 210311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 211311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 212311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline void Initialize(StorageType* t) { 213311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff // Use the same defaults as TrueTypeFontDesc_Dev does. 214311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDesc_Dev dummy; 215311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff *t = dummy.pp_desc(); 216311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 217311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}; 218311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 219311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffclass TrueTypeFontDescArrayOutputAdapterWithStorage 220311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff : public ArrayOutputAdapter<PP_TrueTypeFontDesc_Dev> { 221311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff public: 222311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff TrueTypeFontDescArrayOutputAdapterWithStorage() { 223311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff set_output(&temp_storage_); 224311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff }; 225311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 226311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff virtual ~TrueTypeFontDescArrayOutputAdapterWithStorage() { 227311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff if (!temp_storage_.empty()) { 228311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff // An easy way to release the resource references held by |temp_storage_|. 229311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff output(); 230311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 231311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff }; 232311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 233311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff std::vector<TrueTypeFontDesc_Dev>& output() { 234311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff PP_DCHECK(output_storage_.empty()); 235311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff typedef std::vector<PP_TrueTypeFontDesc_Dev> Entries; 236311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff for (Entries::iterator it = temp_storage_.begin(); 237311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff it != temp_storage_.end(); ++it) 238311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff output_storage_.push_back(TrueTypeFontDesc_Dev(PASS_REF, *it)); 239311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff temp_storage_.clear(); 240311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return output_storage_; 241311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 242311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 243311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff private: 244311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff std::vector<PP_TrueTypeFontDesc_Dev> temp_storage_; 245311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff std::vector<TrueTypeFontDesc_Dev> output_storage_; 246311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}; 247311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 248311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// A specialization of CallbackOutputTraits to provide the callback system the 249311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// information on how to handle vectors of TrueTypeFontDesc_Dev. This converts 250311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff// PP_TrueTypeFontDesc_Dev to TrueTypeFontDesc_Dev when passing to the plugin. 251311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdifftemplate<> 252311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiffstruct CallbackOutputTraits< std::vector<TrueTypeFontDesc_Dev> > { 253311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff typedef PP_ArrayOutput APIArgType; 254311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff typedef TrueTypeFontDescArrayOutputAdapterWithStorage StorageType; 255311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 256311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline APIArgType StorageToAPIArg(StorageType& t) { 257311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return t.pp_array_output(); 258311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 259311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 260311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline std::vector<TrueTypeFontDesc_Dev>& StorageToPluginArg( 261311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff StorageType& t) { 262311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff return t.output(); 263311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff } 264311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 265311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff static inline void Initialize(StorageType* /* t */) {} 266311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff}; 267311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 268311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff} // namespace internal 269311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 270311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff} // namespace pp 271311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff 272311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff#endif // PPAPI_CPP_TRUETYPE_FONT_H_ 273311c71486f5f6074e5ba62a7f4c5397c8700b868openvcdiff