OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
563 return true; | 563 return true; |
564 | 564 |
565 for (AccessibilityObject* axParent = parentObject(); axParent; axParent = ax
Parent->parentObject()) { | 565 for (AccessibilityObject* axParent = parentObject(); axParent; axParent = ax
Parent->parentObject()) { |
566 if (axParent->supportsARIALiveRegion()) | 566 if (axParent->supportsARIALiveRegion()) |
567 return true; | 567 return true; |
568 } | 568 } |
569 | 569 |
570 return false; | 570 return false; |
571 } | 571 } |
572 | 572 |
| 573 void AccessibilityObject::markCachedElementRectDirty() const |
| 574 { |
| 575 for (unsigned i = 0; i < m_children.size(); ++i) |
| 576 m_children[i].get()->markCachedElementRectDirty(); |
| 577 } |
| 578 |
573 IntPoint AccessibilityObject::clickPoint() | 579 IntPoint AccessibilityObject::clickPoint() |
574 { | 580 { |
575 LayoutRect rect = elementRect(); | 581 LayoutRect rect = elementRect(); |
576 return roundedIntPoint(LayoutPoint(rect.x() + rect.width() / 2, rect.y() + r
ect.height() / 2)); | 582 return roundedIntPoint(LayoutPoint(rect.x() + rect.width() / 2, rect.y() + r
ect.height() / 2)); |
577 } | 583 } |
578 | 584 |
579 IntRect AccessibilityObject::boundingBoxForQuads(RenderObject* obj, const Vector
<FloatQuad>& quads) | 585 IntRect AccessibilityObject::boundingBoxForQuads(RenderObject* obj, const Vector
<FloatQuad>& quads) |
580 { | 586 { |
581 ASSERT(obj); | 587 ASSERT(obj); |
582 if (!obj) | 588 if (!obj) |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
780 if (Frame* f = actionElem->document()->frame()) | 786 if (Frame* f = actionElem->document()->frame()) |
781 f->loader()->resetMultipleFormSubmissionProtection(); | 787 f->loader()->resetMultipleFormSubmissionProtection(); |
782 | 788 |
783 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); | 789 UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); |
784 actionElem->accessKeyAction(true); | 790 actionElem->accessKeyAction(true); |
785 return true; | 791 return true; |
786 } | 792 } |
787 | 793 |
788 void AccessibilityObject::scrollToMakeVisible() const | 794 void AccessibilityObject::scrollToMakeVisible() const |
789 { | 795 { |
790 IntRect objectRect = pixelSnappedIntRect(boundingBoxRect()); | 796 IntRect objectRect = pixelSnappedIntRect(elementRect()); |
791 objectRect.setLocation(IntPoint()); | 797 objectRect.setLocation(IntPoint()); |
792 scrollToMakeVisibleWithSubFocus(objectRect); | 798 scrollToMakeVisibleWithSubFocus(objectRect); |
793 } | 799 } |
794 | 800 |
795 // This is a 1-dimensional scroll offset helper function that's applied | 801 // This is a 1-dimensional scroll offset helper function that's applied |
796 // separately in the horizontal and vertical directions, because the | 802 // separately in the horizontal and vertical directions, because the |
797 // logic is the same. The goal is to compute the best scroll offset | 803 // logic is the same. The goal is to compute the best scroll offset |
798 // in order to make an object visible within a viewport. | 804 // in order to make an object visible within a viewport. |
799 // | 805 // |
800 // In case the whole object cannot fit, you can specify a | 806 // In case the whole object cannot fit, you can specify a |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
868 { | 874 { |
869 // Search up the parent chain until we find the first one that's scrollable. | 875 // Search up the parent chain until we find the first one that's scrollable. |
870 AccessibilityObject* scrollParent = parentObject(); | 876 AccessibilityObject* scrollParent = parentObject(); |
871 ScrollableArea* scrollableArea; | 877 ScrollableArea* scrollableArea; |
872 for (scrollableArea = 0; | 878 for (scrollableArea = 0; |
873 scrollParent && !(scrollableArea = scrollParent->getScrollableAreaIfScr
ollable()); | 879 scrollParent && !(scrollableArea = scrollParent->getScrollableAreaIfScr
ollable()); |
874 scrollParent = scrollParent->parentObject()) { } | 880 scrollParent = scrollParent->parentObject()) { } |
875 if (!scrollableArea) | 881 if (!scrollableArea) |
876 return; | 882 return; |
877 | 883 |
878 LayoutRect objectRect = boundingBoxRect(); | 884 LayoutRect objectRect = elementRect(); |
879 IntPoint scrollPosition = scrollableArea->scrollPosition(); | 885 IntPoint scrollPosition = scrollableArea->scrollPosition(); |
880 IntRect scrollVisibleRect = scrollableArea->visibleContentRect(); | 886 IntRect scrollVisibleRect = scrollableArea->visibleContentRect(); |
881 | 887 |
882 int desiredX = computeBestScrollOffset( | 888 int desiredX = computeBestScrollOffset( |
883 scrollPosition.x(), | 889 scrollPosition.x(), |
884 objectRect.x() + subfocus.x(), objectRect.x() + subfocus.maxX(), | 890 objectRect.x() + subfocus.x(), objectRect.x() + subfocus.maxX(), |
885 objectRect.x(), objectRect.maxX(), | 891 objectRect.x(), objectRect.maxX(), |
886 0, scrollVisibleRect.width()); | 892 0, scrollVisibleRect.width()); |
887 int desiredY = computeBestScrollOffset( | 893 int desiredY = computeBestScrollOffset( |
888 scrollPosition.y(), | 894 scrollPosition.y(), |
(...skipping 24 matching lines...) Expand all Loading... |
913 // next innermost object to the given point. | 919 // next innermost object to the given point. |
914 int offsetX = 0, offsetY = 0; | 920 int offsetX = 0, offsetY = 0; |
915 IntPoint point = globalPoint; | 921 IntPoint point = globalPoint; |
916 size_t levels = objects.size() - 1; | 922 size_t levels = objects.size() - 1; |
917 for (size_t i = 0; i < levels; i++) { | 923 for (size_t i = 0; i < levels; i++) { |
918 const AccessibilityObject* outer = objects[i]; | 924 const AccessibilityObject* outer = objects[i]; |
919 const AccessibilityObject* inner = objects[i + 1]; | 925 const AccessibilityObject* inner = objects[i + 1]; |
920 | 926 |
921 ScrollableArea* scrollableArea = outer->getScrollableAreaIfScrollable(); | 927 ScrollableArea* scrollableArea = outer->getScrollableAreaIfScrollable(); |
922 | 928 |
923 LayoutRect innerRect = inner->isAccessibilityScrollView() ? inner->paren
tObject()->boundingBoxRect() : inner->boundingBoxRect(); | 929 LayoutRect innerRect = inner->isAccessibilityScrollView() ? inner->paren
tObject()->elementRect() : inner->elementRect(); |
924 LayoutRect objectRect = innerRect; | 930 LayoutRect objectRect = innerRect; |
925 IntPoint scrollPosition = scrollableArea->scrollPosition(); | 931 IntPoint scrollPosition = scrollableArea->scrollPosition(); |
926 | 932 |
927 // Convert the object rect into local coordinates. | 933 // Convert the object rect into local coordinates. |
928 objectRect.move(offsetX, offsetY); | 934 objectRect.move(offsetX, offsetY); |
929 if (!outer->isAccessibilityScrollView()) | 935 if (!outer->isAccessibilityScrollView()) |
930 objectRect.move(scrollPosition.x(), scrollPosition.y()); | 936 objectRect.move(scrollPosition.x(), scrollPosition.y()); |
931 | 937 |
932 int desiredX = computeBestScrollOffset( | 938 int desiredX = computeBestScrollOffset( |
933 0, | 939 0, |
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1315 | 1321 |
1316 for (AccessibilityObject* object = parentObject(); object; object = object->
parentObject()) { | 1322 for (AccessibilityObject* object = parentObject(); object; object = object->
parentObject()) { |
1317 if (equalIgnoringCase(object->getAttribute(aria_hiddenAttr), "true")) | 1323 if (equalIgnoringCase(object->getAttribute(aria_hiddenAttr), "true")) |
1318 return true; | 1324 return true; |
1319 } | 1325 } |
1320 | 1326 |
1321 return false; | 1327 return false; |
1322 } | 1328 } |
1323 | 1329 |
1324 } // namespace WebCore | 1330 } // namespace WebCore |
OLD | NEW |