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 <string.h> // memcpy 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/dev/ppb_truetype_font_dev.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/pp_errors.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/c/ppb_var.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/completion_callback.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/instance_handle.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module_impl.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/var.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace pp { 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template <> const char* interface_name<PPB_TrueTypeFont_Dev_0_1>() { 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return PPB_TRUETYPEFONT_DEV_INTERFACE_0_1; 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TrueTypeFontDesc_Dev -------------------------------------------------------- 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev() { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) desc_.family = family_.pp_var(); 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_generic_family(PP_TRUETYPEFONTFAMILY_SERIF); 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_style(PP_TRUETYPEFONTSTYLE_NORMAL); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_weight(PP_TRUETYPEFONTWEIGHT_NORMAL); 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_width(PP_TRUETYPEFONTWIDTH_NORMAL); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_charset(PP_TRUETYPEFONTCHARSET_DEFAULT); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev( 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PassRef, 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const PP_TrueTypeFontDesc_Dev& pp_desc) { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) desc_ = pp_desc; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_family(Var(PASS_REF, pp_desc.family)); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(const TrueTypeFontDesc_Dev& other) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_family(other.family()); 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_generic_family(other.generic_family()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_style(other.style()); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_weight(other.weight()); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_width(other.width()); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_charset(other.charset()); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev::~TrueTypeFontDesc_Dev() { 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFontDesc_Dev& TrueTypeFontDesc_Dev::operator=( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TrueTypeFontDesc_Dev& other) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this == &other) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *this; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_family(other.family()); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_generic_family(other.generic_family()); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_style(other.style()); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_weight(other.weight()); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_width(other.width()); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) set_charset(other.charset()); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *this; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TrueTypeFont_Dev ------------------------------------------------------------ 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev() { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(const InstanceHandle& instance, 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const TrueTypeFontDesc_Dev& desc) { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!has_interface<PPB_TrueTypeFont_Dev_0_1>()) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PassRefFromConstructor(get_interface<PPB_TrueTypeFont_Dev_0_1>()->Create( 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instance.pp_instance(), &desc.pp_desc())); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(const TrueTypeFont_Dev& other) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : Resource(other) { 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TrueTypeFont_Dev::TrueTypeFont_Dev(PassRef, PP_Resource resource) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : Resource(PASS_REF, resource) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetFontFamilies( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const InstanceHandle& instance, 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CompletionCallbackWithOutput<std::vector<Var> >& cc) { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontFamilies( 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) instance.pp_instance(), 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc.output(), cc.pp_completion_callback()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return cc.MayForce(PP_ERROR_NOINTERFACE); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetFontsInFamily( 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const InstanceHandle& instance, 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Var& family, 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const CompletionCallbackWithOutput<std::vector<TrueTypeFontDesc_Dev> >& cc) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) { 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) { 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontsInFamily( 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) instance.pp_instance(), 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) family.pp_var(), 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) cc.output(), cc.pp_completion_callback()); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return cc.MayForce(PP_ERROR_NOINTERFACE); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::Describe( 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CompletionCallbackWithOutput<TrueTypeFontDesc_Dev>& cc) { 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) { 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t result = 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) get_interface<PPB_TrueTypeFont_Dev_0_1>()->Describe( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp_resource(), cc.output(), cc.pp_completion_callback()); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return cc.MayForce(PP_ERROR_NOINTERFACE); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int32_t TrueTypeFont_Dev::GetTableTags( 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CompletionCallbackWithOutput<std::vector<uint32_t> >& cc) { 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) { 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTableTags( 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp_resource(), 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)int32_t TrueTypeFont_Dev::GetTable( 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32_t table, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t offset, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32_t max_data_length, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const CompletionCallbackWithOutput<std::vector<char> >& cc) { 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) { 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTable( 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) pp_resource(), 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) table, offset, max_data_length, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) cc.output(), cc.pp_completion_callback()); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return cc.MayForce(PP_ERROR_NOINTERFACE); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace pp 157