root/ppapi/cpp/dev/truetype_font_dev.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. GetFontFamilies
  2. GetFontsInFamily
  3. Describe
  4. GetTableTags
  5. GetTable

// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ppapi/cpp/dev/truetype_font_dev.h"

#include <string.h>  // memcpy

#include "ppapi/c/dev/ppb_truetype_font_dev.h"
#include "ppapi/c/pp_errors.h"
#include "ppapi/c/ppb_var.h"
#include "ppapi/cpp/completion_callback.h"
#include "ppapi/cpp/instance_handle.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/module_impl.h"
#include "ppapi/cpp/var.h"

namespace pp {

namespace {

template <> const char* interface_name<PPB_TrueTypeFont_Dev_0_1>() {
  return PPB_TRUETYPEFONT_DEV_INTERFACE_0_1;
}

}  // namespace

// TrueTypeFontDesc_Dev --------------------------------------------------------

TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev() {
  desc_.family = family_.pp_var();
  set_generic_family(PP_TRUETYPEFONTFAMILY_SERIF);
  set_style(PP_TRUETYPEFONTSTYLE_NORMAL);
  set_weight(PP_TRUETYPEFONTWEIGHT_NORMAL);
  set_width(PP_TRUETYPEFONTWIDTH_NORMAL);
  set_charset(PP_TRUETYPEFONTCHARSET_DEFAULT);
}

TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(
    PassRef,
    const PP_TrueTypeFontDesc_Dev& pp_desc) {
  desc_ = pp_desc;
  set_family(Var(PASS_REF, pp_desc.family));
}

TrueTypeFontDesc_Dev::TrueTypeFontDesc_Dev(const TrueTypeFontDesc_Dev& other) {
  set_family(other.family());
  set_generic_family(other.generic_family());
  set_style(other.style());
  set_weight(other.weight());
  set_width(other.width());
  set_charset(other.charset());
}

TrueTypeFontDesc_Dev::~TrueTypeFontDesc_Dev() {
}

TrueTypeFontDesc_Dev& TrueTypeFontDesc_Dev::operator=(
    const TrueTypeFontDesc_Dev& other) {
  if (this == &other)
    return *this;

  set_family(other.family());
  set_generic_family(other.generic_family());
  set_style(other.style());
  set_weight(other.weight());
  set_width(other.width());
  set_charset(other.charset());

  return *this;
}

// TrueTypeFont_Dev ------------------------------------------------------------

TrueTypeFont_Dev::TrueTypeFont_Dev() {
}

TrueTypeFont_Dev::TrueTypeFont_Dev(const InstanceHandle& instance,
                                   const TrueTypeFontDesc_Dev& desc) {
  if (!has_interface<PPB_TrueTypeFont_Dev_0_1>())
    return;
  PassRefFromConstructor(get_interface<PPB_TrueTypeFont_Dev_0_1>()->Create(
      instance.pp_instance(), &desc.pp_desc()));
}

TrueTypeFont_Dev::TrueTypeFont_Dev(const TrueTypeFont_Dev& other)
    : Resource(other) {
}

TrueTypeFont_Dev::TrueTypeFont_Dev(PassRef, PP_Resource resource)
    : Resource(PASS_REF, resource) {
}

// static
int32_t TrueTypeFont_Dev::GetFontFamilies(
    const InstanceHandle& instance,
    const CompletionCallbackWithOutput<std::vector<Var> >& cc) {
  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontFamilies(
        instance.pp_instance(),
        cc.output(), cc.pp_completion_callback());
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

// static
int32_t TrueTypeFont_Dev::GetFontsInFamily(
    const InstanceHandle& instance,
    const Var& family,
    const CompletionCallbackWithOutput<std::vector<TrueTypeFontDesc_Dev> >& cc)
        {
  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetFontsInFamily(
        instance.pp_instance(),
        family.pp_var(),
        cc.output(), cc.pp_completion_callback());
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

int32_t TrueTypeFont_Dev::Describe(
    const CompletionCallbackWithOutput<TrueTypeFontDesc_Dev>& cc) {
  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
    int32_t result =
        get_interface<PPB_TrueTypeFont_Dev_0_1>()->Describe(
            pp_resource(), cc.output(), cc.pp_completion_callback());
    return result;
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

int32_t TrueTypeFont_Dev::GetTableTags(
    const CompletionCallbackWithOutput<std::vector<uint32_t> >& cc) {
  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTableTags(
        pp_resource(),
        cc.output(), cc.pp_completion_callback());
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

int32_t TrueTypeFont_Dev::GetTable(
    uint32_t table,
    int32_t offset,
    int32_t max_data_length,
    const CompletionCallbackWithOutput<std::vector<char> >& cc) {
  if (has_interface<PPB_TrueTypeFont_Dev_0_1>()) {
    return get_interface<PPB_TrueTypeFont_Dev_0_1>()->GetTable(
        pp_resource(),
        table, offset, max_data_length,
        cc.output(), cc.pp_completion_callback());
  }
  return cc.MayForce(PP_ERROR_NOINTERFACE);
}

}  // namespace pp

/* [<][>][^][v][top][bottom][index][help] */