Changeset 152561 in webkit
- Timestamp:
- Jul 11, 2013, 1:36:15 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r152554 r152561 1 2013-07-11 Mario Sanchez Prada <mario.prada@samsung.com> 2 3 [ATK] Refactor code for translating offsets between WebCore a11y and ATK 4 https://bugs.webkit.org/show_bug.cgi?id=118179 5 6 Reviewed by Chris Fleizach. 7 8 Encapsulate better and make more clear the translation of offsets 9 between our ATK implementation and WebCore's accessibility layer. 10 11 Values for offsets can differ sometimes between those two worlds 12 due to some extra flattening we need to do in ATK based ports to 13 properly expose the accessibility hierarchy to ATs, which 14 sometimes means adding extra text elements in the exposed text 15 through the AtkText interface (e.g. list items markers). 16 17 * accessibility/atk/WebKitAccessibleInterfaceText.cpp: 18 (offsetAdjustmentForListItem): Helper function to refactor code 19 needed to translate offsets from WebCore to ATK worlds. Currently 20 related to considering list item markers in LTR text only. 21 (webCoreOffsetToAtkOffset): Convenience function for code 22 readability purposes. It just calls offsetAdjustmentForListItem. 23 (atkOffsetToWebCoreOffset): Likewise. 24 (getSelectionOffsetsForObject): Use webCoreOffsetToAtkOffset. 25 (webkitAccessibleTextGetCaretOffset): Use webCoreOffsetToAtkOffset 26 to translate an offset from WebCore to ATK before returning it. 27 (webkitAccessibleTextSetSelection): Use atkOffsetToWebCoreOffset 28 to translate an offset from WebCore to ATK before using it. 29 (webkitAccessibleTextSetCaretOffset): Likewise. 30 1 31 2013-07-10 Sam Weinig <sam@webkit.org> 2 32 -
trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceText.cpp
r152537 r152561 473 473 } 474 474 475 static int offsetAdjustmentForListItem(const AccessibilityObject* object) 476 { 477 // We need to adjust the offsets for the list item marker in 478 // Left-To-Right text, since we expose it together with the text. 479 RenderObject* renderer = object->renderer(); 480 if (renderer && renderer->isListItem() && renderer->style()->direction() == LTR) 481 return toRenderListItem(renderer)->markerTextWithSuffix().length(); 482 483 return 0; 484 } 485 486 static int webCoreOffsetToAtkOffset(const AccessibilityObject* object, int offset) 487 { 488 if (!object->isListItem()) 489 return offset; 490 491 return offset + offsetAdjustmentForListItem(object); 492 } 493 494 static int atkOffsetToWebCoreOffset(AtkText* text, int offset) 495 { 496 AccessibilityObject* coreObject = core(text); 497 if (!coreObject || !coreObject->isListItem()) 498 return offset; 499 500 return offset - offsetAdjustmentForListItem(coreObject); 501 } 502 475 503 static void getSelectionOffsetsForObject(AccessibilityObject* coreObject, VisibleSelection& selection, gint& startOffset, gint& endOffset) 476 504 { … … 514 542 RefPtr<Range> rangeInParent = Range::create(node->document(), parentFirstPosition, nodeRangeStart); 515 543 544 516 545 // Set values for start and end offsets. 517 startOffset = TextIterator::rangeLength(rangeInParent.get(), true); 518 519 // We need to adjust the offsets for the list item marker. 520 RenderObject* renderer = coreObject->renderer(); 521 if (renderer && renderer->isListItem()) { 522 String markerText = toRenderListItem(renderer)->markerTextWithSuffix(); 523 startOffset += markerText.length(); 524 } 546 startOffset = webCoreOffsetToAtkOffset(coreObject, TextIterator::rangeLength(rangeInParent.get(), true)); 525 547 526 548 RefPtr<Range> nodeRange = Range::create(node->document(), nodeRangeStart, nodeRangeEnd); … … 681 703 return 0; 682 704 683 RenderObject* renderer = coreObject->renderer(); 684 if (renderer && renderer->isListItem()) { 685 String markerText = toRenderListItem(renderer)->markerTextWithSuffix(); 686 687 // We need to adjust the offset for the list item marker. 688 offset += markerText.length(); 689 } 690 691 // TODO: Verify this for RTL text. 692 return offset; 705 return webCoreOffsetToAtkOffset(coreObject, offset); 693 706 } 694 707 … … 822 835 823 836 // We need to adjust the offsets for the list item marker. 824 RenderObject* renderer = coreObject->renderer(); 825 if (renderer && renderer->isListItem()) { 826 String markerText = toRenderListItem(renderer)->markerTextWithSuffix(); 827 int markerLength = markerText.length(); 828 if (startOffset < markerLength || endOffset < markerLength) 837 int offsetAdjustment = offsetAdjustmentForListItem(coreObject); 838 if (offsetAdjustment) { 839 if (startOffset < offsetAdjustment || endOffset < offsetAdjustment) 829 840 return FALSE; 830 841 831 startOffset -= markerLength;832 endOffset -= markerLength;842 startOffset = atkOffsetToWebCoreOffset(text, startOffset); 843 endOffset = atkOffsetToWebCoreOffset(text, endOffset); 833 844 } 834 845 … … 865 876 return FALSE; 866 877 867 RenderObject* renderer = coreObject->renderer(); 868 if (renderer && renderer->isListItem()) { 869 String markerText = toRenderListItem(renderer)->markerTextWithSuffix(); 870 int markerLength = markerText.length(); 871 if (offset < markerLength) 878 // We need to adjust the offsets for the list item marker. 879 int offsetAdjustment = offsetAdjustmentForListItem(coreObject); 880 if (offsetAdjustment) { 881 if (offset < offsetAdjustment) 872 882 return FALSE; 873 883 874 // We need to adjust the offset for list items. 875 offset -= markerLength; 884 offset = atkOffsetToWebCoreOffset(text, offset); 876 885 } 877 886
Note:
See TracChangeset
for help on using the changeset viewer.