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 16 matching lines...) Expand all Loading... |
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 */ | 30 */ |
31 | 31 |
32 #include "platform/fonts/shaping/ShapeResult.h" | 32 #include "platform/fonts/shaping/ShapeResult.h" |
33 | 33 |
34 #include "platform/fonts/Font.h" | 34 #include "platform/fonts/Font.h" |
35 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" | 35 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" |
36 #include "platform/fonts/shaping/ShapeResultSpacing.h" | 36 #include "platform/fonts/shaping/ShapeResultSpacing.h" |
37 #include "wtf/PtrUtil.h" | |
38 #include <hb.h> | 37 #include <hb.h> |
39 #include <memory> | |
40 | 38 |
41 namespace blink { | 39 namespace blink { |
42 | 40 |
43 float ShapeResult::RunInfo::xPositionForVisualOffset(unsigned offset, AdjustMidC
luster adjustMidCluster) const | 41 float ShapeResult::RunInfo::xPositionForVisualOffset(unsigned offset, AdjustMidC
luster adjustMidCluster) const |
44 { | 42 { |
45 ASSERT(offset < m_numCharacters); | 43 ASSERT(offset < m_numCharacters); |
46 if (rtl()) | 44 if (rtl()) |
47 offset = m_numCharacters - offset - 1; | 45 offset = m_numCharacters - offset - 1; |
48 return xPositionForOffset(offset, adjustMidCluster); | 46 return xPositionForOffset(offset, adjustMidCluster); |
49 } | 47 } |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 : m_width(other.m_width) | 147 : m_width(other.m_width) |
150 , m_glyphBoundingBox(other.m_glyphBoundingBox) | 148 , m_glyphBoundingBox(other.m_glyphBoundingBox) |
151 , m_primaryFont(other.m_primaryFont) | 149 , m_primaryFont(other.m_primaryFont) |
152 , m_numCharacters(other.m_numCharacters) | 150 , m_numCharacters(other.m_numCharacters) |
153 , m_numGlyphs(other.m_numGlyphs) | 151 , m_numGlyphs(other.m_numGlyphs) |
154 , m_direction(other.m_direction) | 152 , m_direction(other.m_direction) |
155 , m_hasVerticalOffsets(other.m_hasVerticalOffsets) | 153 , m_hasVerticalOffsets(other.m_hasVerticalOffsets) |
156 { | 154 { |
157 m_runs.reserveCapacity(other.m_runs.size()); | 155 m_runs.reserveCapacity(other.m_runs.size()); |
158 for (const auto& run : other.m_runs) | 156 for (const auto& run : other.m_runs) |
159 m_runs.append(wrapUnique(new ShapeResult::RunInfo(*run))); | 157 m_runs.append(adoptPtr(new ShapeResult::RunInfo(*run))); |
160 } | 158 } |
161 | 159 |
162 ShapeResult::~ShapeResult() | 160 ShapeResult::~ShapeResult() |
163 { | 161 { |
164 } | 162 } |
165 | 163 |
166 size_t ShapeResult::byteSize() const | 164 size_t ShapeResult::byteSize() const |
167 { | 165 { |
168 size_t selfByteSize = sizeof(this); | 166 size_t selfByteSize = sizeof(this); |
169 for (unsigned i = 0; i < m_runs.size(); ++i) { | 167 for (unsigned i = 0; i < m_runs.size(); ++i) { |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 RefPtr<ShapeResult> result = ShapeResult::create(*this); | 271 RefPtr<ShapeResult> result = ShapeResult::create(*this); |
274 result->applySpacing(spacing, run); | 272 result->applySpacing(spacing, run); |
275 return result.release(); | 273 return result.release(); |
276 } | 274 } |
277 | 275 |
278 static inline float harfBuzzPositionToFloat(hb_position_t value) | 276 static inline float harfBuzzPositionToFloat(hb_position_t value) |
279 { | 277 { |
280 return static_cast<float>(value) / (1 << 16); | 278 return static_cast<float>(value) / (1 << 16); |
281 } | 279 } |
282 | 280 |
283 void ShapeResult::insertRun(std::unique_ptr<ShapeResult::RunInfo> runToInsert, | 281 void ShapeResult::insertRun(PassOwnPtr<ShapeResult::RunInfo> runToInsert, |
284 unsigned startGlyph, unsigned numGlyphs, hb_buffer_t* harfBuzzBuffer) | 282 unsigned startGlyph, unsigned numGlyphs, hb_buffer_t* harfBuzzBuffer) |
285 { | 283 { |
286 ASSERT(numGlyphs > 0); | 284 ASSERT(numGlyphs > 0); |
287 std::unique_ptr<ShapeResult::RunInfo> run(std::move(runToInsert)); | 285 OwnPtr<ShapeResult::RunInfo> run(std::move(runToInsert)); |
288 ASSERT(numGlyphs == run->m_glyphData.size()); | 286 ASSERT(numGlyphs == run->m_glyphData.size()); |
289 | 287 |
290 const SimpleFontData* currentFontData = run->m_fontData.get(); | 288 const SimpleFontData* currentFontData = run->m_fontData.get(); |
291 const hb_glyph_info_t* glyphInfos = | 289 const hb_glyph_info_t* glyphInfos = |
292 hb_buffer_get_glyph_infos(harfBuzzBuffer, 0); | 290 hb_buffer_get_glyph_infos(harfBuzzBuffer, 0); |
293 const hb_glyph_position_t* glyphPositions = | 291 const hb_glyph_position_t* glyphPositions = |
294 hb_buffer_get_glyph_positions(harfBuzzBuffer, 0); | 292 hb_buffer_get_glyph_positions(harfBuzzBuffer, 0); |
295 const unsigned startCluster = | 293 const unsigned startCluster = |
296 HB_DIRECTION_IS_FORWARD(hb_buffer_get_direction(harfBuzzBuffer)) | 294 HB_DIRECTION_IS_FORWARD(hb_buffer_get_direction(harfBuzzBuffer)) |
297 ? glyphInfos[startGlyph].cluster | 295 ? glyphInfos[startGlyph].cluster |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 break; | 348 break; |
351 } | 349 } |
352 } | 350 } |
353 } | 351 } |
354 // If we didn't find an existing slot to place it, append. | 352 // If we didn't find an existing slot to place it, append. |
355 if (run) | 353 if (run) |
356 m_runs.append(std::move(run)); | 354 m_runs.append(std::move(run)); |
357 } | 355 } |
358 | 356 |
359 } // namespace blink | 357 } // namespace blink |
OLD | NEW |