| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/child/browser_font_resource_trusted.h" | 5 #include "content/child/browser_font_resource_trusted.h" |
| 6 | 6 |
| 7 #include "base/strings/string_util.h" | 7 #include "base/strings/string_util.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/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/proxy/connection.h" | 10 #include "ppapi/proxy/connection.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 // but the font drawing and measurement routines we call happen after this | 58 // but the font drawing and measurement routines we call happen after this |
| 59 // step. So for correct rendering of RTL content, we need to do it ourselves. | 59 // step. So for correct rendering of RTL content, we need to do it ourselves. |
| 60 class TextRunCollection { | 60 class TextRunCollection { |
| 61 public: | 61 public: |
| 62 explicit TextRunCollection(const PP_BrowserFont_Trusted_TextRun& run) | 62 explicit TextRunCollection(const PP_BrowserFont_Trusted_TextRun& run) |
| 63 : bidi_(NULL), | 63 : bidi_(NULL), |
| 64 num_runs_(0) { | 64 num_runs_(0) { |
| 65 StringVar* text_string = StringVar::FromPPVar(run.text); | 65 StringVar* text_string = StringVar::FromPPVar(run.text); |
| 66 if (!text_string) | 66 if (!text_string) |
| 67 return; // Leave num_runs_ = 0 so we'll do nothing. | 67 return; // Leave num_runs_ = 0 so we'll do nothing. |
| 68 text_ = UTF8ToUTF16(text_string->value()); | 68 text_ = base::UTF8ToUTF16(text_string->value()); |
| 69 | 69 |
| 70 if (run.override_direction) { | 70 if (run.override_direction) { |
| 71 // Skip autodetection. | 71 // Skip autodetection. |
| 72 num_runs_ = 1; | 72 num_runs_ = 1; |
| 73 override_run_ = WebTextRun(text_, PP_ToBool(run.rtl), true); | 73 override_run_ = WebTextRun(text_, PP_ToBool(run.rtl), true); |
| 74 } else { | 74 } else { |
| 75 bidi_ = ubidi_open(); | 75 bidi_ = ubidi_open(); |
| 76 UErrorCode uerror = U_ZERO_ERROR; | 76 UErrorCode uerror = U_ZERO_ERROR; |
| 77 ubidi_setPara(bidi_, text_.data(), text_.size(), run.rtl, NULL, &uerror); | 77 ubidi_setPara(bidi_, text_.data(), text_.size(), run.rtl, NULL, &uerror); |
| 78 if (U_SUCCESS(uerror)) | 78 if (U_SUCCESS(uerror)) |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 | 120 |
| 121 DISALLOW_COPY_AND_ASSIGN(TextRunCollection); | 121 DISALLOW_COPY_AND_ASSIGN(TextRunCollection); |
| 122 }; | 122 }; |
| 123 | 123 |
| 124 bool PPTextRunToWebTextRun(const PP_BrowserFont_Trusted_TextRun& text, | 124 bool PPTextRunToWebTextRun(const PP_BrowserFont_Trusted_TextRun& text, |
| 125 WebTextRun* run) { | 125 WebTextRun* run) { |
| 126 StringVar* text_string = StringVar::FromPPVar(text.text); | 126 StringVar* text_string = StringVar::FromPPVar(text.text); |
| 127 if (!text_string) | 127 if (!text_string) |
| 128 return false; | 128 return false; |
| 129 | 129 |
| 130 *run = WebTextRun(UTF8ToUTF16(text_string->value()), | 130 *run = WebTextRun(base::UTF8ToUTF16(text_string->value()), |
| 131 PP_ToBool(text.rtl), | 131 PP_ToBool(text.rtl), |
| 132 PP_ToBool(text.override_direction)); | 132 PP_ToBool(text.override_direction)); |
| 133 return true; | 133 return true; |
| 134 } | 134 } |
| 135 | 135 |
| 136 // The PP_* version lacks "None", so is just one value shifted from the | 136 // The PP_* version lacks "None", so is just one value shifted from the |
| 137 // WebFontDescription version. These values are checked in | 137 // WebFontDescription version. These values are checked in |
| 138 // PPFontDescToWebFontDesc to make sure the conversion is correct. This is a | 138 // PPFontDescToWebFontDesc to make sure the conversion is correct. This is a |
| 139 // macro so it can also be used in the COMPILE_ASSERTS. | 139 // macro so it can also be used in the COMPILE_ASSERTS. |
| 140 #define PP_FAMILY_TO_WEB_FAMILY(f) \ | 140 #define PP_FAMILY_TO_WEB_FAMILY(f) \ |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 kCommonScript); | 184 kCommonScript); |
| 185 break; | 185 break; |
| 186 case PP_BROWSERFONT_TRUSTED_FAMILY_DEFAULT: | 186 case PP_BROWSERFONT_TRUSTED_FAMILY_DEFAULT: |
| 187 default: | 187 default: |
| 188 resolved_family = GetFontFromMap(prefs.standard_font_family_map, | 188 resolved_family = GetFontFromMap(prefs.standard_font_family_map, |
| 189 kCommonScript); | 189 kCommonScript); |
| 190 break; | 190 break; |
| 191 } | 191 } |
| 192 } else { | 192 } else { |
| 193 // Use the exact font. | 193 // Use the exact font. |
| 194 resolved_family = UTF8ToUTF16(face_name->value()); | 194 resolved_family = base::UTF8ToUTF16(face_name->value()); |
| 195 } | 195 } |
| 196 result.family = resolved_family; | 196 result.family = resolved_family; |
| 197 | 197 |
| 198 result.genericFamily = PP_FAMILY_TO_WEB_FAMILY(font.family); | 198 result.genericFamily = PP_FAMILY_TO_WEB_FAMILY(font.family); |
| 199 | 199 |
| 200 if (font.size == 0) { | 200 if (font.size == 0) { |
| 201 // Resolve the default font size, using the resolved family to see if | 201 // Resolve the default font size, using the resolved family to see if |
| 202 // we should use the fixed or regular font size. It's difficult at this | 202 // we should use the fixed or regular font size. It's difficult at this |
| 203 // level to detect if the requested font is fixed width, so we only apply | 203 // level to detect if the requested font is fixed width, so we only apply |
| 204 // the alternate font size to the default fixed font family. | 204 // the alternate font size to the default fixed font family. |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 | 266 |
| 267 PP_Bool BrowserFontResource_Trusted::Describe( | 267 PP_Bool BrowserFontResource_Trusted::Describe( |
| 268 PP_BrowserFont_Trusted_Description* description, | 268 PP_BrowserFont_Trusted_Description* description, |
| 269 PP_BrowserFont_Trusted_Metrics* metrics) { | 269 PP_BrowserFont_Trusted_Metrics* metrics) { |
| 270 if (description->face.type != PP_VARTYPE_UNDEFINED) | 270 if (description->face.type != PP_VARTYPE_UNDEFINED) |
| 271 return PP_FALSE; | 271 return PP_FALSE; |
| 272 | 272 |
| 273 // While converting the other way in PPFontDescToWebFontDesc we validated | 273 // While converting the other way in PPFontDescToWebFontDesc we validated |
| 274 // that the enums can be casted. | 274 // that the enums can be casted. |
| 275 WebFontDescription web_desc = font_->fontDescription(); | 275 WebFontDescription web_desc = font_->fontDescription(); |
| 276 description->face = StringVar::StringToPPVar(UTF16ToUTF8(web_desc.family)); | 276 description->face = |
| 277 StringVar::StringToPPVar(base::UTF16ToUTF8(web_desc.family)); |
| 277 description->family = | 278 description->family = |
| 278 static_cast<PP_BrowserFont_Trusted_Family>(web_desc.genericFamily); | 279 static_cast<PP_BrowserFont_Trusted_Family>(web_desc.genericFamily); |
| 279 description->size = static_cast<uint32_t>(web_desc.size); | 280 description->size = static_cast<uint32_t>(web_desc.size); |
| 280 description->weight = static_cast<PP_BrowserFont_Trusted_Weight>( | 281 description->weight = static_cast<PP_BrowserFont_Trusted_Weight>( |
| 281 web_desc.weight); | 282 web_desc.weight); |
| 282 description->italic = web_desc.italic ? PP_TRUE : PP_FALSE; | 283 description->italic = web_desc.italic ? PP_TRUE : PP_FALSE; |
| 283 description->small_caps = web_desc.smallCaps ? PP_TRUE : PP_FALSE; | 284 description->small_caps = web_desc.smallCaps ? PP_TRUE : PP_FALSE; |
| 284 description->letter_spacing = static_cast<int32_t>(web_desc.letterSpacing); | 285 description->letter_spacing = static_cast<int32_t>(web_desc.letterSpacing); |
| 285 description->word_spacing = static_cast<int32_t>(web_desc.wordSpacing); | 286 description->word_spacing = static_cast<int32_t>(web_desc.wordSpacing); |
| 286 | 287 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 | 420 |
| 420 // Advance to the next run. Note that we avoid doing this for the last run | 421 // Advance to the next run. Note that we avoid doing this for the last run |
| 421 // since it's unnecessary, measuring text is slow, and most of the time | 422 // since it's unnecessary, measuring text is slow, and most of the time |
| 422 // there will be only one run anyway. | 423 // there will be only one run anyway. |
| 423 if (i != runs.num_runs() - 1) | 424 if (i != runs.num_runs() - 1) |
| 424 web_position.x += font_->calculateWidth(run); | 425 web_position.x += font_->calculateWidth(run); |
| 425 } | 426 } |
| 426 } | 427 } |
| 427 | 428 |
| 428 } // namespace content | 429 } // namespace content |
| OLD | NEW |