OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 Google Inc. All rights reserved. | 2 * Copyright (c) 2012 Google Inc. All rights reserved. |
3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. | 3 * Copyright (C) 2013 BlackBerry Limited. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
7 * met: | 7 * met: |
8 * | 8 * |
9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
65 template <typename T> | 65 template <typename T> |
66 class HarfBuzzScopedPtr { | 66 class HarfBuzzScopedPtr { |
67 STACK_ALLOCATED(); | 67 STACK_ALLOCATED(); |
68 WTF_MAKE_NONCOPYABLE(HarfBuzzScopedPtr); | 68 WTF_MAKE_NONCOPYABLE(HarfBuzzScopedPtr); |
69 | 69 |
70 public: | 70 public: |
71 typedef void (*DestroyFunction)(T*); | 71 typedef void (*DestroyFunction)(T*); |
72 | 72 |
73 HarfBuzzScopedPtr(T* ptr, DestroyFunction destroy) | 73 HarfBuzzScopedPtr(T* ptr, DestroyFunction destroy) |
74 : ptr_(ptr), destroy_(destroy) { | 74 : ptr_(ptr), destroy_(destroy) { |
75 ASSERT(destroy_); | 75 DCHECK(destroy_); |
76 } | 76 } |
77 ~HarfBuzzScopedPtr() { | 77 ~HarfBuzzScopedPtr() { |
78 if (ptr_) | 78 if (ptr_) |
79 (*destroy_)(ptr_); | 79 (*destroy_)(ptr_); |
80 } | 80 } |
81 | 81 |
82 T* Get() { return ptr_; } | 82 T* Get() { return ptr_; } |
83 void Set(T* ptr) { ptr_ = ptr; } | 83 void Set(T* ptr) { ptr_ = ptr; } |
84 | 84 |
85 private: | 85 private: |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 | 252 |
253 if (current_cluster_result == kShaped && !is_last_resort) { | 253 if (current_cluster_result == kShaped && !is_last_resort) { |
254 // Now it's clear that we need to continue processing. | 254 // Now it's clear that we need to continue processing. |
255 if (!font_cycle_queued) { | 255 if (!font_cycle_queued) { |
256 range_data->holes_queue.push_back( | 256 range_data->holes_queue.push_back( |
257 HolesQueueItem(kHolesQueueNextFont, 0, 0)); | 257 HolesQueueItem(kHolesQueueNextFont, 0, 0)); |
258 font_cycle_queued = true; | 258 font_cycle_queued = true; |
259 } | 259 } |
260 | 260 |
261 // Here we need to put character positions. | 261 // Here we need to put character positions. |
262 ASSERT(num_characters); | 262 DCHECK(num_characters); |
263 range_data->holes_queue.push_back( | 263 range_data->holes_queue.push_back( |
264 HolesQueueItem(kHolesQueueRange, start_index, num_characters)); | 264 HolesQueueItem(kHolesQueueRange, start_index, num_characters)); |
265 } | 265 } |
266 | 266 |
267 // If numCharacters is 0, that means we hit a NotDef before shaping the | 267 // If numCharacters is 0, that means we hit a NotDef before shaping the |
268 // whole grapheme. We do not append it here. For the next glyph we | 268 // whole grapheme. We do not append it here. For the next glyph we |
269 // encounter, atChange will be true, and the characters corresponding to | 269 // encounter, atChange will be true, and the characters corresponding to |
270 // the grapheme will be added to the TODO queue again, attempting to | 270 // the grapheme will be added to the TODO queue again, attempting to |
271 // shape the whole grapheme with the next font. | 271 // shape the whole grapheme with the next font. |
272 // When we're getting here with the last resort font, we have no other | 272 // When we're getting here with the last resort font, we have no other |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 return false; | 308 return false; |
309 | 309 |
310 hint.Clear(); | 310 hint.Clear(); |
311 | 311 |
312 size_t num_chars_added = 0; | 312 size_t num_chars_added = 0; |
313 for (auto it = holes_queue.begin(); it != holes_queue.end(); ++it) { | 313 for (auto it = holes_queue.begin(); it != holes_queue.end(); ++it) { |
314 if (it->action_ == kHolesQueueNextFont) | 314 if (it->action_ == kHolesQueueNextFont) |
315 break; | 315 break; |
316 | 316 |
317 UChar32 hint_char; | 317 UChar32 hint_char; |
318 RELEASE_ASSERT(it->start_index_ + it->num_characters_ <= text_length_); | 318 CHECK_LE((it->start_index_ + it->num_characters_), text_length_); |
319 UTF16TextIterator iterator(text_ + it->start_index_, it->num_characters_); | 319 UTF16TextIterator iterator(text_ + it->start_index_, it->num_characters_); |
320 while (iterator.Consume(hint_char)) { | 320 while (iterator.Consume(hint_char)) { |
321 hint.push_back(hint_char); | 321 hint.push_back(hint_char); |
322 num_chars_added++; | 322 num_chars_added++; |
323 iterator.Advance(); | 323 iterator.Advance(); |
324 } | 324 } |
325 } | 325 } |
326 return num_chars_added > 0; | 326 return num_chars_added > 0; |
327 } | 327 } |
328 | 328 |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 } | 713 } |
714 return result.Release(); | 714 return result.Release(); |
715 } | 715 } |
716 | 716 |
717 PassRefPtr<ShapeResult> HarfBuzzShaper::Shape(const Font* font, | 717 PassRefPtr<ShapeResult> HarfBuzzShaper::Shape(const Font* font, |
718 TextDirection direction) const { | 718 TextDirection direction) const { |
719 return Shape(font, direction, 0, text_length_); | 719 return Shape(font, direction, 0, text_length_); |
720 } | 720 } |
721 | 721 |
722 } // namespace blink | 722 } // namespace blink |
OLD | NEW |