OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. |
3 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 3 * 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * | 8 * |
9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 ASSERT(isHTMLSelectElement(element)); | 92 ASSERT(isHTMLSelectElement(element)); |
93 | 93 |
94 if (FrameView* frameView = frame()->view()) | 94 if (FrameView* frameView = frame()->view()) |
95 frameView->addScrollableArea(this); | 95 frameView->addScrollableArea(this); |
96 } | 96 } |
97 | 97 |
98 RenderListBox::~RenderListBox() | 98 RenderListBox::~RenderListBox() |
99 { | 99 { |
100 setHasVerticalScrollbar(false); | 100 setHasVerticalScrollbar(false); |
101 | 101 |
102 if (FrameView* frameView = frame()->view()) | 102 if (FrameView* frameView = frame()->view()) { |
103 frameView->removeScrollableArea(this); | 103 frameView->removeScrollableArea(this); |
| 104 frameView->removeAnimatingScrollableArea(this); |
| 105 } |
104 } | 106 } |
105 | 107 |
106 // FIXME: Instead of this hack we should add a ShadowRoot to <select> with no in
sertion point | 108 // FIXME: Instead of this hack we should add a ShadowRoot to <select> with no in
sertion point |
107 // to prevent children from rendering. | 109 // to prevent children from rendering. |
108 bool RenderListBox::isChildAllowed(RenderObject* object, RenderStyle*) const | 110 bool RenderListBox::isChildAllowed(RenderObject* object, RenderStyle*) const |
109 { | 111 { |
110 return object->isAnonymous() && !object->isRenderFullScreen(); | 112 return object->isAnonymous() && !object->isRenderFullScreen(); |
111 } | 113 } |
112 | 114 |
113 inline HTMLSelectElement* RenderListBox::selectElement() const | 115 inline HTMLSelectElement* RenderListBox::selectElement() const |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 LayoutUnit RenderListBox::scrollHeight() const | 704 LayoutUnit RenderListBox::scrollHeight() const |
703 { | 705 { |
704 return std::max(clientHeight(), listHeight()); | 706 return std::max(clientHeight(), listHeight()); |
705 } | 707 } |
706 | 708 |
707 LayoutUnit RenderListBox::scrollLeft() const | 709 LayoutUnit RenderListBox::scrollLeft() const |
708 { | 710 { |
709 return 0; | 711 return 0; |
710 } | 712 } |
711 | 713 |
712 void RenderListBox::setScrollLeft(LayoutUnit) | 714 void RenderListBox::setScrollLeft(LayoutUnit, ScrollBehavior) |
713 { | 715 { |
714 } | 716 } |
715 | 717 |
716 LayoutUnit RenderListBox::scrollTop() const | 718 LayoutUnit RenderListBox::scrollTop() const |
717 { | 719 { |
718 return m_indexOffset * itemHeight(); | 720 return m_indexOffset * itemHeight(); |
719 } | 721 } |
720 | 722 |
721 void RenderListBox::setScrollTop(LayoutUnit newTop) | 723 void RenderListBox::setScrollTop(LayoutUnit newTop, ScrollBehavior scrollBehavio
r) |
722 { | 724 { |
| 725 cancelProgrammaticScrollAnimation(); |
| 726 |
723 // Determine an index and scroll to it. | 727 // Determine an index and scroll to it. |
724 int index = newTop / itemHeight(); | 728 int index = newTop / itemHeight(); |
725 if (index < 0 || index >= numItems() || index == m_indexOffset) | 729 if (index < 0 || index >= numItems() || index == m_indexOffset) |
726 return; | 730 return; |
727 | 731 |
728 scrollToOffsetWithoutAnimation(VerticalScrollbar, index); | 732 if (scrollBehavior == ScrollBehaviorAuto) |
| 733 scrollBehavior = style()->scrollBehavior(); |
| 734 if (scrollBehavior == ScrollBehaviorSmooth) |
| 735 programmaticallyScrollSmoothlyToOffset(FloatPoint(0, index)); |
| 736 else |
| 737 scrollToOffsetWithoutAnimation(VerticalScrollbar, index); |
729 } | 738 } |
730 | 739 |
731 bool RenderListBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
sult, const HitTestLocation& locationInContainer, const LayoutPoint& accumulated
Offset, HitTestAction hitTestAction) | 740 bool RenderListBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
sult, const HitTestLocation& locationInContainer, const LayoutPoint& accumulated
Offset, HitTestAction hitTestAction) |
732 { | 741 { |
733 if (!RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, accu
mulatedOffset, hitTestAction)) | 742 if (!RenderBlockFlow::nodeAtPoint(request, result, locationInContainer, accu
mulatedOffset, hitTestAction)) |
734 return false; | 743 return false; |
735 const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select
Element()->listItems(); | 744 const WillBeHeapVector<RawPtrWillBeMember<HTMLElement> >& listItems = select
Element()->listItems(); |
736 int size = numItems(); | 745 int size = numItems(); |
737 LayoutPoint adjustedLocation = accumulatedOffset + location(); | 746 LayoutPoint adjustedLocation = accumulatedOffset + location(); |
738 | 747 |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
878 } | 887 } |
879 | 888 |
880 bool RenderListBox::scrollbarsCanBeActive() const | 889 bool RenderListBox::scrollbarsCanBeActive() const |
881 { | 890 { |
882 RenderView* view = this->view(); | 891 RenderView* view = this->view(); |
883 if (!view) | 892 if (!view) |
884 return false; | 893 return false; |
885 return view->frameView()->scrollbarsCanBeActive(); | 894 return view->frameView()->scrollbarsCanBeActive(); |
886 } | 895 } |
887 | 896 |
| 897 void RenderListBox::registerForAnimation() |
| 898 { |
| 899 frameView()->addAnimatingScrollableArea(this); |
| 900 } |
| 901 |
| 902 void RenderListBox::deregisterForAnimation() |
| 903 { |
| 904 if (FrameView* frameView = this->frameView()) |
| 905 frameView->removeAnimatingScrollableArea(this); |
| 906 } |
| 907 |
| 908 bool RenderListBox::scheduleAnimation() |
| 909 { |
| 910 return frameView()->scheduleAnimation(); |
| 911 } |
| 912 |
888 IntPoint RenderListBox::minimumScrollPosition() const | 913 IntPoint RenderListBox::minimumScrollPosition() const |
889 { | 914 { |
890 return IntPoint(); | 915 return IntPoint(); |
891 } | 916 } |
892 | 917 |
893 IntPoint RenderListBox::maximumScrollPosition() const | 918 IntPoint RenderListBox::maximumScrollPosition() const |
894 { | 919 { |
895 return IntPoint(0, std::max(numItems() - numVisibleItems(), 0)); | 920 return IntPoint(0, std::max(numItems() - numVisibleItems(), 0)); |
896 } | 921 } |
897 | 922 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1018 { | 1043 { |
1019 return itemBoundingBoxRectInternal(point, listIndexToRenderListBoxIndex(inde
x)); | 1044 return itemBoundingBoxRectInternal(point, listIndexToRenderListBoxIndex(inde
x)); |
1020 } | 1045 } |
1021 | 1046 |
1022 bool RenderListBox::scrollToRevealElementAtListIndex(int index) | 1047 bool RenderListBox::scrollToRevealElementAtListIndex(int index) |
1023 { | 1048 { |
1024 return scrollToRevealElementAtListIndexInternal(listIndexToRenderListBoxInde
x(index)); | 1049 return scrollToRevealElementAtListIndexInternal(listIndexToRenderListBoxInde
x(index)); |
1025 } | 1050 } |
1026 | 1051 |
1027 } // namespace WebCore | 1052 } // namespace WebCore |
OLD | NEW |