| 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 Widget::setFrameRect(IntRect(0, 0, thickness, thickness)); | 94 Widget::setFrameRect(IntRect(0, 0, thickness, thickness)); |
| 95 } | 95 } |
| 96 | 96 |
| 97 Scrollbar::~Scrollbar() | 97 Scrollbar::~Scrollbar() |
| 98 { | 98 { |
| 99 stopTimerIfNeeded(); | 99 stopTimerIfNeeded(); |
| 100 | 100 |
| 101 m_theme->unregisterScrollbar(this); | 101 m_theme->unregisterScrollbar(this); |
| 102 } | 102 } |
| 103 | 103 |
| 104 bool Scrollbar::setValue(int v) | 104 bool Scrollbar::setValue(int v, ScrollSource source) |
| 105 { | 105 { |
| 106 v = max(min(v, m_totalSize - m_visibleSize), 0); | 106 v = max(min(v, m_totalSize - m_visibleSize), 0); |
| 107 if (value() == v) | 107 if (value() == v) |
| 108 return false; // Our value stayed the same. | 108 return false; // Our value stayed the same. |
| 109 setCurrentPos(v); | 109 setCurrentPos(v, source); |
| 110 return true; | 110 return true; |
| 111 } | 111 } |
| 112 | 112 |
| 113 void Scrollbar::setProportion(int visibleSize, int totalSize) | 113 void Scrollbar::setProportion(int visibleSize, int totalSize) |
| 114 { | 114 { |
| 115 if (visibleSize == m_visibleSize && totalSize == m_totalSize) | 115 if (visibleSize == m_visibleSize && totalSize == m_totalSize) |
| 116 return; | 116 return; |
| 117 | 117 |
| 118 m_visibleSize = visibleSize; | 118 m_visibleSize = visibleSize; |
| 119 m_totalSize = totalSize; | 119 m_totalSize = totalSize; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 147 return false; | 147 return false; |
| 148 float step = 0; | 148 float step = 0; |
| 149 switch (granularity) { | 149 switch (granularity) { |
| 150 case ScrollByLine: step = m_lineStep; break; | 150 case ScrollByLine: step = m_lineStep; break; |
| 151 case ScrollByPage: step = m_pageStep; break; | 151 case ScrollByPage: step = m_pageStep; break; |
| 152 case ScrollByDocument: step = m_totalSize; break; | 152 case ScrollByDocument: step = m_totalSize; break; |
| 153 case ScrollByPixel: step = m_pixelStep; break; | 153 case ScrollByPixel: step = m_pixelStep; break; |
| 154 } | 154 } |
| 155 if (direction == ScrollUp || direction == ScrollLeft) | 155 if (direction == ScrollUp || direction == ScrollLeft) |
| 156 multiplier = -multiplier; | 156 multiplier = -multiplier; |
| 157 if (client()) |
| 158 return client()->scroll(m_orientation, granularity, step, multiplier); |
| 157 | 159 |
| 158 return setCurrentPos(max(min(m_currentPos + (step * multiplier), static_cast
<float>(m_totalSize - m_visibleSize)), 0.0f)); | 160 return setCurrentPos(max(min(m_currentPos + (step * multiplier), static_cast
<float>(m_totalSize - m_visibleSize)), 0.0f), NotFromScrollAnimator); |
| 159 } | 161 } |
| 160 | 162 |
| 161 void Scrollbar::updateThumb() | 163 void Scrollbar::updateThumb() |
| 162 { | 164 { |
| 163 #ifdef THUMB_POSITION_AFFECTS_BUTTONS | 165 #ifdef THUMB_POSITION_AFFECTS_BUTTONS |
| 164 invalidate(); | 166 invalidate(); |
| 165 #else | 167 #else |
| 166 theme()->invalidateParts(this, ForwardTrackPart | BackTrackPart | ThumbPart)
; | 168 theme()->invalidateParts(this, ForwardTrackPart | BackTrackPart | ThumbPart)
; |
| 167 #endif | 169 #endif |
| 168 } | 170 } |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 int thumbPos = theme()->thumbPosition(this); | 282 int thumbPos = theme()->thumbPosition(this); |
| 281 int thumbLen = theme()->thumbLength(this); | 283 int thumbLen = theme()->thumbLength(this); |
| 282 int trackLen = theme()->trackLength(this); | 284 int trackLen = theme()->trackLength(this); |
| 283 int maxPos = trackLen - thumbLen; | 285 int maxPos = trackLen - thumbLen; |
| 284 int delta = pos - m_pressedPos; | 286 int delta = pos - m_pressedPos; |
| 285 if (delta > 0) | 287 if (delta > 0) |
| 286 delta = min(maxPos - thumbPos, delta); | 288 delta = min(maxPos - thumbPos, delta); |
| 287 else if (delta < 0) | 289 else if (delta < 0) |
| 288 delta = max(-thumbPos, delta); | 290 delta = max(-thumbPos, delta); |
| 289 if (delta) | 291 if (delta) |
| 290 setCurrentPos(static_cast<float>(thumbPos + delta) * maximum() / (trackL
en - thumbLen)); | 292 setCurrentPos(static_cast<float>(thumbPos + delta) * maximum() / (trackL
en - thumbLen), NotFromScrollAnimator); |
| 291 } | 293 } |
| 292 | 294 |
| 293 bool Scrollbar::setCurrentPos(float pos) | 295 bool Scrollbar::setCurrentPos(float pos, ScrollSource source) |
| 294 { | 296 { |
| 297 if ((source != FromScrollAnimator) && client()) |
| 298 client()->setScrollPositionAndStopAnimation(m_orientation, pos); |
| 299 |
| 295 if (pos == m_currentPos) | 300 if (pos == m_currentPos) |
| 296 return false; | 301 return false; |
| 297 | 302 |
| 298 int oldValue = value(); | 303 int oldValue = value(); |
| 299 int oldThumbPos = theme()->thumbPosition(this); | 304 int oldThumbPos = theme()->thumbPosition(this); |
| 300 m_currentPos = pos; | 305 m_currentPos = pos; |
| 301 updateThumbPosition(); | 306 updateThumbPosition(); |
| 302 if (m_pressedPart == ThumbPart) | 307 if (m_pressedPart == ThumbPart) |
| 303 setPressedPos(m_pressedPos + theme()->thumbPosition(this) - oldThumbPos)
; | 308 setPressedPos(m_pressedPos + theme()->thumbPosition(this) - oldThumbPos)
; |
| 304 | 309 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 329 if (m_pressedPart != NoPart) | 334 if (m_pressedPart != NoPart) |
| 330 theme()->invalidatePart(this, m_pressedPart); | 335 theme()->invalidatePart(this, m_pressedPart); |
| 331 else if (m_hoveredPart != NoPart) // When we no longer have a pressed part,
we can start drawing a hovered state on the hovered part. | 336 else if (m_hoveredPart != NoPart) // When we no longer have a pressed part,
we can start drawing a hovered state on the hovered part. |
| 332 theme()->invalidatePart(this, m_hoveredPart); | 337 theme()->invalidatePart(this, m_hoveredPart); |
| 333 } | 338 } |
| 334 | 339 |
| 335 bool Scrollbar::mouseMoved(const PlatformMouseEvent& evt) | 340 bool Scrollbar::mouseMoved(const PlatformMouseEvent& evt) |
| 336 { | 341 { |
| 337 if (m_pressedPart == ThumbPart) { | 342 if (m_pressedPart == ThumbPart) { |
| 338 if (theme()->shouldSnapBackToDragOrigin(this, evt)) | 343 if (theme()->shouldSnapBackToDragOrigin(this, evt)) |
| 339 setCurrentPos(m_dragOrigin); | 344 setCurrentPos(m_dragOrigin, NotFromScrollAnimator); |
| 340 else { | 345 else { |
| 341 moveThumb(m_orientation == HorizontalScrollbar ? | 346 moveThumb(m_orientation == HorizontalScrollbar ? |
| 342 convertFromContainingWindow(evt.pos()).x() : | 347 convertFromContainingWindow(evt.pos()).x() : |
| 343 convertFromContainingWindow(evt.pos()).y()); | 348 convertFromContainingWindow(evt.pos()).y()); |
| 344 } | 349 } |
| 345 return true; | 350 return true; |
| 346 } | 351 } |
| 347 | 352 |
| 348 if (m_pressedPart != NoPart) | 353 if (m_pressedPart != NoPart) |
| 349 m_pressedPos = (orientation() == HorizontalScrollbar ? convertFromContai
ningWindow(evt.pos()).x() : convertFromContainingWindow(evt.pos()).y()); | 354 m_pressedPos = (orientation() == HorizontalScrollbar ? convertFromContai
ningWindow(evt.pos()).x() : convertFromContainingWindow(evt.pos()).y()); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 | 510 |
| 506 IntPoint Scrollbar::convertFromContainingView(const IntPoint& parentPoint) const | 511 IntPoint Scrollbar::convertFromContainingView(const IntPoint& parentPoint) const |
| 507 { | 512 { |
| 508 if (m_client) | 513 if (m_client) |
| 509 return m_client->convertFromContainingViewToScrollbar(this, parentPoint)
; | 514 return m_client->convertFromContainingViewToScrollbar(this, parentPoint)
; |
| 510 | 515 |
| 511 return Widget::convertFromContainingView(parentPoint); | 516 return Widget::convertFromContainingView(parentPoint); |
| 512 } | 517 } |
| 513 | 518 |
| 514 } | 519 } |
| OLD | NEW |