| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "webkit/glue/plugins/pepper_font.h" | 5 #include "webkit/glue/plugins/pepper_font.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
| 9 #include "ppapi/c/dev/ppb_font_dev.h" | 9 #include "ppapi/c/dev/ppb_font_dev.h" |
| 10 #include "ppapi/c/pp_rect.h" | 10 #include "ppapi/c/pp_rect.h" |
| 11 #include "third_party/WebKit/WebKit/chromium/public/WebFont.h" | 11 #include "third_party/WebKit/WebKit/chromium/public/WebFont.h" |
| 12 #include "third_party/WebKit/WebKit/chromium/public/WebFontDescription.h" | 12 #include "third_party/WebKit/WebKit/chromium/public/WebFontDescription.h" |
| 13 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h" | 13 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h" |
| 14 #include "third_party/WebKit/WebKit/chromium/public/WebFloatPoint.h" | 14 #include "third_party/WebKit/WebKit/chromium/public/WebFloatPoint.h" |
| 15 #include "third_party/WebKit/WebKit/chromium/public/WebFloatRect.h" | 15 #include "third_party/WebKit/WebKit/chromium/public/WebFloatRect.h" |
| 16 #include "third_party/WebKit/WebKit/chromium/public/WebTextRun.h" | 16 #include "third_party/WebKit/WebKit/chromium/public/WebTextRun.h" |
| 17 #include "webkit/glue/plugins/pepper_common.h" |
| 17 #include "webkit/glue/plugins/pepper_image_data.h" | 18 #include "webkit/glue/plugins/pepper_image_data.h" |
| 18 #include "webkit/glue/plugins/pepper_plugin_module.h" | 19 #include "webkit/glue/plugins/pepper_plugin_module.h" |
| 19 #include "webkit/glue/plugins/pepper_string.h" | 20 #include "webkit/glue/plugins/pepper_string.h" |
| 20 #include "webkit/glue/plugins/pepper_var.h" | 21 #include "webkit/glue/plugins/pepper_var.h" |
| 21 #include "webkit/glue/webkit_glue.h" | 22 #include "webkit/glue/webkit_glue.h" |
| 22 | 23 |
| 23 using WebKit::WebFloatPoint; | 24 using WebKit::WebFloatPoint; |
| 24 using WebKit::WebFloatRect; | 25 using WebKit::WebFloatRect; |
| 25 using WebKit::WebFont; | 26 using WebKit::WebFont; |
| 26 using WebKit::WebFontDescription; | 27 using WebKit::WebFontDescription; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 COMPILE_ASSERT(WebFontDescription::GenericFamilyMonospace == | 81 COMPILE_ASSERT(WebFontDescription::GenericFamilyMonospace == |
| 81 PP_FONTFAMILY_TO_WEB_FONTFAMILY(PP_FONTFAMILY_MONOSPACE), | 82 PP_FONTFAMILY_TO_WEB_FONTFAMILY(PP_FONTFAMILY_MONOSPACE), |
| 82 MonospaceFamily); | 83 MonospaceFamily); |
| 83 | 84 |
| 84 WebFontDescription result; | 85 WebFontDescription result; |
| 85 scoped_refptr<StringVar> face_name(StringVar::FromPPVar(font.face)); | 86 scoped_refptr<StringVar> face_name(StringVar::FromPPVar(font.face)); |
| 86 if (face_name) | 87 if (face_name) |
| 87 result.family = UTF8ToUTF16(face_name->value()); | 88 result.family = UTF8ToUTF16(face_name->value()); |
| 88 result.genericFamily = PP_FONTFAMILY_TO_WEB_FONTFAMILY(font.family); | 89 result.genericFamily = PP_FONTFAMILY_TO_WEB_FONTFAMILY(font.family); |
| 89 result.size = static_cast<float>(font.size); | 90 result.size = static_cast<float>(font.size); |
| 90 result.italic = font.italic; | 91 result.italic = PPBoolToBool(font.italic); |
| 91 result.smallCaps = font.small_caps; | 92 result.smallCaps = PPBoolToBool(font.small_caps); |
| 92 result.weight = static_cast<WebFontDescription::Weight>(font.weight); | 93 result.weight = static_cast<WebFontDescription::Weight>(font.weight); |
| 93 result.letterSpacing = static_cast<short>(font.letter_spacing); | 94 result.letterSpacing = static_cast<short>(font.letter_spacing); |
| 94 result.wordSpacing = static_cast<short>(font.word_spacing); | 95 result.wordSpacing = static_cast<short>(font.word_spacing); |
| 95 return result; | 96 return result; |
| 96 } | 97 } |
| 97 | 98 |
| 98 // Converts the given PP_TextRun to a WebTextRun, returning true on success. | 99 // Converts the given PP_TextRun to a WebTextRun, returning true on success. |
| 99 // False means the input was invalid. | 100 // False means the input was invalid. |
| 100 bool PPTextRunToWebTextRun(const PP_TextRun_Dev* run, WebTextRun* output) { | 101 bool PPTextRunToWebTextRun(const PP_TextRun_Dev* run, WebTextRun* output) { |
| 101 scoped_refptr<StringVar> text_string(StringVar::FromPPVar(run->text)); | 102 scoped_refptr<StringVar> text_string(StringVar::FromPPVar(run->text)); |
| 102 if (!text_string) | 103 if (!text_string) |
| 103 return false; | 104 return false; |
| 104 *output = WebTextRun(UTF8ToUTF16(text_string->value()), | 105 *output = WebTextRun(UTF8ToUTF16(text_string->value()), |
| 105 run->rtl, run->override_direction); | 106 PPBoolToBool(run->rtl), |
| 107 PPBoolToBool(run->override_direction)); |
| 106 return true; | 108 return true; |
| 107 } | 109 } |
| 108 | 110 |
| 109 PP_Resource Create(PP_Module module_id, | 111 PP_Resource Create(PP_Module module_id, |
| 110 const PP_FontDescription_Dev* description) { | 112 const PP_FontDescription_Dev* description) { |
| 111 PluginModule* module = ResourceTracker::Get()->GetModule(module_id); | 113 PluginModule* module = ResourceTracker::Get()->GetModule(module_id); |
| 112 if (!module) | 114 if (!module) |
| 113 return 0; | 115 return 0; |
| 114 | 116 |
| 115 if (!IsPPFontDescriptionValid(*description)) | 117 if (!IsPPFontDescriptionValid(*description)) |
| 116 return 0; | 118 return 0; |
| 117 | 119 |
| 118 scoped_refptr<Font> font(new Font(module, *description)); | 120 scoped_refptr<Font> font(new Font(module, *description)); |
| 119 return font->GetReference(); | 121 return font->GetReference(); |
| 120 } | 122 } |
| 121 | 123 |
| 122 bool IsFont(PP_Resource resource) { | 124 PP_Bool IsFont(PP_Resource resource) { |
| 123 return !!Resource::GetAs<Font>(resource).get(); | 125 return BoolToPPBool(!!Resource::GetAs<Font>(resource).get()); |
| 124 } | 126 } |
| 125 | 127 |
| 126 bool Describe(PP_Resource font_id, | 128 PP_Bool Describe(PP_Resource font_id, |
| 127 PP_FontDescription_Dev* description, | 129 PP_FontDescription_Dev* description, |
| 128 PP_FontMetrics_Dev* metrics) { | 130 PP_FontMetrics_Dev* metrics) { |
| 129 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); | 131 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); |
| 130 if (!font.get()) | 132 if (!font.get()) |
| 131 return false; | 133 return PP_FALSE; |
| 132 return font->Describe(description, metrics); | 134 return BoolToPPBool(font->Describe(description, metrics)); |
| 133 } | 135 } |
| 134 | 136 |
| 135 bool DrawTextAt(PP_Resource font_id, | 137 PP_Bool DrawTextAt(PP_Resource font_id, |
| 136 PP_Resource image_data, | 138 PP_Resource image_data, |
| 137 const PP_TextRun_Dev* text, | 139 const PP_TextRun_Dev* text, |
| 138 const PP_Point* position, | 140 const PP_Point* position, |
| 139 uint32_t color, | 141 uint32_t color, |
| 140 const PP_Rect* clip, | 142 const PP_Rect* clip, |
| 141 bool image_data_is_opaque) { | 143 PP_Bool image_data_is_opaque) { |
| 142 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); | 144 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); |
| 143 if (!font.get()) | 145 if (!font.get()) |
| 144 return false; | 146 return PP_FALSE; |
| 145 return font->DrawTextAt(image_data, text, position, color, clip, | 147 return BoolToPPBool(font->DrawTextAt(image_data, text, position, color, clip, |
| 146 image_data_is_opaque); | 148 PPBoolToBool(image_data_is_opaque))); |
| 147 } | 149 } |
| 148 | 150 |
| 149 int32_t MeasureText(PP_Resource font_id, const PP_TextRun_Dev* text) { | 151 int32_t MeasureText(PP_Resource font_id, const PP_TextRun_Dev* text) { |
| 150 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); | 152 scoped_refptr<Font> font(Resource::GetAs<Font>(font_id)); |
| 151 if (!font.get()) | 153 if (!font.get()) |
| 152 return -1; | 154 return -1; |
| 153 return font->MeasureText(text); | 155 return font->MeasureText(text); |
| 154 } | 156 } |
| 155 | 157 |
| 156 uint32_t CharacterOffsetForPixel(PP_Resource font_id, | 158 uint32_t CharacterOffsetForPixel(PP_Resource font_id, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 | 206 |
| 205 WebFontDescription web_desc = font_->fontDescription(); | 207 WebFontDescription web_desc = font_->fontDescription(); |
| 206 | 208 |
| 207 // While converting the other way in PPFontDescToWebFontDesc we validated | 209 // While converting the other way in PPFontDescToWebFontDesc we validated |
| 208 // that the enums can be casted. | 210 // that the enums can be casted. |
| 209 description->face = StringVar::StringToPPVar(module(), | 211 description->face = StringVar::StringToPPVar(module(), |
| 210 UTF16ToUTF8(web_desc.family)); | 212 UTF16ToUTF8(web_desc.family)); |
| 211 description->family = static_cast<PP_FontFamily_Dev>(web_desc.genericFamily); | 213 description->family = static_cast<PP_FontFamily_Dev>(web_desc.genericFamily); |
| 212 description->size = static_cast<uint32_t>(web_desc.size); | 214 description->size = static_cast<uint32_t>(web_desc.size); |
| 213 description->weight = static_cast<PP_FontWeight_Dev>(web_desc.weight); | 215 description->weight = static_cast<PP_FontWeight_Dev>(web_desc.weight); |
| 214 description->italic = web_desc.italic; | 216 description->italic = BoolToPPBool(web_desc.italic); |
| 215 description->small_caps = web_desc.smallCaps; | 217 description->small_caps = BoolToPPBool(web_desc.smallCaps); |
| 216 | 218 |
| 217 metrics->height = font_->height(); | 219 metrics->height = font_->height(); |
| 218 metrics->ascent = font_->ascent(); | 220 metrics->ascent = font_->ascent(); |
| 219 metrics->descent = font_->descent(); | 221 metrics->descent = font_->descent(); |
| 220 metrics->line_spacing = font_->lineSpacing(); | 222 metrics->line_spacing = font_->lineSpacing(); |
| 221 metrics->x_height = static_cast<int32_t>(font_->xHeight()); | 223 metrics->x_height = static_cast<int32_t>(font_->xHeight()); |
| 222 | 224 |
| 223 return true; | 225 return true; |
| 224 } | 226 } |
| 225 | 227 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 return -1; | 285 return -1; |
| 284 if (char_offset >= run.text.length()) | 286 if (char_offset >= run.text.length()) |
| 285 return -1; | 287 return -1; |
| 286 | 288 |
| 287 WebFloatRect rect = font_->selectionRectForText( | 289 WebFloatRect rect = font_->selectionRectForText( |
| 288 run, WebFloatPoint(0.0f, 0.0f), font_->height(), 0, char_offset); | 290 run, WebFloatPoint(0.0f, 0.0f), font_->height(), 0, char_offset); |
| 289 return static_cast<int>(rect.width); | 291 return static_cast<int>(rect.width); |
| 290 } | 292 } |
| 291 | 293 |
| 292 } // namespace pepper | 294 } // namespace pepper |
| OLD | NEW |