truetype_font_dev.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/dev/truetype_font_dev.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <stdio.h>
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string.h>  // memcpy
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/dev/ppb_truetype_font_dev.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_errors.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/ppb_var.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module_impl.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/var.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace pp {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <> const char* interface_name<PPB_TrueTypeFont_Dev_0_1>() {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return PPB_TRUETYPEFONT_DEV_INTERFACE_0_1;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TrueTypeFontDesc_Dev --------------------------------------------------------
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev() {
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  desc_.family = family_.pp_var();
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_generic_family(PP_TRUETYPEFONTFAMILY_SERIF);
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_style(PP_TRUETYPEFONTSTYLE_NORMAL);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_weight(PP_TRUETYPEFONTWEIGHT_NORMAL);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_width(PP_TRUETYPEFONTWIDTH_NORMAL);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_charset(PP_TRUETYPEFONTCHARSET_DEFAULT);
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PassRef,
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const PP_TrueTypeFontDesc_Dev& pp_desc) {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  desc_ = pp_desc;
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  family_ = Var(PASS_REF, pp_desc.family);
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(const TrueTypeFontDesc_Dev& other) {
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_family(other.family());
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_generic_family(other.generic_family());
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_style(other.style());
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_weight(other.weight());
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_width(other.width());
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  set_charset(other.charset());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::~TrueTypeFontDesc_Dev() {
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev& TrueTypeFontDesc_Dev::operator=(
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const TrueTypeFontDesc_Dev& other) {
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (this == &other)
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return *this;
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  desc_ = other.desc_;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Be careful about the refcount of the string, the assignment above doesn't
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // copy a ref. The assignments below take a ref to the new name and copy the
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // PP_Var into the wrapped descriptor.
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  family_ = other.family();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  desc_.family = family_.pp_var();
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return *this;
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TrueTypeFont_Dev ------------------------------------------------------------
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev() {
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(const InstanceHandle& instance,
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   const TrueTypeFontDesc_Dev& desc) {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!has_interface<PPB_TrueTypeFont_Dev_0_1>())
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PassRefFromConstructor(get_interface<PPB_TrueTypeFont_Dev_0_1>()->Create(
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      instance.pp_instance(), &desc.pp_desc()));
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(const TrueTypeFont_Dev& other)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : Resource(other) {
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(PassRef, PP_Resource resource)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : Resource(PASS_REF, resource) {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetFontFamilies(
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const InstanceHandle& instance,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const CompletionCallbackWithOutput<std::vector<Var> >& cc) {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontFamilies(
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        instance.pp_instance(),
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        cc.output(), cc.pp_completion_callback());
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::Describe(
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const CompletionCallbackWithOutput<TrueTypeFontDesc_Dev>& cc) {
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32_t result =
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        get_interface<PPB_TrueTypeFont_Dev_0_1>()->Describe(
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            pp_resource(), cc.output(), cc.pp_completion_callback());
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return result;
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetTableTags(
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const CompletionCallbackWithOutput<std::vector<uint32_t> >& cc) {
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTableTags(
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        pp_resource(),
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        cc.output(), cc.pp_completion_callback());
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetTable(
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    uint32_t table,
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32_t offset,
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int32_t max_data_length,
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const CompletionCallbackWithOutput<std::vector<char> >& cc) {
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTable(
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        pp_resource(),
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        table, offset, max_data_length,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        cc.output(), cc.pp_completion_callback());
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return cc.MayForce(PP_ERROR_NOINTERFACE);
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace pp
143