OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ight reserved. |
4 * Copyright (C) 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2010 Google Inc. All rights reserved. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 for (size_t i = 0, size = wordMeasurements.size(); i < size && lastEndOf
fset < run->m_stop; ++i) { | 488 for (size_t i = 0, size = wordMeasurements.size(); i < size && lastEndOf
fset < run->m_stop; ++i) { |
489 const WordMeasurement& wordMeasurement = wordMeasurements[i]; | 489 const WordMeasurement& wordMeasurement = wordMeasurements[i]; |
490 if (wordMeasurement.width <=0 || wordMeasurement.startOffset == word
Measurement.endOffset) | 490 if (wordMeasurement.width <=0 || wordMeasurement.startOffset == word
Measurement.endOffset) |
491 continue; | 491 continue; |
492 if (wordMeasurement.renderer != renderer || wordMeasurement.startOff
set != lastEndOffset || wordMeasurement.endOffset > run->m_stop) | 492 if (wordMeasurement.renderer != renderer || wordMeasurement.startOff
set != lastEndOffset || wordMeasurement.endOffset > run->m_stop) |
493 continue; | 493 continue; |
494 | 494 |
495 lastEndOffset = wordMeasurement.endOffset; | 495 lastEndOffset = wordMeasurement.endOffset; |
496 if (kerningIsEnabled && lastEndOffset == run->m_stop) { | 496 if (kerningIsEnabled && lastEndOffset == run->m_stop) { |
497 int wordLength = lastEndOffset - wordMeasurement.startOffset; | 497 int wordLength = lastEndOffset - wordMeasurement.startOffset; |
498 measuredWidth += renderer->width(wordMeasurement.startOffset, wo
rdLength, xPos, lineInfo.isFirstLine()); | 498 measuredWidth += renderer->width(wordMeasurement.startOffset, wo
rdLength, xPos, run->direction(), lineInfo.isFirstLine()); |
499 if (i > 0 && wordLength == 1 && renderer->characterAt(wordMeasur
ement.startOffset) == ' ') | 499 if (i > 0 && wordLength == 1 && renderer->characterAt(wordMeasur
ement.startOffset) == ' ') |
500 measuredWidth += renderer->style()->wordSpacing(); | 500 measuredWidth += renderer->style()->wordSpacing(); |
501 } else | 501 } else |
502 measuredWidth += wordMeasurement.width; | 502 measuredWidth += wordMeasurement.width; |
503 if (!wordMeasurement.fallbackFonts.isEmpty()) { | 503 if (!wordMeasurement.fallbackFonts.isEmpty()) { |
504 HashSet<const SimpleFontData*>::const_iterator end = wordMeasure
ment.fallbackFonts.end(); | 504 HashSet<const SimpleFontData*>::const_iterator end = wordMeasure
ment.fallbackFonts.end(); |
505 for (HashSet<const SimpleFontData*>::const_iterator it = wordMea
surement.fallbackFonts.begin(); it != end; ++it) | 505 for (HashSet<const SimpleFontData*>::const_iterator it = wordMea
surement.fallbackFonts.begin(); it != end; ++it) |
506 fallbackFonts.add(*it); | 506 fallbackFonts.add(*it); |
507 } | 507 } |
508 } | 508 } |
509 if (measuredWidth && lastEndOffset != run->m_stop) { | 509 if (measuredWidth && lastEndOffset != run->m_stop) { |
510 // If we don't have enough cached data, we'll measure the run again. | 510 // If we don't have enough cached data, we'll measure the run again. |
511 measuredWidth = 0; | 511 measuredWidth = 0; |
512 fallbackFonts.clear(); | 512 fallbackFonts.clear(); |
513 } | 513 } |
514 } | 514 } |
515 | 515 |
516 if (!measuredWidth) | 516 if (!measuredWidth) |
517 measuredWidth = renderer->width(run->m_start, run->m_stop - run->m_start
, xPos, lineInfo.isFirstLine(), &fallbackFonts, &glyphOverflow); | 517 measuredWidth = renderer->width(run->m_start, run->m_stop - run->m_start
, xPos, run->direction(), lineInfo.isFirstLine(), &fallbackFonts, &glyphOverflow
); |
518 | 518 |
519 run->m_box->setLogicalWidth(measuredWidth + hyphenWidth); | 519 run->m_box->setLogicalWidth(measuredWidth + hyphenWidth); |
520 if (!fallbackFonts.isEmpty()) { | 520 if (!fallbackFonts.isEmpty()) { |
521 ASSERT(run->m_box->isText()); | 521 ASSERT(run->m_box->isText()); |
522 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.add(toInl
ineTextBox(run->m_box), make_pair(Vector<const SimpleFontData*>(), GlyphOverflow
())).iterator; | 522 GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.add(toInl
ineTextBox(run->m_box), make_pair(Vector<const SimpleFontData*>(), GlyphOverflow
())).iterator; |
523 ASSERT(it->value.first.isEmpty()); | 523 ASSERT(it->value.first.isEmpty()); |
524 copyToVector(fallbackFonts, it->value.first); | 524 copyToVector(fallbackFonts, it->value.first); |
525 run->m_box->parent()->clearDescendantsHaveSameLineHeightAndBaseline(); | 525 run->m_box->parent()->clearDescendantsHaveSameLineHeightAndBaseline(); |
526 } | 526 } |
527 if ((glyphOverflow.top || glyphOverflow.bottom || glyphOverflow.left || glyp
hOverflow.right)) { | 527 if ((glyphOverflow.top || glyphOverflow.bottom || glyphOverflow.left || glyp
hOverflow.right)) { |
(...skipping 1806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2334 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); | 2334 lineGridBox->alignBoxesInBlockDirection(logicalHeight(), textBoxDataMap, ver
ticalPositionCache); |
2335 | 2335 |
2336 setLineGridBox(lineGridBox); | 2336 setLineGridBox(lineGridBox); |
2337 | 2337 |
2338 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying | 2338 // FIXME: If any of the characteristics of the box change compared to the ol
d one, then we need to do a deep dirtying |
2339 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping | 2339 // (similar to what happens when the page height changes). Ideally, though,
we only do this if someone is actually snapping |
2340 // to this grid. | 2340 // to this grid. |
2341 } | 2341 } |
2342 | 2342 |
2343 } | 2343 } |
OLD | NEW |