Changeset 76768 in webkit
- Timestamp:
- Jan 27, 2011 12:23:31 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r76764 r76768 1 2011-01-27 Dan Bernstein <mitz@apple.com> 2 3 Reviewed by Sam Weinig. 4 5 REGRESSION (r76743): Uneven spacing in right-to-left justified text 6 https://bugs.webkit.org/show_bug.cgi?id=53225 7 8 Fixes failure in fast/text/atsui-spacing-features.html 9 10 There was an inconsistency between rendering code and font code in the interpretation of 11 'after expansion' and 'trailing expansion'. Changed all code to interpret these in terms of 12 visual order rather than logical. 13 14 * platform/graphics/Font.cpp: 15 (WebCore::Font::expansionOpportunityCount): Added a text direction parameter and changed to 16 iterate in visual order accordingly. 17 * platform/graphics/Font.h: 18 * platform/graphics/WidthIterator.cpp: 19 (WebCore::WidthIterator::WidthIterator): Pass the run direction to expansionOpportunityCount(). 20 (WebCore::WidthIterator::advance): For right-to-left runs, evaluate the trailing expansion 21 condition with respect to the first character, which is the trailing character in visual order. 22 * platform/graphics/mac/ComplexTextController.cpp: 23 (WebCore::ComplexTextController::ComplexTextController): Pass the run direction to 24 expansionOpportunityCount(). 25 * rendering/RenderBlockLineLayout.cpp: 26 (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Ditto. 27 1 28 2011-01-26 Adam Roben <aroben@apple.com> 2 29 -
trunk/Source/WebCore/platform/graphics/Font.cpp
r76743 r76768 459 459 } 460 460 461 unsigned Font::expansionOpportunityCount(const UChar* characters, size_t length, bool& isAfterExpansion)461 unsigned Font::expansionOpportunityCount(const UChar* characters, size_t length, TextDirection direction, bool& isAfterExpansion) 462 462 { 463 463 static bool expandAroundIdeographs = canExpandAroundIdeographsInComplexText(); 464 464 unsigned count = 0; 465 for (size_t i = 0; i < length; ++i) { 466 UChar32 character = characters[i]; 467 if (treatAsSpace(character)) { 468 count++; 469 isAfterExpansion = true; 470 continue; 465 if (direction == LTR) { 466 for (size_t i = 0; i < length; ++i) { 467 UChar32 character = characters[i]; 468 if (treatAsSpace(character)) { 469 count++; 470 isAfterExpansion = true; 471 continue; 472 } 473 if (U16_IS_LEAD(character) && i + 1 < length && U16_IS_TRAIL(characters[i + 1])) { 474 character = U16_GET_SUPPLEMENTARY(character, characters[i + 1]); 475 i++; 476 } 477 if (expandAroundIdeographs && isCJKIdeograph(character)) { 478 if (!isAfterExpansion) 479 count++; 480 count++; 481 isAfterExpansion = true; 482 continue; 483 } 484 isAfterExpansion = false; 471 485 } 472 if (U16_IS_LEAD(character) && i + 1 < length && U16_IS_TRAIL(characters[i + 1])) { 473 character = U16_GET_SUPPLEMENTARY(character, characters[i + 1]); 474 i++; 486 } else { 487 for (size_t i = length; i > 0; --i) { 488 UChar32 character = characters[i - 1]; 489 if (treatAsSpace(character)) { 490 count++; 491 isAfterExpansion = true; 492 continue; 493 } 494 if (U16_IS_TRAIL(character) && i > 1 && U16_IS_LEAD(characters[i - 2])) { 495 character = U16_GET_SUPPLEMENTARY(characters[i - 2], character); 496 i--; 497 } 498 if (expandAroundIdeographs && isCJKIdeograph(character)) { 499 if (!isAfterExpansion) 500 count++; 501 count++; 502 isAfterExpansion = true; 503 continue; 504 } 505 isAfterExpansion = false; 475 506 } 476 if (expandAroundIdeographs && isCJKIdeograph(character)) {477 if (!isAfterExpansion)478 count++;479 count++;480 isAfterExpansion = true;481 continue;482 }483 isAfterExpansion = false;484 507 } 485 508 return count; -
trunk/Source/WebCore/platform/graphics/Font.h
r76743 r76768 30 30 #include "FontFallbackList.h" 31 31 #include "SimpleFontData.h" 32 #include "TextDirection.h" 32 33 #include "TypesettingFeatures.h" 33 34 #include <wtf/HashMap.h> … … 144 145 static bool isCJKIdeographOrSymbol(UChar32); 145 146 146 static unsigned expansionOpportunityCount(const UChar*, size_t length, bool& isAfterExpansion);147 static unsigned expansionOpportunityCount(const UChar*, size_t length, TextDirection, bool& isAfterExpansion); 147 148 148 149 #if PLATFORM(QT) -
trunk/Source/WebCore/platform/graphics/WidthIterator.cpp
r76743 r76768 65 65 else { 66 66 bool isAfterExpansion = true; 67 unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, isAfterExpansion);67 unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, m_run.ltr() ? LTR : RTL, isAfterExpansion); 68 68 if (isAfterExpansion && !m_run.allowsTrailingExpansion()) 69 69 expansionOpportunityCount--; … … 178 178 if (treatAsSpace || (expandAroundIdeographs && Font::isCJKIdeograph(c))) { 179 179 // Distribute the run's total expansion evenly over all expansion opportunities in the run. 180 if (m_expansion && (m_run.allowsTrailingExpansion() || currentCharacter + clusterLength < static_cast<size_t>(m_run.length()))) { 180 if (m_expansion && (m_run.allowsTrailingExpansion() || (m_run.ltr() && currentCharacter + clusterLength < static_cast<size_t>(m_run.length())) 181 || (m_run.rtl() && currentCharacter))) { 181 182 float previousExpansion = m_expansion; 182 183 if (!treatAsSpace && !m_isAfterExpansion) { -
trunk/Source/WebCore/platform/graphics/mac/ComplexTextController.cpp
r76743 r76768 85 85 else { 86 86 bool isAfterExpansion = true; 87 unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, isAfterExpansion);87 unsigned expansionOpportunityCount = Font::expansionOpportunityCount(m_run.characters(), m_end, m_run.ltr() ? LTR : RTL, isAfterExpansion); 88 88 if (isAfterExpansion && !m_run.allowsTrailingExpansion()) 89 89 expansionOpportunityCount--; -
trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp
r76743 r76768 325 325 326 326 if (textAlign == JUSTIFY && r != trailingSpaceRun) { 327 unsigned opportunitiesInRun = Font::expansionOpportunityCount(rt->characters() + r->m_start, r->m_stop - r->m_start, isAfterExpansion);327 unsigned opportunitiesInRun = Font::expansionOpportunityCount(rt->characters() + r->m_start, r->m_stop - r->m_start, r->m_box->direction(), isAfterExpansion); 328 328 expansionOpportunities.append(opportunitiesInRun); 329 329 expansionOpportunityCount += opportunitiesInRun;
Note: See TracChangeset
for help on using the changeset viewer.