| // 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 "content/browser/renderer_host/pepper/pepper_truetype_font_list.h" |
| |
| #include <pango/pango.h> |
| #include <pango/pangocairo.h> |
| |
| #include <string> |
| |
| #include "ppapi/proxy/serialized_structs.h" |
| |
| namespace content { |
| |
| void GetFontFamilies_SlowBlocking(std::vector<std::string>* font_families) { |
| PangoFontMap* font_map = ::pango_cairo_font_map_get_default(); |
| PangoFontFamily** families = NULL; |
| int num_families = 0; |
| ::pango_font_map_list_families(font_map, &families, &num_families); |
| |
| for (int i = 0; i < num_families; ++i) |
| font_families->push_back(::pango_font_family_get_name(families[i])); |
| g_free(families); |
| } |
| |
| void GetFontsInFamily_SlowBlocking( |
| const std::string& family, |
| std::vector<ppapi::proxy::SerializedTrueTypeFontDesc>* fonts_in_family) { |
| PangoFontMap* font_map = ::pango_cairo_font_map_get_default(); |
| PangoFontFamily** font_families = NULL; |
| int num_families = 0; |
| ::pango_font_map_list_families(font_map, &font_families, &num_families); |
| |
| for (int i = 0; i < num_families; ++i) { |
| PangoFontFamily* font_family = font_families[i]; |
| if (family.compare(::pango_font_family_get_name(font_family)) == 0) { |
| PangoFontFace** font_faces = NULL; |
| int num_faces = 0; |
| ::pango_font_family_list_faces(font_family, &font_faces, &num_faces); |
| |
| for (int j = 0; j < num_faces; ++j) { |
| PangoFontFace* font_face = font_faces[j]; |
| PangoFontDescription* font_desc = ::pango_font_face_describe(font_face); |
| ppapi::proxy::SerializedTrueTypeFontDesc desc; |
| desc.family = family; |
| if (::pango_font_description_get_style(font_desc) == PANGO_STYLE_ITALIC) |
| desc.style = PP_TRUETYPEFONTSTYLE_ITALIC; |
| desc.weight = static_cast<PP_TrueTypeFontWeight_Dev>( |
| ::pango_font_description_get_weight(font_desc)); |
| desc.width = static_cast<PP_TrueTypeFontWidth_Dev>( |
| ::pango_font_description_get_stretch(font_desc)); |
| // Character set is not part of Pango font description. |
| desc.charset = PP_TRUETYPEFONTCHARSET_DEFAULT; |
| |
| fonts_in_family->push_back(desc); |
| ::pango_font_description_free(font_desc); |
| } |
| g_free(font_faces); |
| } |
| } |
| g_free(font_families); |
| } |
| |
| } // namespace content |