Pepper_31_C++_interfaces
truetype_font_dev.h
Go to the documentation of this file.
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef PPAPI_CPP_TRUETYPE_FONT_H_
6 #define PPAPI_CPP_TRUETYPE_FONT_H_
7 
8 #include "ppapi/c/dev/ppb_truetype_font_dev.h"
9 #include "ppapi/c/pp_time.h"
10 #include "ppapi/cpp/completion_callback.h"
11 #include "ppapi/cpp/pass_ref.h"
12 #include "ppapi/cpp/resource.h"
13 
14 /// @file
15 /// This file defines the API to create a TrueType font object.
16 
17 namespace pp {
18 
19 class InstanceHandle;
20 
21 // TrueTypeFontDesc_Dev --------------------------------------------------------
22 
23 /// The <code>TrueTypeFontDesc_Dev</code> class represents a TrueType font
24 /// descriptor, used to Create and Describe fonts.
26  public:
27  /// Default constructor for creating a <code>TrueTypeFontDesc_Dev</code>
28  /// object.
30 
31  /// Constructor that takes an existing <code>PP_TrueTypeFontDesc_Dev</code>
32  /// structure. The 'family' PP_Var field in the structure will be managed by
33  /// this instance.
35 
36  /// The copy constructor for <code>TrueTypeFontDesc_Dev</code>.
37  ///
38  /// @param[in] other A reference to a <code>TrueTypeFontDesc_Dev</code>.
40 
42 
44 
46  return desc_;
47  }
48 
49  Var family() const {
50  return family_;
51  }
52  void set_family(const Var& family) {
53  family_ = family;
54  // The assignment above manages the underlying PP_Vars. Copy the new one
55  // into the wrapped desc struct.
56  desc_.family = family_.pp_var();
57  }
58 
59  PP_TrueTypeFontFamily_Dev generic_family() const {
60  return desc_.generic_family;
61  }
62  void set_generic_family(PP_TrueTypeFontFamily_Dev family) {
63  desc_.generic_family = family;
64  }
65 
66  PP_TrueTypeFontStyle_Dev style() const { return desc_.style; }
67  void set_style(PP_TrueTypeFontStyle_Dev style) {
68  desc_.style = style;
69  }
70 
71  PP_TrueTypeFontWeight_Dev weight() const { return desc_.weight; }
72  void set_weight(PP_TrueTypeFontWeight_Dev weight) {
73  desc_.weight = weight;
74  }
75 
76  PP_TrueTypeFontWidth_Dev width() const { return desc_.width; }
77  void set_width(PP_TrueTypeFontWidth_Dev width) {
78  desc_.width = width;
79  }
80 
81  PP_TrueTypeFontCharset_Dev charset() const { return desc_.charset; }
82  void set_charset(PP_TrueTypeFontCharset_Dev charset) {
83  desc_.charset = charset;
84  }
85 
86  private:
87  pp::Var family_; // This manages the PP_Var embedded in desc_.
89 };
90 
91 // TrueTypeFont_Dev ------------------------------------------------------------
92 
93 /// The <code>TrueTypeFont_Dev</code> class represents a TrueType font resource.
94 class TrueTypeFont_Dev : public Resource {
95  public:
96  /// Default constructor for creating a <code>TrueTypeFont_Dev</code> object.
98 
99  /// A constructor used to create a <code>TrueTypeFont_Dev</code> and associate
100  /// it with the provided <code>Instance</code>.
101  ///
102  /// @param[in] instance The instance that owns this resource.
103  TrueTypeFont_Dev(const InstanceHandle& instance,
104  const TrueTypeFontDesc_Dev& desc);
105 
106  /// The copy constructor for <code>TrueTypeFont_Dev</code>.
107  ///
108  /// @param[in] other A reference to a <code>TrueTypeFont_Dev</code>.
109  TrueTypeFont_Dev(const TrueTypeFont_Dev& other);
110 
111  /// A constructor used when you have received a PP_Resource as a return
112  /// value that has had its reference count incremented for you.
113  ///
114  /// @param[in] resource A PP_Resource corresponding to a TrueType font.
116 
117  /// Gets an array of TrueType font family names available on the host.
118  /// These names can be used to create a font from a specific family.
119  ///
120  /// @param[in] instance A <code>InstanceHandle</code> requesting the family
121  /// names.
122  /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be
123  /// called upon completion of GetFontFamilies.
124  ///
125  /// @return If >= 0, the number of family names returned, otherwise an error
126  /// code from <code>pp_errors.h</code>.
127  static int32_t GetFontFamilies(
128  const InstanceHandle& instance,
129  const CompletionCallbackWithOutput<std::vector<Var> >& callback);
130 
131  /// Gets an array of TrueType font descriptors for a given font family. These
132  /// descriptors can be used to create a font in that family and matching the
133  /// descriptor attributes.
134  ///
135  /// @param[in] instance A <code>PP_Instance</code> requesting the font
136  /// descriptors.
137  /// @param[in] family A <code>Var</code> holding a string specifying the font
138  /// family.
139  /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be
140  /// called upon completion of GetFontsInFamily.
141  ///
142  /// @return If >= 0, the number of font descriptors returned, otherwise an
143  /// error code from <code>pp_errors.h</code>.
144  static int32_t GetFontsInFamily(
145  const InstanceHandle& instance,
146  const Var& family,
147  const CompletionCallbackWithOutput<std::vector<TrueTypeFontDesc_Dev> >&
148  callback);
149 
150  /// Returns a description of the given font resource. This description may
151  /// differ from the description passed to Create, reflecting the host's font
152  /// matching and fallback algorithm.
153  ///
154  /// @param[in] callback A <code>CompletionCallback</code> to be called upon
155  /// completion of Describe.
156  ///
157  /// @return A return code from <code>pp_errors.h</code>. If an error code is
158  /// returned, the descriptor will be left unchanged.
161 
162  /// Gets an array of identifying tags for each table in the font.
163  /// These tags can be used to request specific tables using GetTable.
164  ///
165  /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be
166  /// called upon completion of GetTableTags.
167  ///
168  /// @return If >= 0, the number of table tags returned, otherwise an error
169  /// code from <code>pp_errors.h</code>.
171  const CompletionCallbackWithOutput<std::vector<uint32_t> >& callback);
172 
173  /// Copies the given font table into client memory.
174  ///
175  /// @param[in] table A 4 byte value indicating which table to copy.
176  /// For example, 'glyf' will cause the outline table to be copied into the
177  /// output array. A zero tag value will cause the entire font to be copied.
178  /// @param[in] offset The offset into the font table.
179  /// @param[in] max_data_length The maximum number of bytes to transfer from
180  /// <code>offset</code>.
181  /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be
182  /// called upon completion of GetTable.
183  ///
184  /// @return If >= 0, the table size in bytes, otherwise an error code from
185  /// <code>pp_errors.h</code>.
187  uint32_t table,
188  int32_t offset,
189  int32_t max_data_length,
190  const CompletionCallbackWithOutput<std::vector<char> >& callback);
191 };
192 
193 namespace internal {
194 
195 // A specialization of CallbackOutputTraits to provide the callback system the
196  // information on how to handle pp::TrueTypeFontDesc_Dev. This converts
197 // PP_TrueTypeFontDesc_Dev to pp::TrueTypeFontDesc_Dev when passing to the
198 // plugin, and specifically manages the PP_Var embedded in the desc_ field.
199 template<>
203 
205  return &t;
206  }
207 
209  return TrueTypeFontDesc_Dev(PASS_REF, t);
210  }
211 
212  static inline void Initialize(StorageType* t) {
213  // Use the same defaults as TrueTypeFontDesc_Dev does.
214  TrueTypeFontDesc_Dev dummy;
215  *t = dummy.pp_desc();
216  }
217 };
218 
220  : public ArrayOutputAdapter<PP_TrueTypeFontDesc_Dev> {
221  public:
223  set_output(&temp_storage_);
224  };
225 
227  if (!temp_storage_.empty()) {
228  // An easy way to release the resource references held by |temp_storage_|.
229  output();
230  }
231  };
232 
233  std::vector<TrueTypeFontDesc_Dev>& output() {
234  PP_DCHECK(output_storage_.empty());
235  typedef std::vector<PP_TrueTypeFontDesc_Dev> Entries;
236  for (Entries::iterator it = temp_storage_.begin();
237  it != temp_storage_.end(); ++it)
238  output_storage_.push_back(TrueTypeFontDesc_Dev(PASS_REF, *it));
239  temp_storage_.clear();
240  return output_storage_;
241  }
242 
243  private:
244  std::vector<PP_TrueTypeFontDesc_Dev> temp_storage_;
245  std::vector<TrueTypeFontDesc_Dev> output_storage_;
246 };
247 
248 // A specialization of CallbackOutputTraits to provide the callback system the
249 // information on how to handle vectors of TrueTypeFontDesc_Dev. This converts
250 // PP_TrueTypeFontDesc_Dev to TrueTypeFontDesc_Dev when passing to the plugin.
251 template<>
252 struct CallbackOutputTraits< std::vector<TrueTypeFontDesc_Dev> > {
253  typedef PP_ArrayOutput APIArgType;
255 
257  return t.pp_array_output();
258  }
259 
260  static inline std::vector<TrueTypeFontDesc_Dev>& StorageToPluginArg(
261  StorageType& t) {
262  return t.output();
263  }
264 
265  static inline void Initialize(StorageType* /* t */) {}
266 };
267 
268 } // namespace internal
269 
270 } // namespace pp
271 
272 #endif // PPAPI_CPP_TRUETYPE_FONT_H_
const PP_ArrayOutput & pp_array_output()
Definition: array_output.h:50
static std::vector< TrueTypeFontDesc_Dev > & StorageToPluginArg(StorageType &t)
int32_t Describe(const CompletionCallbackWithOutput< TrueTypeFontDesc_Dev > &callback)
PP_TrueTypeFontCharset_Dev charset() const
PP_TrueTypeFontStyle_Dev style() const
#define PP_DCHECK(a)
Definition: logging.h:16
void set_family(const Var &family)
int32_t GetTable(uint32_t table, int32_t offset, int32_t max_data_length, const CompletionCallbackWithOutput< std::vector< char > > &callback)
PP_TrueTypeFontWeight_Dev weight() const
void set_charset(PP_TrueTypeFontCharset_Dev charset)
void set_output(std::vector< PP_TrueTypeFontDesc_Dev > *output)
Definition: array_output.h:91
const PP_Var & pp_var() const
Definition: var.h:213
static TrueTypeFontDesc_Dev StorageToPluginArg(StorageType &t)
PP_TrueTypeFontWidth_Dev width() const
const PP_TrueTypeFontDesc_Dev & pp_desc() const
The TrueTypeFont_Dev class represents a TrueType font resource.
PassRef
Definition: pass_ref.h:17
void set_style(PP_TrueTypeFontStyle_Dev style)
TrueTypeFont_Dev()
Default constructor for creating a TrueTypeFont_Dev object.
static int32_t GetFontFamilies(const InstanceHandle &instance, const CompletionCallbackWithOutput< std::vector< Var > > &callback)
TrueTypeFontDesc_Dev & operator=(const TrueTypeFontDesc_Dev &other)
static int32_t GetFontsInFamily(const InstanceHandle &instance, const Var &family, const CompletionCallbackWithOutput< std::vector< TrueTypeFontDesc_Dev > > &callback)
int32_t GetTableTags(const CompletionCallbackWithOutput< std::vector< uint32_t > > &callback)
A generic type used for passing data types between the module and the page.
Definition: var.h:20
void set_weight(PP_TrueTypeFontWeight_Dev weight)
A reference counted module resource.
Definition: resource.h:18
void set_generic_family(PP_TrueTypeFontFamily_Dev family)
PP_TrueTypeFontFamily_Dev generic_family() const
void set_width(PP_TrueTypeFontWidth_Dev width)