truetype_font_dev.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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#include "ppapi/cpp/dev/truetype_font_dev.h"
6
7#include <string.h>  // memcpy
8
9#include "ppapi/c/dev/ppb_truetype_font_dev.h"
10#include "ppapi/c/pp_errors.h"
11#include "ppapi/c/ppb_var.h"
12#include "ppapi/cpp/completion_callback.h"
13#include "ppapi/cpp/instance_handle.h"
14#include "ppapi/cpp/module.h"
15#include "ppapi/cpp/module_impl.h"
16#include "ppapi/cpp/var.h"
17
18namespace pp {
19
20namespace {
21
22template <> const char* interface_name<PPB_TrueTypeFont_Dev_0_1>() {
23  return PPB_TRUETYPEFONT_DEV_INTERFACE_0_1;
24}
25
26}  // namespace
27
28// TrueTypeFontDesc_Dev --------------------------------------------------------
29
30TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev() {
31  desc_.family = family_.pp_var();
32  set_generic_family(PP_TRUETYPEFONTFAMILY_SERIF);
33  set_style(PP_TRUETYPEFONTSTYLE_NORMAL);
34  set_weight(PP_TRUETYPEFONTWEIGHT_NORMAL);
35  set_width(PP_TRUETYPEFONTWIDTH_NORMAL);
36  set_charset(PP_TRUETYPEFONTCHARSET_DEFAULT);
37}
38
39TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(
40    PassRef,
41    const PP_TrueTypeFontDesc_Dev& pp_desc) {
42  desc_ = pp_desc;
43  set_family(Var(PASS_REF, pp_desc.family));
44}
45
46TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(const TrueTypeFontDesc_Dev& other) {
47  set_family(other.family());
48  set_generic_family(other.generic_family());
49  set_style(other.style());
50  set_weight(other.weight());
51  set_width(other.width());
52  set_charset(other.charset());
53}
54
55TrueTypeFontDesc_Dev::~TrueTypeFontDesc_Dev() {
56}
57
58TrueTypeFontDesc_Dev& TrueTypeFontDesc_Dev::operator=(
59    const TrueTypeFontDesc_Dev& other) {
60  if (this == &other)
61    return *this;
62
63  set_family(other.family());
64  set_generic_family(other.generic_family());
65  set_style(other.style());
66  set_weight(other.weight());
67  set_width(other.width());
68  set_charset(other.charset());
69
70  return *this;
71}
72
73// TrueTypeFont_Dev ------------------------------------------------------------
74
75TrueTypeFont_Dev::TrueTypeFont_Dev() {
76}
77
78TrueTypeFont_Dev::TrueTypeFont_Dev(const InstanceHandle& instance,
79                                   const TrueTypeFontDesc_Dev& desc) {
80  if (!has_interface<PPB_TrueTypeFont_Dev_0_1>())
81    return;
82  PassRefFromConstructor(get_interface<PPB_TrueTypeFont_Dev_0_1>()->Create(
83      instance.pp_instance(), &desc.pp_desc()));
84}
85
86TrueTypeFont_Dev::TrueTypeFont_Dev(const TrueTypeFont_Dev& other)
87    : Resource(other) {
88}
89
90TrueTypeFont_Dev::TrueTypeFont_Dev(PassRef, PP_Resource resource)
91    : Resource(PASS_REF, resource) {
92}
93
94// static
95int32_t TrueTypeFont_Dev::GetFontFamilies(
96    const InstanceHandle& instance,
97    const CompletionCallbackWithOutput<std::vector<Var> >& cc) {
98  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
99    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontFamilies(
100        instance.pp_instance(),
101        cc.output(), cc.pp_completion_callback());
102  }
103  return cc.MayForce(PP_ERROR_NOINTERFACE);
104}
105
106// static
107int32_t TrueTypeFont_Dev::GetFontsInFamily(
108    const InstanceHandle& instance,
109    const Var& family,
110    const CompletionCallbackWithOutput<std::vector<TrueTypeFontDesc_Dev> >& cc)
111        {
112  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
113    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontsInFamily(
114        instance.pp_instance(),
115        family.pp_var(),
116        cc.output(), cc.pp_completion_callback());
117  }
118  return cc.MayForce(PP_ERROR_NOINTERFACE);
119}
120
121int32_t TrueTypeFont_Dev::Describe(
122    const CompletionCallbackWithOutput<TrueTypeFontDesc_Dev>& cc) {
123  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
124    int32_t result =
125        get_interface<PPB_TrueTypeFont_Dev_0_1>()->Describe(
126            pp_resource(), cc.output(), cc.pp_completion_callback());
127    return result;
128  }
129  return cc.MayForce(PP_ERROR_NOINTERFACE);
130}
131
132int32_t TrueTypeFont_Dev::GetTableTags(
133    const CompletionCallbackWithOutput<std::vector<uint32_t> >& cc) {
134  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
135    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTableTags(
136        pp_resource(),
137        cc.output(), cc.pp_completion_callback());
138  }
139  return cc.MayForce(PP_ERROR_NOINTERFACE);
140}
141
142int32_t TrueTypeFont_Dev::GetTable(
143    uint32_t table,
144    int32_t offset,
145    int32_t max_data_length,
146    const CompletionCallbackWithOutput<std::vector<char> >& cc) {
147  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
148    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTable(
149        pp_resource(),
150        table, offset, max_data_length,
151        cc.output(), cc.pp_completion_callback());
152  }
153  return cc.MayForce(PP_ERROR_NOINTERFACE);
154}
155
156}  // namespace pp
157