| 154 | } |
| 155 | |
| 156 | void ScrollLayer::onScrollDrag(GestureRecognizerState state, const DragEvent& event) { |
| 157 | cancelScrollAnimation(); |
| 158 | |
| 159 | if (state == GestureRecognizerStateBegan) { |
| 160 | _scrollGestureOffset = _contentOffset; |
| 161 | } |
| 162 | |
| 163 | if (_scroller != nullptr) { |
| 164 | _scroller->onDrag(state, event); |
| 165 | } |
| 166 | |
| 167 | auto dragVelocity = Vector::make(_horizontal ? event.velocity.dx : 0.0f, !_horizontal ? event.velocity.dy : 0.0f); |
| 168 | auto targetOffset = targetOffsetForInteractiveOffset( |
| 169 | Point(_scrollGestureOffset.x - event.offset.width, _scrollGestureOffset.y - event.offset.height)); |
| 170 | |
| 171 | if (state == GestureRecognizerStateBegan) { |
| 172 | resumeScrollPerfLogger(); |
| 173 | if (_dismissKeyboardOnDrag) { |
| 174 | requestFocus(this); |
| 175 | } |
| 176 | if (_listener != nullptr) { |
| 177 | _listener->onDragStart(*this, _contentOffset, dragVelocity); |
| 178 | } |
| 179 | } else if (state == GestureRecognizerStateEnded) { |
| 180 | onScrollEnded(targetOffset, dragVelocity); |
| 181 | } else { |
| 182 | setContentOffset(targetOffset, dragVelocity, false); |
| 183 | } |
| 184 | } |
| 185 | |
| 186 | void ScrollLayer::onScrollWheel(GestureRecognizerState /*state*/, const WheelScrollEvent& scrollEvent) { |
| 187 | auto desiredContentOffset = getContentOffset().makeOffset(scrollEvent.direction.dx, scrollEvent.direction.dy); |