OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/gfx/render_text_harfbuzz.h" | 5 #include "ui/gfx/render_text_harfbuzz.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/i18n/bidi_line_iterator.h" | 10 #include "base/i18n/bidi_line_iterator.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 #include "ui/gfx/utf16_indexing.h" | 21 #include "ui/gfx/utf16_indexing.h" |
22 | 22 |
23 #if defined(OS_WIN) | 23 #if defined(OS_WIN) |
24 #include "ui/gfx/font_fallback_win.h" | 24 #include "ui/gfx/font_fallback_win.h" |
25 #endif | 25 #endif |
26 | 26 |
27 namespace gfx { | 27 namespace gfx { |
28 | 28 |
29 namespace { | 29 namespace { |
30 | 30 |
| 31 // Text length limit. Longer strings are slow and not fully tested. |
| 32 const size_t kMaxTextLength = 10000; |
| 33 |
31 // The maximum number of scripts a Unicode character can belong to. This value | 34 // The maximum number of scripts a Unicode character can belong to. This value |
32 // is arbitrarily chosen to be a good limit because it is unlikely for a single | 35 // is arbitrarily chosen to be a good limit because it is unlikely for a single |
33 // character to belong to more scripts. | 36 // character to belong to more scripts. |
34 const size_t kMaxScripts = 5; | 37 const size_t kMaxScripts = 5; |
35 | 38 |
36 // Maps from code points to glyph indices in a font. | 39 // Maps from code points to glyph indices in a font. |
37 typedef std::map<uint32_t, uint16_t> GlyphCache; | 40 typedef std::map<uint32_t, uint16_t> GlyphCache; |
38 | 41 |
39 // Font data provider for HarfBuzz using Skia. Copied from Blink. | 42 // Font data provider for HarfBuzz using Skia. Copied from Blink. |
40 // TODO(ckocagil): Eliminate the duplication. http://crbug.com/368375 | 43 // TODO(ckocagil): Eliminate the duplication. http://crbug.com/368375 |
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
565 } | 568 } |
566 | 569 |
567 return Range(preceding_run_widths_int + cluster_begin_x, | 570 return Range(preceding_run_widths_int + cluster_begin_x, |
568 preceding_run_widths_int + cluster_end_x); | 571 preceding_run_widths_int + cluster_end_x); |
569 } | 572 } |
570 | 573 |
571 } // namespace internal | 574 } // namespace internal |
572 | 575 |
573 RenderTextHarfBuzz::RenderTextHarfBuzz() | 576 RenderTextHarfBuzz::RenderTextHarfBuzz() |
574 : RenderText(), | 577 : RenderText(), |
575 needs_layout_(false) {} | 578 needs_layout_(false) { |
| 579 set_truncate_length(kMaxTextLength); |
| 580 } |
576 | 581 |
577 RenderTextHarfBuzz::~RenderTextHarfBuzz() {} | 582 RenderTextHarfBuzz::~RenderTextHarfBuzz() {} |
578 | 583 |
579 Size RenderTextHarfBuzz::GetStringSize() { | 584 Size RenderTextHarfBuzz::GetStringSize() { |
580 const SizeF size_f = GetStringSizeF(); | 585 const SizeF size_f = GetStringSizeF(); |
581 return Size(std::ceil(size_f.width()), size_f.height()); | 586 return Size(std::ceil(size_f.width()), size_f.height()); |
582 } | 587 } |
583 | 588 |
584 SizeF RenderTextHarfBuzz::GetStringSizeF() { | 589 SizeF RenderTextHarfBuzz::GetStringSizeF() { |
585 EnsureLayout(); | 590 EnsureLayout(); |
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1181 run->width = std::floor(run->width + 0.5f); | 1186 run->width = std::floor(run->width + 0.5f); |
1182 #endif | 1187 #endif |
1183 } | 1188 } |
1184 | 1189 |
1185 hb_buffer_destroy(buffer); | 1190 hb_buffer_destroy(buffer); |
1186 hb_font_destroy(harfbuzz_font); | 1191 hb_font_destroy(harfbuzz_font); |
1187 return true; | 1192 return true; |
1188 } | 1193 } |
1189 | 1194 |
1190 } // namespace gfx | 1195 } // namespace gfx |
OLD | NEW |