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