OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "platform/fonts/shaping/ShapeResultBuffer.h" | 5 #include "platform/fonts/shaping/ShapeResultBuffer.h" |
6 | 6 |
7 #include "platform/fonts/CharacterRange.h" | 7 #include "platform/fonts/CharacterRange.h" |
8 #include "platform/fonts/GlyphBuffer.h" | 8 #include "platform/fonts/GlyphBuffer.h" |
9 #include "platform/fonts/SimpleFontData.h" | 9 #include "platform/fonts/SimpleFontData.h" |
10 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" | 10 #include "platform/fonts/shaping/ShapeResultInlineHeaders.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 advance += fillGlyphBufferForTextEmphasisRun( | 305 advance += fillGlyphBufferForTextEmphasisRun( |
306 glyphBuffer, wordResult->m_runs[i].get(), textRun, emphasisData, | 306 glyphBuffer, wordResult->m_runs[i].get(), textRun, emphasisData, |
307 advance, from, to, resolvedOffset); | 307 advance, from, to, resolvedOffset); |
308 } | 308 } |
309 wordOffset += wordResult->numCharacters() * (textRun.rtl() ? -1 : 1); | 309 wordOffset += wordResult->numCharacters() * (textRun.rtl() ? -1 : 1); |
310 } | 310 } |
311 | 311 |
312 return advance; | 312 return advance; |
313 } | 313 } |
314 | 314 |
| 315 // TODO(eae): This is a bit of a hack to allow reuse of the implementation |
| 316 // for both ShapeResultBuffer and single ShapeResult use cases. Ideally the |
| 317 // logic should move into ShapeResult itself and then the ShapeResultBuffer |
| 318 // implementation may wrap that. |
315 CharacterRange ShapeResultBuffer::getCharacterRange( | 319 CharacterRange ShapeResultBuffer::getCharacterRange( |
| 320 RefPtr<const ShapeResult> result, |
| 321 TextDirection direction, |
| 322 float totalWidth, |
| 323 unsigned from, |
| 324 unsigned to) { |
| 325 Vector<RefPtr<const ShapeResult>, 64> results; |
| 326 results.push_back(result); |
| 327 return getCharacterRangeInternal(results, direction, totalWidth, from, to); |
| 328 } |
| 329 |
| 330 CharacterRange ShapeResultBuffer::getCharacterRangeInternal( |
316 const Vector<RefPtr<const ShapeResult>, 64>& results, | 331 const Vector<RefPtr<const ShapeResult>, 64>& results, |
317 TextDirection direction, | 332 TextDirection direction, |
318 float totalWidth, | 333 float totalWidth, |
319 unsigned absoluteFrom, | 334 unsigned absoluteFrom, |
320 unsigned absoluteTo) { | 335 unsigned absoluteTo) { |
321 float currentX = 0; | 336 float currentX = 0; |
322 float fromX = 0; | 337 float fromX = 0; |
323 float toX = 0; | 338 float toX = 0; |
324 bool foundFromX = false; | 339 bool foundFromX = false; |
325 bool foundToX = false; | 340 bool foundToX = false; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 fromX = toX = 0; | 412 fromX = toX = 0; |
398 if (fromX < toX) | 413 if (fromX < toX) |
399 return CharacterRange(fromX, toX); | 414 return CharacterRange(fromX, toX); |
400 return CharacterRange(toX, fromX); | 415 return CharacterRange(toX, fromX); |
401 } | 416 } |
402 | 417 |
403 CharacterRange ShapeResultBuffer::getCharacterRange(TextDirection direction, | 418 CharacterRange ShapeResultBuffer::getCharacterRange(TextDirection direction, |
404 float totalWidth, | 419 float totalWidth, |
405 unsigned from, | 420 unsigned from, |
406 unsigned to) const { | 421 unsigned to) const { |
407 return getCharacterRange(m_results, direction, totalWidth, from, to); | 422 return getCharacterRangeInternal(m_results, direction, totalWidth, from, to); |
408 } | 423 } |
409 | 424 |
410 void ShapeResultBuffer::addRunInfoRanges(const ShapeResult::RunInfo& runInfo, | 425 void ShapeResultBuffer::addRunInfoRanges(const ShapeResult::RunInfo& runInfo, |
411 float offset, | 426 float offset, |
412 Vector<CharacterRange>& ranges) { | 427 Vector<CharacterRange>& ranges) { |
413 Vector<float> characterWidths(runInfo.m_numCharacters); | 428 Vector<float> characterWidths(runInfo.m_numCharacters); |
414 for (const auto& glyph : runInfo.m_glyphData) | 429 for (const auto& glyph : runInfo.m_glyphData) |
415 characterWidths[glyph.characterIndex] += glyph.advance; | 430 characterWidths[glyph.characterIndex] += glyph.advance; |
416 | 431 |
417 for (unsigned characterIndex = 0; characterIndex < runInfo.m_numCharacters; | 432 for (unsigned characterIndex = 0; characterIndex < runInfo.m_numCharacters; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 totalOffset += offsetForWord; | 493 totalOffset += offsetForWord; |
479 if (targetX >= 0 && targetX <= wordResult->width()) | 494 if (targetX >= 0 && targetX <= wordResult->width()) |
480 return totalOffset; | 495 return totalOffset; |
481 targetX -= wordResult->width(); | 496 targetX -= wordResult->width(); |
482 } | 497 } |
483 } | 498 } |
484 return totalOffset; | 499 return totalOffset; |
485 } | 500 } |
486 | 501 |
487 } // namespace blink | 502 } // namespace blink |
OLD | NEW |