OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2008 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 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 | 174 |
175 if (!theme().paint(*this, context, cullRect)) | 175 if (!theme().paint(*this, context, cullRect)) |
176 Widget::paint(context, cullRect); | 176 Widget::paint(context, cullRect); |
177 } | 177 } |
178 | 178 |
179 void Scrollbar::autoscrollTimerFired(Timer<Scrollbar>*) | 179 void Scrollbar::autoscrollTimerFired(Timer<Scrollbar>*) |
180 { | 180 { |
181 autoscrollPressedPart(theme().autoscrollTimerDelay()); | 181 autoscrollPressedPart(theme().autoscrollTimerDelay()); |
182 } | 182 } |
183 | 183 |
184 static bool thumbUnderMouse(Scrollbar& scrollbar) | 184 bool Scrollbar::thumbWillBeUnderMouse() const |
185 { | 185 { |
186 int thumbPos = scrollbar.theme().trackPosition(scrollbar) + scrollbar.theme(
).thumbPosition(scrollbar); | 186 int thumbPos = theme().trackPosition(*this) + theme().thumbPosition(*this, s
crollableAreaTargetPos()); |
187 int thumbLength = scrollbar.theme().thumbLength(scrollbar); | 187 int thumbLength = theme().thumbLength(*this); |
188 return scrollbar.pressedPos() >= thumbPos && scrollbar.pressedPos() < thumbP
os + thumbLength; | 188 return pressedPos() >= thumbPos && pressedPos() < thumbPos + thumbLength; |
189 } | 189 } |
190 | 190 |
191 void Scrollbar::autoscrollPressedPart(double delay) | 191 void Scrollbar::autoscrollPressedPart(double delay) |
192 { | 192 { |
193 // Don't do anything for the thumb or if nothing was pressed. | 193 // Don't do anything for the thumb or if nothing was pressed. |
194 if (m_pressedPart == ThumbPart || m_pressedPart == NoPart) | 194 if (m_pressedPart == ThumbPart || m_pressedPart == NoPart) |
195 return; | 195 return; |
196 | 196 |
197 // Handle the track. | 197 // Handle the track. |
198 if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) &&
thumbUnderMouse(*this)) { | 198 if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) &&
thumbWillBeUnderMouse()) { |
199 setHoveredPart(ThumbPart); | 199 setHoveredPart(ThumbPart); |
200 return; | 200 return; |
201 } | 201 } |
202 | 202 |
203 // Handle the arrows and track. | 203 // Handle the arrows and track. |
204 if (m_scrollableArea && m_scrollableArea->userScroll(pressedPartScrollDirect
ionPhysical(), pressedPartScrollGranularity()).didScroll) | 204 if (m_scrollableArea && m_scrollableArea->userScroll(pressedPartScrollDirect
ionPhysical(), pressedPartScrollGranularity()).didScroll) |
205 startTimerIfNeeded(delay); | 205 startTimerIfNeeded(delay); |
206 } | 206 } |
207 | 207 |
208 void Scrollbar::startTimerIfNeeded(double delay) | 208 void Scrollbar::startTimerIfNeeded(double delay) |
209 { | 209 { |
210 // Don't do anything for the thumb. | 210 // Don't do anything for the thumb. |
211 if (m_pressedPart == ThumbPart) | 211 if (m_pressedPart == ThumbPart) |
212 return; | 212 return; |
213 | 213 |
214 // Handle the track. We halt track scrolling once the thumb is level | 214 // Handle the track. We halt track scrolling once the thumb is level |
215 // with us. | 215 // with us. |
216 if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) &&
thumbUnderMouse(*this)) { | 216 if ((m_pressedPart == BackTrackPart || m_pressedPart == ForwardTrackPart) &&
thumbWillBeUnderMouse()) { |
217 setHoveredPart(ThumbPart); | 217 setHoveredPart(ThumbPart); |
218 return; | 218 return; |
219 } | 219 } |
220 | 220 |
221 // We can't scroll if we've hit the beginning or end. | 221 // We can't scroll if we've hit the beginning or end. |
222 ScrollDirectionPhysical dir = pressedPartScrollDirectionPhysical(); | 222 ScrollDirectionPhysical dir = pressedPartScrollDirectionPhysical(); |
223 if (dir == ScrollUp || dir == ScrollLeft) { | 223 if (dir == ScrollUp || dir == ScrollLeft) { |
224 if (m_currentPos == 0) | 224 if (m_currentPos == 0) |
225 return; | 225 return; |
226 } else { | 226 } else { |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 { | 555 { |
556 if (!m_scrollableArea) | 556 if (!m_scrollableArea) |
557 return 0; | 557 return 0; |
558 | 558 |
559 if (m_orientation == HorizontalScrollbar) | 559 if (m_orientation == HorizontalScrollbar) |
560 return m_scrollableArea->scrollPosition().x() - m_scrollableArea->minimu
mScrollPosition().x(); | 560 return m_scrollableArea->scrollPosition().x() - m_scrollableArea->minimu
mScrollPosition().x(); |
561 | 561 |
562 return m_scrollableArea->scrollPosition().y() - m_scrollableArea->minimumScr
ollPosition().y(); | 562 return m_scrollableArea->scrollPosition().y() - m_scrollableArea->minimumScr
ollPosition().y(); |
563 } | 563 } |
564 | 564 |
| 565 float Scrollbar::scrollableAreaTargetPos() const |
| 566 { |
| 567 if (!m_scrollableArea) |
| 568 return 0; |
| 569 |
| 570 if (m_orientation == HorizontalScrollbar) |
| 571 return m_scrollableArea->scrollAnimator().desiredTargetPosition().x() -
m_scrollableArea->minimumScrollPosition().x(); |
| 572 |
| 573 return m_scrollableArea->scrollAnimator().desiredTargetPosition().y() - m_sc
rollableArea->minimumScrollPosition().y(); |
| 574 } |
| 575 |
565 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) | 576 void Scrollbar::setNeedsPaintInvalidation(ScrollbarPart invalidParts) |
566 { | 577 { |
567 if (m_theme.shouldRepaintAllPartsOnInvalidation()) | 578 if (m_theme.shouldRepaintAllPartsOnInvalidation()) |
568 invalidParts = AllParts; | 579 invalidParts = AllParts; |
569 if (invalidParts & ~ThumbPart) | 580 if (invalidParts & ~ThumbPart) |
570 m_trackNeedsRepaint = true; | 581 m_trackNeedsRepaint = true; |
571 if (invalidParts & ThumbPart) | 582 if (invalidParts & ThumbPart) |
572 m_thumbNeedsRepaint = true; | 583 m_thumbNeedsRepaint = true; |
573 if (m_scrollableArea) | 584 if (m_scrollableArea) |
574 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); | 585 m_scrollableArea->setScrollbarNeedsPaintInvalidation(orientation()); |
575 } | 586 } |
576 | 587 |
577 } // namespace blink | 588 } // namespace blink |
OLD | NEW |